# List templates

`GET https://api.instacloud.com/templates`

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

List published templates in the platform registry. Public — no auth required.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `query` | query | `string` | no | substring filter over code/name/tagline/tags |
| `category` | query | `string` | no | exact category filter (case-insensitive) |

## Response 200

Default Response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `templates` | `object[]` | yes |  |
| `templates.code` | `string` | no |  |
| `templates.version` | `string` | no |  |
| `templates.maintainer` | `string` | no | who publishes it, as the manifest declares ('official' for InstaCloud's own) |
| `templates.source` | `string` | no | the registry row's publisher tag, set at publish; defaults to the maintainer |
| `templates.name` | `string` | no |  |
| `templates.tagline` | `string` | no |  |
| `templates.category` | `string` | no |  |
| `templates.tags` | `string[]` | no |  |
| `templates.totalProjects` | `integer` | no | distinct PROJECTS that deployed this template since its first publish (any outcome) — the adoption number; one project deploying repeatedly counts once |
| `templates.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" |
| `templates.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% |
| `templates.deploymentCount` | `integer` | no | cumulative DEPLOYMENT runs for this code (every run since the template was first published) — the deployment-unit counterpart of totalProjects |
| `templates.activeDeploymentCount` | `integer` | no | DEPLOYMENT runs since the first publish that succeeded and still have a live attributed service — the deployment-unit counterpart of activeProjects |
| `templates.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. |
| `templates.license` | `string \| null` | no | the upstream project's license id, from the manifest's upstream.license; null when the manifest declares none |
| `templates.updatedAt` | `string` | no | when this template was last published — the catalog freshness stamp |
