WhatsApp

Update template

Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation.

Meta stores one template per name + language, so a name identifies a family of variants, each with its own Meta id. Pass language to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns 409 ambiguous_template with details.languages. A bare language (es) matches a single regional variant (es_ES); if the family has several regional variants for it, that is also a 409. A full code (es_ES) must match exactly. Variants in PENDING_DELETION are not part of the family.

Meta only allows editing templates in APPROVED, REJECTED or PAUSED state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the status returned here is normally PENDING; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the whatsapp.template.status_updated webhook (which carries the variant's templateId and language). A variant already in PENDING cannot be edited again until Meta finishes reviewing it.

patch/v1/whatsapp/templates/{templateName}

Path parameters

templateNamestring required

Template name (the family).

Request body

accountIdstring required

WhatsApp account ID

languagestring

Language code of the variant to edit (e.g. en_US, es, pt_BR). Required when the family has several languages. Body only: a language query parameter on PATCH is a 400.

message_send_ttl_secondsinteger

Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range. A TTL-only edit keeps an APPROVED template approved, no re-review. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check).

Response

Template updated successfully

successboolean

Example response

{
  "template": {
    "status": "PENDING"
  }
}

Changes