Skip to content
API PlatformDevelopers
GET/v1/templatesstable

List WhatsApp templates

Needs
Read your data (mcp:read)
Plan
Any plan with API access
Limits
300 a minute per key
Undo
Nothing to undo: this only reads.

Lists your WhatsApp message templates with their review status, newest first. Only APPROVED templates can be sent.

Try it

Query (7)

Only this review status.

Only this category.

Language code, e.g. `en_US`.

Name contains.

Templates of the WhatsApp account behind this channel.

How many items per page (1–100).

The `next_cursor` from the previous page. Cursors expire after 24 hours.

This only reads. It uses your real data and changes nothing.

Code and response

curl -X GET 'https://mcp.wa-api.cloud/v1/templates?status=APPROVED' \
  -H "Authorization: Bearer $API_KEY"

The code reads your key from $API_KEY.

Parameters

Parameters
FieldTypeWhat it is
statusstring · queryOnly this review status.one of: APPROVED, PENDING, REJECTED, PAUSED, DISABLED, IN_APPEAL, ARCHIVED, PENDING_DELETION, DELETED
categorystring · queryOnly this category.one of: MARKETING, UTILITY, AUTHENTICATION
languagestring · queryLanguage code, e.g. en_US.0–20 characters
searchstring · queryName contains.0–100 characters
channel_idstring · queryTemplates of the WhatsApp account behind this channel.0–64 charactersSigned in? Pick one from your data with “My data”.
limitinteger · queryHow many items per page (1–100).1–100 · default 25
cursorstring · queryThe next_cursor from the previous page. Cursors expire after 24 hours.1–2048 characters

Headers

Headers
FieldTypeWhat it is
AuthorizationrequiredheaderBearer $API_KEY — your API key.
Api-VersionheaderThe API version to use, e.g. 2026-10-01. Default: the version your key is pinned to.one of: 2026-10-01 · pattern ^\d{4}-\d{2}-\d{2}$

Response 200

A page of templates.

Response fields
FieldTypeWhat it is
datarequiredarray of object
idrequiredstring
namerequiredstring
languagerequiredstring or null
categoryrequiredstring or null
sub_categoryrequiredstring or null
statusrequiredstring or nullMeta review status: APPROVED, PENDING, REJECTED, PAUSED, DISABLED, IN_APPEAL, ARCHIVED …
rejection_reasonrequiredstring or nullMeta's reason when REJECTED/PAUSED (verbatim), else null.
body_previewrequiredstring or null
variable_countrequirednumberBody variables to supply when sending.
header_formatrequiredstring or null
updated_atrequiredstring or null
totalrequirednumberMatches before the language filter.
next_cursorrequiredstring or nullPass as "cursor" to get the next page; null when there are no more results.

Errors

Errors are application/problem+json. Branch on code.

StatusCodeWhen
400invalid_input

A field is missing or has the wrong format. errors[] points at each field.

401unauthenticated

The Authorization header is missing, the key is unknown, expired or revoked.

403entitlement_required

The workspace's plan does not include API access (api_access).

403insufficient_scope

The key does not have the permission this operation needs.

429rate_limited

The key or workspace went over its rate limit. Wait for Retry-After seconds.

503upstream_unavailable

A service behind the API is briefly unavailable. Safe to retry with backoff.

Examples

Approved templates

Response 200

{
  "data": [
    {
      "id": "9120",
      "name": "order_shipped",
      "language": "en_US",
      "category": "UTILITY",
      "status": "APPROVED",
      "rejection_reason": null,
      "body_preview": "Hi {{1}}, your order {{2}} is on its way. Track it here: {{3}}",
      "variable_count": 3,
      "header_format": null,
      "updated_at": "2026-09-12T10:00:00Z",
      "sub_category": null
    }
  ],
  "next_cursor": null,
  "total": 1
}

Operation path

The same operation is also at POST /v1/ops/messaging_list_templates, with every field in the JSON body.