Endpoint
Send this request as
multipart/form-data. Pass the template JSON in a data form field
and the WhatsApp Business Account ID in a waba_id form field.Headers
string
required
API key generated for the TUC (telecom user connection) associated with the sending
WhatsApp phone number. Example:
7pvxoA4c.string
application/jsonRequest body (multipart/form-data)
string
required
JSON-encoded string containing the template payload (name, category, language,
components, etc. — see below). Sent as a form field, not raw JSON.
string
required
WhatsApp Business Account ID the template is created under.
string
Free-text string.
Common fields inside data
Every template category shares this envelope:
string
required
Unique template name in the Meta Cloud API. Should be descriptive of the template’s
purpose (e.g.
zero_tap_authentication_temp_3).string
required
Template category:
AUTHENTICATION, UTILITY, or MARKETING.string
required
Template language code per ISO (e.g.
en_US).array
required
Array of component objects — combinations of
HEADER, BODY, FOOTER, BUTTONS,
LIMITED_TIME_OFFER, and CAROUSEL, depending on template type. See the tabs below.string
Determines how body/header variables are referenced.
POSITIONAL (default, e.g. {{1}})
or NAMED (e.g. {{customer_name}}).integer
Time-to-live for the message in seconds. Range varies by category: Authentication 30
seconds–15 minutes; Utility 30 seconds–12 hours; Marketing/LTO/Carousel 12 hours–30 days
(30-day maximum applies only for MM Lite).
string
Only used for
ORDER_STATUS and ORDER_DETAILS utility templates — see those tabs.cURL
Media headers accept either
"example": {"media_id": "..."} (generated via the
Media Upload API) or "example": {"url": "..."} for a
remote file.Response
integer
HTTP-style status code.
200 on success.object
Wrapper object for the result message.
Template types
- Authentication
- Utility
- Marketing
- Limited Time Offer
- Media Card Carousel
- Single Product Message
- Multi Product Message
- Flows
- Complete Flow
- Order Status
- Order Details
Used for OTP delivery. Reference: Meta authentication templates.Components: An Authentication payload can also use a shorter OTP button shape:
BODY (optional, add_security_recommendation), FOOTER (optional,
code_expiration_minutes), BUTTONS (required — one OTP button).boolean
Adds a security note below the OTP message (recommended). Set on the
BODY component.integer
OTP code validity in minutes. Set on the
FOOTER component; required only if the OTP has
an expiry.string
required
ZERO_TAP, ONE_TAP, or COPY_CODE.string
required
Button label, e.g.
"Copy Code".string
Autofill button label. Used with
ONE_TAP / ZERO_TAP.string
Android app package identifier the OTP is generated for. Required for
ONE_TAP /
ZERO_TAP (recommended).string
Base64 or URL-encoded app signature hash used to verify app integrity. Required for
ONE_TAP / ZERO_TAP (recommended).boolean
Only for
ZERO_TAP.Example — Zero Tap AutoFill (with expiry)
Next steps
- If your template uses a media header, upload the file first via
Media Upload to obtain a
media_id. - After submission, poll Fetch Template to
confirm the template reaches
Approvedstatus before sending it. - Send the approved template via Send Template Message.

