Skip to main content
Any message sent outside a 24-hour customer service window — marketing blasts, order updates — must use a pre-approved template. Use this endpoint to submit new templates for Meta review.

Endpoint

Request body

string
required
Unique lowercase, underscore-separated name, e.g. order_shipped.
string
required
One of marketing, utility, or authentication.
string
required
BCP-47 language code, e.g. en, hi.
string
required
Template body text. Use {{1}}, {{2}} etc. for variables. Not required for authentication category.
array
Optional array of buttons.

Response

string
Internal identifier for this template (a UUID) — use it to check status or as template_id in Send Templates.
string
pending_review immediately after submission.
Not sure which Windows tab to use? The two aren’t interchangeable — pasting one into the wrong shell fails with a ... is not recognized error. Use CMD only in classic Command Prompt. Use PowerShell if your terminal is PowerShell, Windows Terminal, or VS Code’s integrated terminal — the default on most modern Windows setups. The PowerShell example uses Invoke-RestMethod rather than curl.exe to avoid PowerShell’s known issues passing complex quoted JSON to external executables.
Response

Checking status

Response
status is one of pending, approved, rejected, paused, or deleted. If rejected, rejection_reason has Meta’s explanation. You can also list every template on the account:
returns { "templates": [...] } with the same fields, newest first.
Register a template.status webhook to be notified the moment Meta reviews it, rather than polling — see Webhooks. Review typically takes minutes to a few hours, occasionally up to 24 hours.