---
title: "Submit template for approval"
method: POST
path: "/v1/templates/{templateId}/submit"
---

# Submit template for approval

`POST /v1/templates/{templateId}/submit`

Submit a WhatsApp template to Meta for approval. The template must be in draft status and associated with a sender that has a WhatsApp Business Account configured.

## Path parameters

- `templateId` string, required

## Request body

- object
  - `senderId` string, required — The sender ID with the WhatsApp Business Account to submit the template to.
  - `category` 'UTILITY' | 'MARKETING' | 'AUTHENTICATION' — WhatsApp template category.

## Response `202`

Template submitted for approval.

- Template
  - `id` string, required
  - `name` string, required — Template name. For WhatsApp, must match the approved template name in Meta.
  - `language` string, required — Language code.
  - `body` string, required — Default template body with variables: positional ({{1}}, {{2}}) or named ({{customer_name}}, {{contact.first_name}}). Templates created in Zavu are submitted to Meta as positional; templates imported from a WhatsApp Business Account keep their original format (named or positional). Used when no channel-specific body is set.
  - `smsBody` string — Channel-specific body for SMS messages. Falls back to `body` if not set.
  - `telegramBody` string — Channel-specific body for Telegram messages. Falls back to `body` if not set.
  - `instagramBody` string — Channel-specific body for Instagram messages. Falls back to `body` if not set.
  - `category` 'UTILITY' | 'MARKETING' | 'AUTHENTICATION', required — WhatsApp template category.
  - `status` 'draft' | 'pending' | 'approved' | 'rejected'
  - `variables` string[] — List of variable names for documentation.
  - `headerType` string — Type of header (text, image, video, document).
  - `headerContent` string — Header content (text or media URL).
  - `footer` string — Footer text for the template.
  - `buttons` object[] — Template buttons.
    - `type` 'quick_reply' | 'url' | 'phone' | 'otp' | 'request_contact_info'
    - `text` string
    - `url` string
    - `example` string — Sample value used to substitute `{{1}}` in the URL when submitting the template to Meta for review. Only present for dynamic URL buttons.
    - `phoneNumber` string
    - `otpType` 'COPY_CODE' | 'ONE_TAP' — OTP button type. Required when type is 'otp'.
    - `packageName` string — Android package name. Required for ONE_TAP buttons.
    - `signatureHash` string — Android app signature hash. Required for ONE_TAP buttons.
  - `addSecurityRecommendation` boolean — Add 'Do not share this code' disclaimer. Only for AUTHENTICATION templates.
  - `codeExpirationMinutes` integer — Code expiration time in minutes. Only for AUTHENTICATION templates.
  - `whatsapp` object — WhatsApp-specific template information.
    - `templateName` string — WhatsApp template name.
    - `namespace` string — WhatsApp Business Account namespace.
    - `status` string — WhatsApp approval status.
  - `createdAt` string, date-time
  - `updatedAt` string, date-time

## Other responses

- `400` — Invalid request or template not in draft status.
- `401` — Unauthorized.
- `404` — Template or sender not found.

---

[API](https://skmtc.net/zavudev/apis/zavu-unified-messaging-layer-api.md) · [All operations](https://skmtc.net/zavudev/apis/zavu-unified-messaging-layer-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zavudev/zavu-unified-messaging-layer-api/versions/07b87b6ae707/schema)
