---
title: "Retrieve full details for a single template"
method: GET
path: "/templates/{id}"
tags: ["Template"]
---

# Retrieve full details for a single template

`GET /templates/{id}`

Returns the complete record for the template identified by `{id}` within the requesting tenant.

**When to use:** Call this after creating a template (via either upload flow) to check its status, retrieve download URLs for its artifacts, or inspect its metadata. To browse or filter all templates use `GET /templates`; for the ordered column definitions of a scratch-built template use `GET /templates/{id}/columns`.

**How:** Supply `{id}` (the template ID returned by the create endpoints) and the required `tenant-id` header.

**Returns:** The template record whose `data` object carries the template's name, description, status (`in-progress`, `success`, or `failure`), type, and the GCS object paths of its artifacts. For each artifact that exists in GCS, a V4-signed download URL valid for 7 days is generated at request time (never stored) and injected into `data`: `templateUrl` (template CSV), `mappingsUrl` (column-mappings CSV), and `schemaUrl` (generated validation schema). Read-only; no state is changed.

## Path parameters

- `id` string, required

## Headers

- `tenant-id` string, required

## Response `200`

The template record, with request-time signed download URLs injected into `data` for every artifact that exists in GCS.

- RosterTemplateResponseSchema — A roster template record.
  - `id` string — Server-generated unique identifier of the template.
  - `tenantId` string — Tenant that owns the template.
  - `createdAt` string, date-time
  - `createdBy` string — ID of the user who created the template.
  - `updatedAt` string, date-time
  - `updatedBy` string — ID of the user who last updated the template.
  - `data` object — Template payload. Persisted keys: `templateName`, `description`, `status` (`in-progress` while awaiting mapping confirmation/approval, `success` once approved, `failure` when a re-approval's schema generation failed), `type` (`PRACTITIONER`, `FACILITY`, or `GROUP`), plus - once approved - `template` and `schema` (GCS object paths of the template CSV and generated JSON schema). Responses additionally inject short-lived signed download URLs generated at request time and never stored: `mappingsUrl` on both list and detail reads, and `templateUrl`/`schemaUrl` on the detail read when the underlying objects exist. Signed URLs are V4-signed and valid for 7 days.

## Other responses

- `401` — Authentication required - supply a valid bearer token.
- `403` — The authenticated user lacks the `READ_TEMPLATE` permission.
- `404` — No template with the given `{id}` exists for the tenant. Verify the ID against `GET /templates`.
- `500` — Unexpected server-side failure (for example a GCS or data-layer outage). Safe to retry; the operation is read-only.

---

[API](https://skmtc.net/certifyos/apis/certify-api-layer.md) · [All operations](https://skmtc.net/certifyos/apis/certify-api-layer/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/certifyos/certify-api-layer/revisions/563848e0ecc0/schema)
