Update a message template
/v1/whatsapp/templates/{template_ref}const template = await bird.whatsapp.templates.update("order_update", {
name: "Order shipped",
});
console.log(template.slug, template.name);template = client.whatsapp.templates.update("order_update", name="Order shipped")
print(template.slug, template.name)template, err := client.Whatsapp.Templates.Update(context.Background(), "order_update", bird.WhatsappTemplatesUpdateParams{
Name: bird.String("Order shipped"),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(template.Id, template.Name)$template = $bird->whatsapp->templates->update('order_update', (new WhatsAppTemplateUpdate())->setName('Order shipped'));
echo $template->getSlug(), ' ', $template->getName(), "\n";bird whatsapp templates update <template-ref> \
--default-language en \
--name 'Order update' \
--on-missing-language fallback \
--slug welcome-emailcurl -X PATCH "https://us1.platform.bird.com/v1/whatsapp/templates/{template_ref}" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"slug": "welcome-email",
"name": "Order update",
"default_language": "en",
"on_missing_language": "fallback"
}'{
"id": "wat_01krdgeqcxet5s7t44vh8rt9mg",
"slug": "bird_otp",
"name": "Order update",
"description": "Sent when an order ships.",
"scope": "system",
"waba": "102290129340398",
"category": "authentication",
"status": "active",
"default_language": "pt-BR",
"on_missing_language": "fallback",
"language_source_required": false,
"available_languages": [
"pt-BR"
],
"languages": {
"en": {
"status": "approved"
}
},
"draft_version_id": "wav_01krdgeqcxet5s7t44vh8rt9mg",
"live_version_id": "wav_01krdgeqcxet5s7t44vh8rt9mg",
"pending_version_id": "wav_01krdgeqcxet5s7t44vh8rt9mg",
"last_submitted_at": "2026-07-26T16:40:00Z",
"next": [
{
"kind": "operation"
}
]
}
Updates a template's metadata. The slug can change only before the first submission. Changing it after the first submission returns 409 (E15070), even if Meta rejects the template. Display names remain editable. Built-in templates cannot be edited.
पैरामीटर
template_refstringTemplate ID (wat_ prefix) or slug. A value that parses as a valid ID resolves by ID; any other value resolves as a slug.
Request Payload
slugA new workspace-unique handle. Editable only before the first submission. After a change, the old slug no longer resolves; the template ID stays the same.
nameThe template's display name. Editable at any time; it is not what a send references.
descriptionWhat the template is for. Send null to clear it.
default_languageThe language a send falls back to, and the one language the template is required to carry. Repointing it at a language the draft does not hold is refused, the same way removing the current default is: add the language first.
on_missing_languageHow a send behaves when it asks for a language this template does not carry. Omitting it leaves the template's current setting alone. The fail default belongs to a create, and a partial update never reapplies it.
Possible values: fallback, fail
language_source_requiredWhether a send has to name a language.
Response Payload
idStable Bird identifier for the template.
slugThe template's handle, editable before the first submission. Address it by this handle, and reference it when sending. Handles beginning with bird_ are reserved for our built-in templates.
slug_editableWhether the slug can still be changed. False after the first submission and for built-in templates.
nameA display name for the template. Nothing resolves through it, so it is safe to show wherever a human reads the template.
descriptionWhat the template is for. Null when unset.
scopeWhether the template is one of our built-in templates (system) or one your workspace created (workspace).
Possible values: system, workspace
wabaThe WhatsApp Business Account that holds this template's languages at Meta. Absent on a built-in template: those live on a WABA that Bird manages centrally rather than on your account, so it is not yours to reconcile against and is not disclosed.
categoryThe category you declared for the template. It is fixed once the template exists. Meta applies its own category per language and may move one, which is what messages are priced at. Read the language for that.
Possible values (may grow over time): authentication, utility, marketing
statusThe template's lifecycle, aggregated over its languages.
Possible values: draft, pending, active, rejected, inactive
default_languageThe language a send is served in when it names none, whichever on_missing_language is set. A template that sets language_source_required refuses such a send instead. Under fallback it is also the last hop for a language that is not in available_languages, whether the template holds no copy in it or holds one WhatsApp has not approved. The template is required to hold this default, and it must itself be in available_languages for a send to resolve here.
on_missing_languageWhat a send does when the language it asks for has no approved copy. Defaults to fail on WhatsApp, because every language is separately approved and separately priced: falling back silently would send content the recipient did not expect at a rate the sender did not choose.
Possible values: fallback, fail
language_source_requiredWhen true, a send must name a language explicitly rather than letting the template resolve one.
available_languagesThe languages a send can resolve right now: approved and not held back by Meta. It shrinks for reasons you did not cause: Meta pauses, disables, archives or limits a language and it leaves the set with nobody having edited anything. Read languages to see which languages exist and why one is missing.
languagesWhere each of the template's languages stands, keyed by BCP-47 language tag. This is the summary of the version currently in service, so a template reading active can still hold a rejected or paused language: the aggregate says something is sendable, and this says which. Content is not here; it lives under a version.
draft_version_idThe open draft, or null when nobody is editing. Non-null is the answer to whether this template has unsubmitted work: a draft exists only because someone opened one.
live_version_idThe version Meta is serving. A version goes live as a unit the moment any of its languages is approved, superseding the one before it. Null until a first approval.
pending_version_idA submitted version still awaiting verdicts: what to poll. It stays set while any language is unresolved, including after a sibling's approval took the version live. Null when nothing is outstanding.
last_submitted_atWhen this template was last submitted. Null for a pre-approved built-in template.
created_atWhen the template was created. Null for a built-in template, which Bird ships rather than stores.
updated_atWhen the template was last modified. Null for a built-in template, which Bird ships rather than stores.
nextWhat to do next with this template, given the state it is in. Each entry names one action and says why it is worth taking, so you can act on this response without working out the order yourself. Present on reads that compute it: an empty list means there is nothing to do, and the field is absent entirely on responses that do not report next actions.
A draft template routes to opening its draft, a pending one to the version
under review, and a rejected or inactive one to a fresh draft. The template's
status is the aggregate over its languages, so an entry may send you to the
version to see where each language actually stands.
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।