---
title: "Get an Apple Messages template version"
canonical: "https://bird.com/docs/api/reference/get-amb-template-version"
---

# Get an Apple Messages template version

`GET /v1/amb/templates/{template_ref}/versions/{version_id}`

Returns one version with its variables and text in every language. A workspace draft is editable, while published workspace versions are immutable. A built-in template exposes its current catalogue content through a synthetic published version.

## Code samples

**TypeScript**

```ts
const version = await bird.amb.templates.versions.get(
  "bird_order_update",
  "amv_01ky4x8e4genzb7way45txfkm1",
);
console.log(version.id, Object.keys(version.languages));
```

Examples: [TypeScript](/docs/api/reference/get-amb-template-version.ts.md) · [Python](/docs/api/reference/get-amb-template-version.py.md) · [Go](/docs/api/reference/get-amb-template-version.go.md) · [PHP](/docs/api/reference/get-amb-template-version.php.md) · [CLI](/docs/api/reference/get-amb-template-version.cli.md) · [MCP](/docs/api/reference/get-amb-template-version.mcp.md) · [cURL](/docs/api/reference/get-amb-template-version.curl.md)

## Example response `200`

```json
{
  "id": "amv_01krdgeqcxet5s7t44vh8rt9mg",
  "template_id": "amt_01krdgeqcxet5s7t44vh8rt9mg",
  "version_number": 1,
  "status": "published",
  "revision": 1,
  "variables": [
    {
      "key": "order_number",
      "type": "text",
      "required": true,
      "constraint": "A string, number, or boolean."
    }
  ],
  "languages": {
    "en": {
      "content": {
        "type": "text",
        "body": "Your order {{ order_number }} is on its way."
      },
      "revision": 1,
      "content_hash": "sha256:3d948846f5f773fb7bed8ab81b57f3d0ff2cbff24cb549718f4d389f1ab0300a",
      "updated_at": "2026-09-10T09:00:00Z"
    }
  },
  "default_language": "en",
  "created_at": "2026-09-10T09:00:00Z",
  "published_at": "2026-09-10T09:00:00Z"
}
```

## Path parameters

- `template_ref` (string): The template's ID (`amt_…`) or slug.
- `version_id` (string): The version to read or reset.

## Response body

- `id` (string, required): Template version ID.
- `template_id` (string, required): The template this version belongs to.
- `version_number` (nullable integer, required): Sequential publication number. Null for the draft; a built-in template reports 1.
- `status` (string, required)

  Whether the version is the editable draft or published. Published workspace versions are immutable and remain `published` after a later version goes live. A built-in template's synthetic published version projects the current catalogue entry.

  Possible values: `draft`, `published`
- `revision` (integer, required): The version revision. A draft revision advances with each metadata or content change. Published workspace versions are frozen; a built-in template's synthetic version reports 0.
- `variables` (array of object, required): Variables inferred from the version's content. Every language in a publishable Apple Messages version uses the same set. Built-in templates may apply additional typed constraints described by each variable.
- `variables.key` (string, required): The key this slot is filled by. When `system` is true it is the reserved `bird` key or a dotted path beneath it, such as `bird.contact.first_name`, and naming it in a send is rejected. Otherwise, on email and SMS it is the key you set in the send's `parameters` object, and on WhatsApp the `name` you repeat on the matching parameter inside `components`, or, for a template whose placeholders are positional, the position itself as `1`, `2` and so on.
- `variables.type` (string, required)

  The value type this slot accepts. Built-in SMS templates use typed slots (`code`, `amount` and the rest), each of which rejects a value that does not match its `constraint`. Email, WhatsApp and workspace SMS templates use `text`. Workspace SMS parameters must be scalar values. Open enum: treat an unrecognized value as a future type rather than an error.

  Possible values (may grow over time): `code`, `ttl`, `count`, `ref`, `date`, `date_time`, `amount`, `currency`, `text`
- `variables.required` (boolean, required): Whether the send must supply this variable. Omitting a required value returns `422` on email, SMS, and WhatsApp sends. Always false when `system` is true, because you do not supply that slot's value.
- `variables.constraint` (string, required): A plain-language description of what values this variable accepts. When `system` is true it names where Bird takes the value from instead, because there is no value for you to send.
- `variables.sensitive` (boolean): Whether this slot's value is redacted from stored message content. A placeholder replaces the sensitive value in message history; transport queues can still carry the text needed for delivery.
- `variables.system` (boolean): Whether the value comes from Bird rather than from the send. Absent means false. Only email templates have system slots, identified by the reserved `bird` key or a dotted path beneath it; every SMS and WhatsApp slot is yours to fill. A draft can also name a reserved key no Bird value fills, including `bird` itself: `constraint` says so, and publishing that draft is rejected.
- `languages` (object, required): Full content for each language, keyed by canonical BCP-47 tag.
- `default_language` (string, required): The language this version treats as its default.
- `created_at` (nullable string, required): When the version was created. Null for a built-in template's synthetic version.
- `published_at` (nullable string, required): When the version was published. Null for the draft and for a built-in template's synthetic version.

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
