---
title: "Cria e submete um template à Twilio/Meta para aprovação"
method: POST
path: "/v1/templates"
tags: ["templates"]
---

# Cria e submete um template à Twilio/Meta para aprovação

`POST /v1/templates`

Requer conta ACTIVE (live mode). Plano FREE limitado a 3 templates.
Submete pra Twilio; status inicial fica `PENDING`. Use
`/v1/templates/{id}/status` pra checar aprovação.

## Request body

- CreateTemplateRequest
  - `name` string, required
  - `category` 'MARKETING' | 'UTILITY' | 'AUTHENTICATION', required
  - `body` string, required
  - `language` string
  - `header` string, nullable
  - `headerType` 'text' | 'media' | 'document', nullable
  - `footer` string, nullable
  - `buttons` TemplateButton[], nullable
    - `type` 'QUICK_REPLY' | 'PHONE_NUMBER' | 'URL' | 'SMART_LINK' | 'COPY_CODE', required
    - `text` string, required
    - `url` string, nullable
    - `phone` string, nullable
    - `extraConfig` object, nullable
  - `samples` object, nullable
  - `variableExamples` string[], nullable
  - `carouselCards` CarouselCard[], nullable
    - `mediaUrl` string, required
    - `body` string, required
    - `buttons` TemplateButton[], nullable
      - `type` 'QUICK_REPLY' | 'PHONE_NUMBER' | 'URL' | 'SMART_LINK' | 'COPY_CODE', required
      - `text` string, required
      - `url` string, nullable
      - `phone` string, nullable
      - `extraConfig` object, nullable
  - `otpButtonType` 'COPY_CODE' | 'ONE_TAP', nullable
  - `otpPackageName` string, nullable
  - `otpAppSignature` string, nullable

## Response `201`

Template criado e submetido

- TemplateResponse
  - `id` string, uuid, required
  - `name` string, required
  - `formattedName` string, required
  - `category` string, required
  - `originalCategory` string, nullable
  - `language` string, required
  - `providerName` string, required
  - `providerTemplateId` string, required
  - `providerStatus` string, required
  - `rejectionReason` string, nullable
  - `bodyPreview` string, nullable
  - `structureJson` object, required
  - `usageGuide` object, nullable
  - `variablesSchema` object, nullable
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, nullable

## Other responses

- `400` — Payload inválido
- `401` — Token ausente ou inválido
- `403` — Sem permissão (plano, escopo, status da conta)
- `422` — Entidade não processável (validação semântica falhou)

---

[API](https://skmtc.net/ararahq/apis/ararahq-api.md) · [All operations](https://skmtc.net/ararahq/apis/ararahq-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ararahq/ararahq-api/revisions/174c89e36a13/schema)
