# Get template

`GET https://api.instacloud.com/templates/{code}`

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

One template: upstream pin, services, and its required/optional variables. Public — no auth required.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `code` | path | `string` | yes | template code (lower-kebab) |

## Response 200

Default Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `template` | `object` | yes |  |
| `template.code` | `string` | no |  |
| `template.version` | `string` | no |  |
| `template.maintainer` | `string` | no |  |
| `template.source` | `string` | no |  |
| `template.name` | `string` | no |  |
| `template.tagline` | `string` | no |  |
| `template.category` | `string` | no |  |
| `template.tags` | `string[]` | no |  |
| `template.upstream` | `object` | no | the upstream pin (repo/image/pinned) from the manifest |
| `template.services` | `object` | no | the manifest's services map, keyed by service name |
| `template.variables` | `object` | no |  |
| `template.variables.required` | `object[]` | no |  |
| `template.variables.required.name` | `string` | yes |  |
| `template.variables.required.description` | `string` | no |  |
| `template.variables.required.required` | `boolean` | no |  |
| `template.variables.required.default` | `string` | no |  |
| `template.variables.required.generate` | `string` | no | generator spec (secret:N) — the platform auto-generates the value when the caller supplies none |
| `template.variables.required.editable` | `boolean` | no |  |
| `template.variables.optional` | `object[]` | no |  |
| `template.variables.optional.name` | `string` | yes |  |
| `template.variables.optional.description` | `string` | no |  |
| `template.variables.optional.required` | `boolean` | no |  |
| `template.variables.optional.default` | `string` | no |  |
| `template.variables.optional.generate` | `string` | no | generator spec (secret:N) — the platform auto-generates the value when the caller supplies none |
| `template.variables.optional.editable` | `boolean` | no |  |
| `template.constraints` | `object[]` | no |  |
| `template.totalProjects` | `integer` | no | distinct PROJECTS that deployed this template since its first publish (any outcome) — the adoption number; one project deploying repeatedly counts once |
| `template.activeProjects` | `integer` | no | distinct PROJECTS that still have at least one live service from a SUCCEEDED deployment of this template made since its first publish (service in creating/active; deleting, errored or deleted services do not keep a project active) — what a visitor reads as "running this now" |
| `template.successRate` | `integer \| null` | no | share of the CONCLUDED deployments of this template since its first publish that reached succeeded, as a whole percent. Denominator: deployments with status succeeded + failed + partial, EXCLUDING runs abandoned by a platform restart (a platform release must not count against a template) and excluding running deployments (not concluded). A partial deployment counts as a failure. This is a per-DEPLOYMENT rate, not per attempt: an idempotent retry reuses its deployment row. null (never 0) when nothing has concluded — no data is not 0% |
| `template.deploymentCount` | `integer` | no | cumulative DEPLOYMENT runs for this code since the template was first published |
| `template.activeDeploymentCount` | `integer` | no | DEPLOYMENT runs since the first publish that succeeded and still have a live attributed service |
| `template.logoUrl` | `string \| null` | no | absolute https logo URL; null when the template published no logo. Official templates: a commit-pinned jsDelivr URL (TEMPLATE_LOGO_HOST in templateManifest.ts). Community templates: any https:// link the author set. |
| `template.license` | `string \| null` | no | the upstream project's license id, from the manifest's upstream.license; null when the manifest declares none |
| `template.updatedAt` | `string` | no | when this template was last published — the catalog freshness stamp |
| `template.readme` | `string \| null` | no | the template README as markdown (capped at publish — see templateManifest.ts TEMPLATE_README_MAX_BYTES); null when the template published none. Render with raw HTML disabled: the platform bounds its size, not its contents. |
| `template.documentationUrl` | `string \| null` | no | the upstream project's own documentation link, from the manifest's meta.links.documentation; null when the manifest declares none |

## Response 404

Default Response

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