Sign inGet Started

Get a version's language

GET
/v1/whatsapp/templates/{template_ref}/versions/{version_id}/languages/{language}
const language = await bird.whatsapp.templates.versions.languages.get(
  "bird_otp",
  "wav_01ky4x8e4genzb7way45txfkm1",
  "nl-BE",
);
for (const component of language.components) console.log(component.type);
Risposta200
{
  "language": "pt-BR",
  "components": [
    {
      "type": "body",
      "format": "text",
      "text": "Your verification code is {{1}}.",
      "code_expiration_minutes": 60,
      "example_parameters": [
        {
          "type": "text",
          "text": "123456",
          "url": "https://www.example.com/holiday/banner.jpg",
          "name": "first_name"
        }
      ],
      "buttons": [
        {
          "type": "url",
          "otp_type": "copy_code",
          "text": "Copy code",
          "url": "https://www.example.com/orders/{{1}}",
          "phone_number": "+14155550100",
          "example_parameters": [
            {
              "type": "text",
              "text": "123456",
              "url": "https://www.example.com/holiday/banner.jpg",
              "name": "first_name"
            }
          ]
        }
      ],
      "cards": [
        {
          "components": [
            {
              "type": "header",
              "format": "image",
              "text": "Chronograph, brown leather",
              "example_parameters": [
                {
                  "text": "123456",
                  "url": "https://www.example.com/holiday/banner.jpg",
                  "name": "first_name"
                }
              ],
              "buttons": [
                {
                  "type": "url",
                  "otp_type": "copy_code",
                  "text": "Copy code",
                  "url": "https://www.example.com/orders/{{1}}",
                  "phone_number": "+14155550100"
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "status": "approved",
  "revision": 4,
  "content_hash": "sha256:9f2c4e1a7b03d85fbc6e29d417a05e8c3b1d9f76a2e4c018d53b7f9a6c2e18d4",
  "category": "authentication",
  "previous_category": "authentication",
  "quality": {
    "current_score": "green",
    "previous_score": "green",
    "updated_at": "2026-07-26T16:41:00Z"
  },
  "rejection": {
    "category": "invalid_format",
    "reason": "Parameters are adjacent.",
    "recommendation": "Add text between the two parameters."
  },
  "error": {
    "description": "component of type HEADER is missing expected field(s)",
    "meta_error_code": "2388043"
  },
  "submitted_at": "2026-07-26T16:40:00Z",
  "approved_at": "2026-07-21T08:15:00Z",
  "updated_at": "2026-07-26T16:41:00Z",
  "updated_by": "usr_01krdgeqcxet5s7t44vh8rt9mg"
}

Returns one language of one version: its content blocks, what this version's submission did with it, and everything Meta holds about it: review outcome and category.

Parametri

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.

languagestring

The language, as a BCP-47 tag. Case and separator variance is accepted and normalised, and the canonical form is returned.

Payload di risposta

language
string
obbligatorio

The canonical tag this language is addressed by.

components
array of object
obbligatorio

This language's content blocks, in display order, exactly as submitted or as they stand in the draft.

Mostra attributi secondari
components.type
string
obbligatorio

The content block's type within the template.

Possible values (may grow over time): header, body, footer, buttons, carousel

components.format
string

The header block's content type. Present on a header block. A text header carries a line of copy. The image, video, gif, and document formats each show a file whose address is in the block's example_parameters. The location format shows a map. It carries no content because the coordinates belong to the message rather than the template.

Possible values (may grow over time): text, image, video, gif, document, location

components.text
string

The block's text content, with any variable placeholders shown inline. Present when the block carries text. An authentication template's body and footer are written by WhatsApp from the two settings below rather than by you, so their text is absent until the language has been submitted and WhatsApp has supplied it.

components.add_security_recommendation
boolean

Whether this authentication template's body ends with WhatsApp's advice not to share the code. Present on an authentication template's body block.

components.code_expiration_minutes
integer

How long the passcode stays valid, which WhatsApp states in this footer. Present on an authentication template's footer block. Omitting it on a write leaves the footer off entirely.

components.example_parameters
array of object

Example values for this block's variables, in placeholder order (one per {{n}}). Use them to see what a filled message looks like. Present when the block has variables.

Mostra attributi secondari
components.buttons
array of object

The buttons attached to this block. Present when the block carries buttons.

Mostra attributi secondari
components.cards
array of object

The cards this block scrolls through, in display order. Present on a carousel block.

Mostra attributi secondari
components.cards.components
array of object
obbligatorio

This card's content blocks, in display order.

Mostra attributi secondari
components.cards.components.type
string
obbligatorio

The card block's type.

Possible values (may grow over time): header, body, buttons

components.cards.components.format
string

The card header's content type. Present on a card's header block.

Possible values (may grow over time): image, video

components.cards.components.text
string

The block's text content, with any variable placeholders shown inline.

components.cards.components.example_parameters
array of object

Example values for this block's variables, in placeholder order.

Mostra attributi secondari
components.cards.components.buttons
array of object

The buttons this card carries. Present on a card's buttons block.

Mostra attributi secondari
status
string

What this submission did with this language. Absent on a draft, which has not been submitted. On a superseded version this is history: how that submission went. It does not report whether the language is sendable now.

Possible values (may grow over time): approved, pending, rejected, paused, disabled, in_appeal, pending_deletion, limit_exceeded, archived, deleted, submit_failed

revision
integer
obbligatorio

This language's write counter, incremented every time its content changes. It sits at 1 on content that has never been written through this API, which is every built-in template's language.

content_hash
string
obbligatorio

A hash over the serialized components this API surfaces, prefixed with the algorithm that produced it (sha256:) so the algorithm can change without the field becoming ambiguous. It tells you whether a language differs without transferring its content. Compare hashes only within one version of this API. Adding a field to the component shape changes every hash even when the underlying content is unchanged. Email's field of the same name carries bare hex and predates this form.

category
string

The category Meta is applying to this language, which is what messages from it are priced at.

Possible values (may grow over time): authentication, utility, marketing

previous_category
string

The category this language held before Meta moved it.

Possible values (may grow over time): authentication, utility, marketing

quality
object

Meta's quality rating for this language. Present only on the version currently in service, and only once Meta has rated it.

Mostra attributi secondari
rejection
object

Why Meta refused this content, present when status is rejected. Absent otherwise.

Mostra attributi secondari
error
object

Why the submission did not complete, present when status is submit_failed. Absent otherwise, including on a rejection, whose reason is in rejection.

Mostra attributi secondari
submitted_at
nullable string
obbligatorio

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

approved_at
nullable string

When Meta approved this exact content. It is a permanent mark on the content rather than a status, so a later pause or archival does not clear it. Null for a built-in template's language, whose approval predates Bird holding a date for it.

updated_at
nullable string
obbligatorio

When this language last changed. Null for a built-in template's language, which Bird ships rather than stores.

updated_by
nullable string

The workspace member who last wrote this language. Always null for a built-in template's language: nobody in the workspace authored it.

Continua con la documentazione, le guide e gli esempi per questo argomento.