Skip to main content
POST
Submit template for approval

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

templateId
string
required

Body

application/json
senderId
string
required

The sender ID with the WhatsApp Business Account to submit the template to.

category
enum<string>

Template category. If not provided, uses the category set on the template.

Available options:
UTILITY,
MARKETING,
AUTHENTICATION

Response

Template submitted for approval.

id
string
required
name
string
required

Template name. For WhatsApp, must match the approved template name in Meta.

Example:

"order_confirmation"

language
string
required

Language code.

Example:

"en"

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.

Example:

"Hi {{1}}, your order {{2}} has shipped."

category
enum<string>
required

The category the template is billed under. For a template linked to WhatsApp this is the category Meta currently assigns, not the one it was submitted with: Meta can recategorize a template at approval or at any point afterwards, and that changes what the message costs.

A recategorization reaches this field through the template.status_changed webhook, which carries data.category, and through POST /v1/templates/sync, which reconciles it against Meta. Read one of those rather than assuming the category you sent is the one in force.

For a template that was never submitted to WhatsApp, this is the category stored locally, defaulting to UTILITY.

Available options:
UTILITY,
MARKETING,
AUTHENTICATION
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.

status
enum<string>
default:draft
Available options:
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 text for the template.

buttons
object[]

Template 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.

Required range: 1 <= x <= 90
whatsapp
object

WhatsApp-specific template information.

createdAt
string<date-time>
updatedAt
string<date-time>