Concepts
Addressing styles, raw vs segment inference, sync vs async responses, and the audit trail.
Addressing: deployment, pipeline, or goal
Every inference ultimately runs against one concrete deployment — a specific training served live. What differs is how you name it:
- Deployment URL (
/deployments/{deployment_id}/…) — pinned to that exact version. A promotion mints a new deployment ID, so this URL goes stale by design. Use it for reproducibility and A/B tests. - Pipeline alias (
/pipelines/{pipeline_id}/…) — resolved to the pipeline's current deployment on every request. Survives promotions. - Goal alias (
/goals/{goal_id}/…) — resolved goal → current champion → current deployment. Survives champion swaps and promotions. If you track an outcome ("forecast daily sales"), this URL never changes no matter what Goals does under the hood.
The aliases delegate to the same handlers as the deployment routes, so the request and response contracts are identical. A freshly promoted pipeline resolves even while its deployment is still coming up — you may get a clear "not ready" error rather than a 404 during that window.
Raw /infer vs /infer-segment
/infer | /infer-segment | |
|---|---|---|
| Input | A tensor you build yourself | Nothing — the platform prepares it |
| Body | { "input": [[…]] } | {} (options for foundation deployments) |
| Data source | Whatever you send | The deployment's live segment data |
| Use when | You control preprocessing end to end | Almost always |
/infer-segment fetches the segment's latest values, applies the same
normalization and engineered features used during training, and maps
outputs back to segment labels — so the forecast you get matches what the
model was trained to produce. Raw /infer skips all of that and sends
your tensor straight to the model.
Segment-based inference has
the details.
Synchronous 200 vs asynchronous 202
Most inferences return 200 with predictions in the response. Foundation
deployments scale to zero when idle — if the model server was cold, waking
it can take minutes, so segment inference returns 202 immediately
instead of holding your request open:
{
"async": true,
"status": "pending",
"inference_id": "b7e6…",
"deployment_id": "c4a7…",
"segment_id": "SEGMENT_ID",
"message": "Inference started. The model server may be cold; this can take a few minutes."
}Completion is signaled by the inference.completed event on the
workspace's realtime channel; as a fallback, poll
GET /v1/inference/{inference_id}
with the returned inference_id.
Every inference is logged
Each request writes a full record: the request and response payloads, latency, the deployment and segment involved, and — for segment inference — a snapshot of the exact history window the model saw. That makes every forecast auditable after the fact. Browse the trail in History & usage.
Inference on Shared serving is metered in credits per request; Dedicated serving includes inference in its flat hosting fee. Failed inferences are refunded automatically. Rates live in Billing.

