Skip to main content
GET
Streams the progress of a deploy or update job so you do not have to poll. With an API key the scope is templates:deploy. Only the account that started the job can follow it; any other job ID is TEMPLATE_DEPLOY_NOT_FOUND. The response is a Server-Sent Events stream (text/event-stream), not JSON. It starts with the current state of the job and then sends a progress event every time the job changes. A heartbeat event arrives every 15 seconds while nothing changes, to keep the connection open. When the job reaches succeeded or failed, an end event closes the stream. Because the state comes from stored data, you can reconnect at any time and get the current state again.
string
required
The ID of the job.

Events

event
The data is one JSON object with the state of the job.
event
A keep-alive. The data is an empty object ({}).
event
The job is over and the stream closes. The data is { "deploy_id": "..." }.
Events never carry outputs, resources or variable values. When you receive end, read the job with Get Deploy Job to get the outputs. A secret output marked once is returned on that first read of the finished job.

Error Responses

Errors are returned before the stream opens, as JSON.
string
The error code indicating the reason for the failure. Possible values:
  • VALIDATION_ERROR: deploy_id is not a valid ID (400).
  • API_KEY_SCOPE_DENIED: The API key does not have the templates:deploy scope (403).
  • TEMPLATE_DEPLOY_NOT_FOUND: The job does not exist or belongs to another account (404).
  • INTERNAL_SERVER_ERROR: Unexpected failure (500).
Last modified on October 28, 2026