Sign inGet Started

Get a template version

GET
/v1/whatsapp/templates/{template_ref}/versions/{version_id}
const version = await bird.whatsapp.templates.versions.get(
  "bird_otp",
  "wav_01ky4x8e4genzb7way45txfkm1",
);
console.log(version.id, Object.keys(version.languages));
Response200
{
  "id": "wav_01krdgeqcxet5s7t44vh8rt9mg",
  "template_id": "wat_01krdgeqcxet5s7t44vh8rt9mg",
  "version_number": 4,
  "submitted_at": "2026-07-20T11:04:00Z",
  "variables": [
    {
      "type": "code"
    }
  ],
  "languages": {
    "en": {
      "status": "approved",
      "components": [
        {
          "type": "body",
          "text": "Your verification code is {{1}}.",
          "example_parameters": [
            {
              "type": "text",
              "text": "123456"
            }
          ]
        }
      ]
    }
  },
  "created_at": "2026-07-20T10:31:00Z"
}

Returns one version: the content of every language it holds and what its submission did with each.

Parameters

template_refstring

Template ID (wat_ prefix) or slug. A value that parses as a valid ID resolves by ID; any other value resolves as a slug.

version_idstring

ID of the template version (wav_ prefix), as returned by the version list.

Response Payload

id
string
required

Stable Bird identifier for the version.

template_id
string
required

The template this version belongs to.

version_number
nullable integer

The version's sequence number, assigned when it is submitted. Null on a draft, which has not been submitted and has no place in the sequence yet.

submitted_at
nullable string
required

When this version was submitted to Meta. Null on a draft, which has not been submitted, and null for a built-in template's version, which Bird ships already approved rather than submitting on your behalf.

variables
array of object

The variable slots this version's content fills in from the values you supply when sending. Combined across every language, because languages need not declare the same slots: if the English body uses first_name and the French one uses last_name, both appear here. A template with named parameters keys them by name; a positional one keys them by their {{n}} position, as 1, 2 and so on. Supply the slots the language you send declares, by these keys in template.parameters or through components.

Show child attributes
languages
object
required

This version's content, keyed by BCP-47 language tag, with what its submission did with each language.

created_at
nullable string
required

When the version was opened. Null for a built-in template's version, which Bird ships rather than stores.

Continue with the documentation, guides and examples for this topic.