{username}/{alias}.
request_id, status, response_url, status_url, cancel_url — and status polling, SSE, webhooks and retention headers all behave the way they do for catalog models.
The input body is yours
Everything at the top level of the body other than the reserved keys is handed to your workload as its job input, untouched:Reserved keys
The same four top-level keys are reserved on every endpoint. Three of them work unchanged on deployments:Publication exists so a catalog model’s runs can appear as public examples on that model’s page. A deployment has no such surface, which is why
public is rejected at submit.The refusal is at submit only: PATCH /requests/{requestId}/visibility is not target-aware and will happily flip a deployment request public afterwards, which also exempts it from retention. Nothing surfaces it publicly, but do not do it.metadata, webhook, webhook_events_filter or public cannot receive it through the raw body.
Results are verbatim
GET {response_url} returns your workload’s own JSON, exactly as your handler returned it:
- No output schema and no validation. Whatever shape you return — object, array, string — comes back as
output. - No media finalization. ModelRunner does not scan the output for image or video URLs, does not re-host them, and does not generate thumbnails. Files your workload writes are your responsibility.
- One exception, and it is blunt: if the output contains a URL pointing at platform-internal infrastructure anywhere, the entire
outputis replaced by a placeholder string — not just that field — and it stays replaced, because deployment outputs are never re-hosted. If you hit this, change the workload to stop emitting those URLs (upload to your own storage, or return the bytes). Every other URL passes through untouched.
unknown (JS) / Any (Python). Parse them yourself.
Reading a failed run still follows the platform convention: GET /requests/{requestId} carries billingStatus: "failed" — the reliable signal — and response_url answers 422 with an error field whenever failure detail is available. See Statuses & failure semantics.
Who can submit
Deployment jobs are owner-only. Your API key can submit to your own deployments; another account’s key gets a403, even if they know the endpoint.
Submission is also gated on two live conditions:
Beta admission applies to job submission too — see Beta gating.
Finding deployment requests later
Deployment jobs land in the same request history as everything else, with two extra fields:
Filter the list by deployment:
deploymentId combines with status, metadata and pagination the same way modelEndpoint does. The dashboard’s Requests tab on each deployment is this filter.

