Skip to main content
Creating a template starts here: the model defines which fields exist in it and what Meta requires in each one. It is the first decision, and it doesn’t change later — to switch models, you create another template. Each model page ends with both JSON payloads ready, the one that creates and the one that sends. The call itself, with route, responses and errors, is in the API reference at the end of this group.
The previews on the model pages are approximations of how the message lands on the device, so you can see the shape before creating it. The final drawing is WhatsApp’s and changes between app versions.
Twelve models are closed structures, with fields and buttons Meta fixes. The thirteenth, the custom message, is the open one: free text, whatever buttons you want, with no catalog or payment strings attached. When in doubt, it’s that one.

Which to use

Data at send time is the column that saves the most rework. It says what does not go in at creation because it changes on every dispatch — and that is why the same approved template serves different campaigns.

By use

Custom message

The open model. Free text with variables, header and buttons

Access code

OTP with copy code, one tap or zero tap

Commerce

Catalog

Opens the account’s full catalog

Single product

One product, with photo, name and price

Multi-product

Showcase with sections, assembled at send time

Checkout button

The invitation to pay

Order details

The invoice, with Pix or a payment link

Promotion

Coupon

Copyable discount code

Limited time offer

Offer badge with a countdown

Media carousel

2 to 10 cards with image or video

Product carousel

Cards coming from the catalog

Others

Template Library

Meta’s ready-made model, no review

Call permission

Permission to call on WhatsApp

What holds for all of them

  • The model cannot change after creation, and neither can the name or the language.
  • Every template starts as PENDING and becomes APPROVED or REJECTED. Use Sync templates to force a status update.
  • The fields common to every model are in Template fields; what Meta rejects is in Validation.
  • Each model’s payload lives on its own page, and only there. The playground in the API reference builds an empty body from the schema, for you to paste yours into.