> ## Documentation Index
> Fetch the complete documentation index at: https://developer.omni.z-api.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose the model

> The 13 template models, what each does and which to use in each case

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](/en/templates/create-template) at the end of this group.

<Note>
  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.
</Note>

<Note>
  Twelve models are closed structures, with fields and buttons Meta fixes. The thirteenth, the [custom message](/en/templates/models/custom), is the open one: free text, whatever buttons you want, with no catalog or payment strings attached. When in doubt, it's that one.
</Note>

## Which to use

| Model                                                           | What it is for                                       | Category                 | Data at send time |
| --------------------------------------------------------------- | ---------------------------------------------------- | ------------------------ | ----------------- |
| [Custom message](/en/templates/models/custom)                   | Free text with variables, header and buttons         | You choose               | Variables         |
| [Access code](/en/templates/models/authentication)              | OTP delivery. Meta defines the text                  | `AUTHENTICATION`         | The code          |
| [Catalog](/en/templates/models/catalog)                         | Opens the full store catalog in WhatsApp             | `MARKETING`              | Cover product     |
| [Single product](/en/templates/models/spm)                      | One catalog product with photo, name and price       | `MARKETING`              | The product       |
| [Multi-product](/en/templates/models/mpm)                       | Showcase with sections and several products          | `MARKETING`              | Up to 30 products |
| [Checkout button](/en/templates/models/checkout-button)         | Takes the customer straight to payment               | `MARKETING`              | The whole order   |
| [Order details](/en/templates/models/order-details)             | The invoice with items and total, and the pay button | `UTILITY`                | Items, total, Pix |
| [Coupon](/en/templates/models/coupon-code)                      | Message with a copyable discount code                | `MARKETING`              | Variables         |
| [Limited time offer](/en/templates/models/limited-time-offer)   | Promotion with an expiration counter                 | `MARKETING`              | The deadline      |
| [Media carousel](/en/templates/models/media-card-carousel)      | Up to 10 cards with image or video                   | `MARKETING`              | Each card's media |
| [Product carousel](/en/templates/models/product-card-carousel)  | Cards pulled from your catalog                       | `MARKETING`              | The products      |
| [Template Library](/en/templates/models/library)                | Ready-made model from Meta's library                 | From the model           | Variables         |
| [Call permission](/en/templates/models/call-permission-request) | Asks permission to call on WhatsApp                  | `UTILITY` or `MARKETING` | Variables         |

<Info>
  **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.
</Info>

## By use

<CardGroup cols={2}>
  <Card title="Custom message" icon="pen-to-square" href="/en/templates/models/custom">
    The open model. Free text with variables, header and buttons
  </Card>

  <Card title="Access code" icon="key" href="/en/templates/models/authentication">
    OTP with copy code, one tap or zero tap
  </Card>
</CardGroup>

### Commerce

<CardGroup cols={2}>
  <Card title="Catalog" icon="store" href="/en/templates/models/catalog">
    Opens the account's full catalog
  </Card>

  <Card title="Single product" icon="tag" href="/en/templates/models/spm">
    One product, with photo, name and price
  </Card>

  <Card title="Multi-product" icon="grip" href="/en/templates/models/mpm">
    Showcase with sections, assembled at send time
  </Card>

  <Card title="Checkout button" icon="credit-card" href="/en/templates/models/checkout-button">
    The invitation to pay
  </Card>

  <Card title="Order details" icon="receipt" href="/en/templates/models/order-details">
    The invoice, with Pix or a payment link
  </Card>
</CardGroup>

### Promotion

<CardGroup cols={2}>
  <Card title="Coupon" icon="ticket" href="/en/templates/models/coupon-code">
    Copyable discount code
  </Card>

  <Card title="Limited time offer" icon="clock" href="/en/templates/models/limited-time-offer">
    Offer badge with a countdown
  </Card>
</CardGroup>

### Carousel

<CardGroup cols={2}>
  <Card title="Media carousel" icon="images" href="/en/templates/models/media-card-carousel">
    2 to 10 cards with image or video
  </Card>

  <Card title="Product carousel" icon="cart-shopping" href="/en/templates/models/product-card-carousel">
    Cards coming from the catalog
  </Card>
</CardGroup>

### Others

<CardGroup cols={2}>
  <Card title="Template Library" icon="book" href="/en/templates/models/library">
    Meta's ready-made model, no review
  </Card>

  <Card title="Call permission" icon="phone" href="/en/templates/models/call-permission-request">
    Permission to call on WhatsApp
  </Card>
</CardGroup>

## 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](/en/templates/sync-templates) to force a status update.
* The fields common to every model are in [Template fields](/en/templates/anatomy); what Meta rejects is in [Validation](/en/templates/validation).
* Each model's payload lives on its own page, and only there. The playground in the [API reference](/en/templates/create-template) builds an empty body from the schema, for you to paste yours into.
