---
title: "Create templates"
description: "Save SMS templates, and write WhatsApp templates for Meta to review."
url: "https://docs.goomzo.africa/docs/developers/templates/create"
docs_index: /llms.txt
lastUpdated: 2026-11-12
section: "Templates"
related:
  - /docs/developers/templates
  - /docs/developers/templates/authentication
---

> For an index of all documentation, see [/llms.txt](https://docs.goomzo.africa/llms.txt). Any page is also available as Markdown by adding .md to its URL.

# Create templates

> Save SMS templates, and write WhatsApp templates for Meta to review.

Save a template once, then send it by name. An SMS template is ready at once. A WhatsApp template you write is
submitted to Meta, and ready once Meta approves it, usually within minutes.

## Requirements

- An API key with the `messages.send` permission.
- For WhatsApp, your number connected in **Integrations → WhatsApp**.

## Requests

```text
POST /v1/templates
```

### Request syntax

An SMS template:

```json
{
  "name": "<NAME>",
  "channel": "sms",
  "category": "<CATEGORY>",
  "content": { "text": "<TEXT>" }
}
```

A WhatsApp template:

```json
{
  "name": "<NAME>",
  "channel": "whatsapp",
  "whatsapp": {
    "submit": {
      "category": "<WHATSAPP_CATEGORY>",
      "language": "<LANGUAGE>",
      "header": "<HEADER>",
      "body": "<BODY>",
      "footer": "<FOOTER>",
      "quickReplies": ["<LABEL>"]
    }
  }
}
```

| Placeholder           | Description                                                                                                                                         | Sample value                                         |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| `<NAME>`              | _String._ Unique, ignoring case. Up to 100 characters. Your system sends it by this.                                                                | `order_ready`                                        |
| `<CATEGORY>`          | _String._ `marketing`, `utility` or `authentication`.                                                                                               | `utility`                                            |
| `<TEXT>`              | _String._ What it says, with [placeholders](https://docs.goomzo.africa/docs/help/placeholders?utm_source=llms&utm_medium=ai). Up to 6 SMS.                                                                  | `Hi {{name\|there}}, order {{data.order}} is ready.` |
| `<WHATSAPP_CATEGORY>` | _String._ `marketing` or `utility`. Meta makes authentication templates. See [Authentication templates](https://docs.goomzo.africa/docs/developers/templates/authentication?utm_source=llms&utm_medium=ai). | `utility`                                            |
| `<LANGUAGE>`          | _String._ `en` or `sw`.                                                                                                                             | `en`                                                 |
| `<HEADER>`            | _String. Optional._ One line, up to 60 characters, with one placeholder at most.                                                                    | `Order {{data.order}}`                               |
| `<BODY>`              | _String._ Up to 1,024 characters, with placeholders.                                                                                                | `Hi {{name\|there}}, your order is ready.`           |
| `<FOOTER>`            | _String. Optional._ Up to 60 characters, no placeholders.                                                                                           | `Duka Amina`                                         |
| `<LABEL>`             | _String. Optional._ A quick-reply button. Up to 3, each up to 25 characters.                                                                        | `Thanks`                                             |

### Example request

```bash
curl https://api.goomzo.africa/v1/templates \
  -H "Authorization: Bearer $GOOMZO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "order_ready",
    "channel": "whatsapp",
    "whatsapp": { "submit": { "category": "utility", "language": "en",
      "body": "Hi {{name|there}}, your order {{data.order}} is ready to collect.", "quickReplies": ["Thanks"] } }
  }'
```

## Responses

The answer is `201` with the [template](https://docs.goomzo.africa/docs/developers/templates?utm_source=llms&utm_medium=ai#the-template-object). A WhatsApp one has a
`problem` until Meta approves it, and its approval arrives with the next sync.

**Note:** Goomzo numbers your placeholders as Meta's `{{1}}`, `{{2}}`, and fills them in when it sends.

## Notes

- **Meta's rules:** a WhatsApp body can't start or end with a placeholder, or have two side by side. Goomzo checks
  this before it submits.
- **The right category:** a template that promotes is `marketing`, even with an update in it. Meta moves one it
  judges wrong, and can restrict your account's utility templates if it happens often.
- **A template on your account:** to save one made in WhatsApp Manager, name it instead of `submit`:
  `"whatsapp": { "name": "order_ready", "language": "en", "values": { "body.1": "{{name|there}}" } }`.
- **Changes:** `PATCH /v1/templates/{id}` changes what you send. What's left out stays as it was.

## Next steps

- [Send templates](https://docs.goomzo.africa/docs/developers/messages/templates?utm_source=llms&utm_medium=ai)
- [Authentication templates](https://docs.goomzo.africa/docs/developers/templates/authentication?utm_source=llms&utm_medium=ai)

---

For an index of all available documentation, see [/llms.txt](https://docs.goomzo.africa/llms.txt)
