Update Template
Edits the components of an existing template.
Full-replace semantics
On Meta the edit is full-replace: the component set you send becomes the new state, and any component you do not send is removed. Send every component you want to keep, at minimum body. Sending only body on a template that has a header, footer, and buttons drops them and is rejected with 409 (META_096).
The same applies to limitedTimeOffer — an existing offer is removed if you do not send it again.
After a successful edit the status returns to PENDING for re-review, and the local record is synced.
Constraints
nameandlanguagecannot be changed and cannot be sent.- Editing is allowed only when the template is
APPROVED,REJECTED, orPAUSED. Any other status returns409(META_096). - An active template can be edited only once in 24 hours; exceeding that returns
429(META_097). categorychanges are effective only forREJECTED/PAUSEDtemplates; Meta rejects a category change on anAPPROVEDone. Changes are subject to review.carouselis not accepted on edit at all. An existing carousel template’s cards cannot be edited through this API — create a new template instead.
Validation differences from create
Button, header, and body rules are identical to Create Template (WA_TPL_001–005, 015–020, 006–010, 021, 011–014).
The category rules (WA_TPL_022–033) and the name rule (WA_TPL_034) are not evaluated here, since name cannot be sent and the category-vs-component check only runs on create. Meta still enforces the equivalent rules, so a category-incompatible edit comes back as a META_0xx error rather than a WA_TPL_0xx one.
Limited-time offer rules apply as on create, except that the MARKETING check (WA_TPL_048) runs only when you also send a category; if you omit it, Meta validates the offer against the template’s existing category.
Authorizations
Secret key in Bearer sk_... format. Server-to-server only — never embed it in a browser or mobile client. The organization is resolved from the key, so organization_id is never passed explicitly.
Headers
return=representation (default) returns the current record; return=minimal returns no body. The response echoes the choice in Preference-Applied.
return=representation, return=minimal Path Parameters
Application ID. Must belong to the organization resolved from your secret key, otherwise the request returns 404 with APPLICATION_004.
"app_7poyXj8GXuv76e"
The template's Meta source ID.
"1234567890123456"
Body
10Determines which components are allowed. UTILITY for transactional messages, MARKETING for promotional, AUTHENTICATION for one-time passcodes.
UTILITY, MARKETING, AUTHENTICATION Response
The updated template re-fetched from Meta, with status: "PENDING". With Prefer: return=minimal the data key is omitted entirely — the response is exactly { "isSuccess": true }, still HTTP 200.