# Get template deployment

`GET https://api.instacloud.com/template-deployments/{deploymentId}`

**Token scope:** `account` · `org` · `project` — read-only tokens allowed.

Poll a template deployment: status, current step, per-service URLs, and the failure log tail.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `deploymentId` | path | `string` | yes |  |

## Response 200

One server-side template deployment run and its progress.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | no |  |
| `status` | `"running" \| "succeeded" \| "failed" \| "partial"` | no | partial = some services came up healthy, others failed — created resources are kept either way |
| `step` | `"create_services" \| "write_variables" \| "deploy" \| "health_check"` | no | the pipeline step the run is currently on (or stopped at) |
| `templateCode` | `string` | no |  |
| `templateVersion` | `string` | no |  |
| `projectId` | `string` | no |  |
| `branchId` | `string` | no |  |
| `region` | `string` | no | InstaCloud region slug every service of this deployment was created in. Deployments recorded before regions were recorded read as the platform default. |
| `services` | `object[]` | no |  |
| `services.name` | `string` | no | the service's actual name on the branch, which is the manifest's name only for the first copy — a second deployment of the same template into the same branch names its services <name>-2 and leaves the first copy alone |
| `services.serviceId` | `string` | no |  |
| `services.url` | `string` | no |  |
| `services.state` | `"pending" \| "created" \| "deployed" \| "healthy" \| "failed"` | no |  |
| `services.skipped` | `boolean` | no | an upgrade stepped over this service because the user had deleted it — the run never touched it, serviceId points at the deleted row, and state stays pending however the deployment ends. Not "still in progress" |
| `error` | `string` | no |  |
| `logsTail` | `string` | no | container log tail captured when a service never became healthy |
| `rollbackTo` | `object` | no | the version one step back, present only when this deployment was produced by an upgrade: what POST .../rollback would return the instance to. Absent on a first deploy, once the predecessor is gone, and on a deployment a ROLLBACK produced — that row's step back is the newer version it just left, which is offered as the update, not as a way back. Present is not a promise it will succeed — a version whose manifest is no longer recorded, or was republished with different content, still refuses at click time |
| `rollbackTo.version` | `string` | yes |  |
| `createdAt` | `string` | no |  |

## Response 404

Default Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `error` | `string` | yes |  |
