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);
Response200
{
  "parameter_bindings": {
    "full_name": "{{ first_name | append: ' ' | append: last_name }}",
    "header_url": "https://cdn.example.com/inv/{{ order_id }}.pdf"
  },
  "optimization_spec": {
    "bid_amount": 5000,
    "bid_strategy": "lowest_cost_with_bid_cap",
    "bid_country_multiplier_overrides": {
      "IN": 1.2,
      "MX": 0.8
    }
  },
  "message_send_ttl_seconds": 600,
  "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"
  },
  "pause": {
    "started_at": "2026-07-26T16:41:00Z",
    "reason": "first_pause",
    "description": "Your WhatsApp message template has been paused."
  },
  "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",
  "whatsapp_manager_url": "https://business.facebook.com/latest/whatsapp_manager/template_details/?asset_id=102290129340398&id=1143800821515747",
  "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.

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.

languagestring

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

Response Payload

parameter_bindings
object

This language's bindings, absent when it has none.

optimization_spec
nullable object

This language's maximum price, or null when Meta's standard rate applies.

Show child attributes
optimization_spec.bid_amount
integer
required

The maximum price per 1,000 deliveries, in the smallest unit of the account's currency. The reach estimate returns that currency as currency_code. 5000 is USD 0.05 per delivery.

optimization_spec.bid_strategy
string
required

How Meta bids for each delivery.

  • lowest_cost_with_bid_cap: Meta delivers at the lowest cost it can find, never above the bid.

Possible values (may grow over time): lowest_cost_with_bid_cap

optimization_spec.bid_country_multiplier_overrides
object
required

Scales the bid for recipients in a country, keyed by ISO 3166-1 alpha-2 code. A country not listed uses 1. Empty when no country is scaled.

message_send_ttl_seconds
nullable integer

How long WhatsApp keeps trying to deliver a message from this language, in seconds, or null when the language uses WhatsApp's default (10 minutes for authentication, 30 days otherwise).

language
string
required

The canonical tag this language is addressed by.

components
array of object
required

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

Show child attributes
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
required

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
required

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. On a draft, the category its next submission goes under.

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.

Show child attributes
pause
object

Why WhatsApp paused or disabled this language. Present only on the version currently in service, and only until the language can send again.

Show child attributes
rejection
object

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

Show child attributes
error
object

Why the submission did not complete. Present when status is submit_failed. Also present when WhatsApp refused a change to optimization_spec or message_send_ttl_seconds; the language keeps sending on the maximum price and time-to-live WhatsApp already held. Absent otherwise, including on a rejection, whose reason is in rejection.

Show child attributes
submitted_at
nullable string
required

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.

whatsapp_manager_url
nullable string

Opens this language in Meta's WhatsApp Manager, for people with access to the business portfolio. Null until WhatsApp holds the language, which can take a minute after submitting, and null again once WhatsApp has deleted it. Always null for a built-in template's language.

updated_at
nullable string
required

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.

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