Sign inGet Started

Create a template draft

POST
/v1/whatsapp/templates/{template_ref}/versions
const draft = await bird.whatsapp.templates.versions.create("order_update");
console.log(draft.id);
响应200
{
  "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"
}

Opens the template's draft, seeded from the newest submitted version, or an empty draft if the template has none. A template has at most one open draft. The API returns 200 with an existing draft and 201 when this call opens one; both responses use the same body shape. Read the template's draft_version_id first if you do not want to open a draft.

A WhatsApp template has no draft until this call opens one. The email channel has no equivalent operation, because an email template's draft always exists.

参数

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.

响应载荷

id
string
必填

Stable Bird identifier for the version.

template_id
string
必填

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
必填

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.

显示子属性
languages
object
必填

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

created_at
nullable string
必填

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