Skip to main content
PATCH
cURL
Guide: Templates

Authorizations

Authorization
string
header
required

Authorization: Bearer . An application key (tk_live_, tk_test_) has full access, which covers every product and any product added later, or custom access, chosen when the key is created: one or more of the scopes verify:check, verify:send (includes verify:check), notifications:read, notifications:send (includes notifications:read), notifications:templates (includes notifications:read). No key made on the API keys page holds notifications:templates, full access included: the three template writes answer such a key 403 insufficient_scope. A connected app's key holds it. A call outside the key's access answers 403 insufficient_scope and names the scope it needs in the WWW-Authenticate response header. A partner key (tk_partner_) always has full access. Whatever its access, a key is a server-side secret.

Headers

Idempotency-Key
string

A 1 to 128 printable-ASCII-character key you generate, scoped to your API key. Replaying it with the same request answers the original 2xx unchanged, with the response header Idempotent-Replayed: true, and runs nothing again; the same key with another request answers 409 idempotency_key_reused, and a request still in flight 409 idempotency_in_progress. A refused request is never stored, so a corrected retry under the same key runs. Keys expire after 24 hours.

Path Parameters

template_id
string
required

The template's Meta id, as id in GET /v1/whatsapp/templates. One id is one language of a template.

Body

application/json
category
string
required

UTILITY. A connected app's key writes utility templates only: MARKETING is refused with 422 template_category_not_allowed. An authentication template is created in the console.

body
string
required

Up to 1024 characters. Placeholders are all named ({{name}}, lowercase) or all numbered ({{1}}, {{2}} in order), never at the very start or end of the text.

header
string

A text header: one line, up to 60 characters, no emoji and no asterisk, at most one placeholder.

One line, up to 60 characters, no placeholders.

buttons
array

Up to 10 objects, each with a text of up to 25 characters: { "type": "QUICK_REPLY", "text" }, { "type": "URL", "text", "url" } (https, optionally ending in {{1}}; two at most) or { "type": "PHONE_NUMBER", "text", "phone_number" } (E.164; one at most). Quick replies sit together, before or after the other buttons.

examples
object

One sample value per placeholder, keyed header:<key>, body:<key> and button:<index>. Required whenever the template has placeholders: Meta reviews with them.

Response

The template after the edit

id
string
name
string
language
string
category
string
status
string
quality
string | null
rejected_reason
string | null
components
object[]
examples
object
placeholders
object
managed
boolean
Last modified on October 10, 2026