Templates

Create, submit for approval, sync, and delete WhatsApp message templates via the WAFlow Public API.

Templates

Templates are pre‑approved message formats required to start conversations with customers. This API creates a template locally and submits it to Meta for approval in one call, then lets you track its status.

Required scopes: templates.read for reads/sync, templates.write for create/delete.

List approved templates

GET /api/v1/templates

Required scope: templates.read

Returns approved templates ready to send, with their variables.

{
  "success": true,
  "templates": [
    { "name": "order_update", "language": "en_US", "category": "utility", "variables": ["1", "2"] }
  ],
  "totalTemplates": 1
}

Create & submit a template

Creates the template and submits it to Meta for approval.

POST /api/v1/templates

Required scope: templates.write

Request Body:

{
  "name": "order_update",
  "category": "UTILITY",
  "language": "en_US",
  "body": "Hi {{1}}, your order {{2}} has shipped."
}
Field Type Description
name string Lowercase letters, digits, and underscores only
category string MARKETING, UTILITY, or AUTHENTICATION (default UTILITY)
language string Language code (default en_US)
body string Template body; use {{1}}, {{2}} for variables

Response:

{
  "success": true,
  "template": { "id": 12, "name": "order_update", "status": "pending", "whatsappStatus": "PENDING" },
  "meta": { "id": "1963056624506103", "status": "PENDING" }
}

cURL Example:

curl -X POST "https://waflow.edesy.in/api/v1/templates" \
  -H "X-API-Key: wc_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "order_update",
    "category": "UTILITY",
    "language": "en_US",
    "body": "Hi {{1}}, your order {{2}} has shipped."
  }'

Note: Requires a connected WhatsApp account (otherwise 400 WHATSAPP_NOT_CONFIGURED). Newly submitted templates start as PENDING; Meta typically reviews within minutes to a few hours. If Meta rejects the submission the endpoint returns 400 META_SUBMISSION_FAILED with the reason, and keeps the local draft so you can fix and resubmit.


Get a template

GET /api/v1/templates/{id}

Required scope: templates.read

Returns the full template including its approval status (whatsappStatus: PENDING, APPROVED, or REJECTED).


Sync a template's status from Meta

Refreshes the local approval status from Meta (e.g. after submission, to check if it's been approved).

POST /api/v1/templates/{id}/sync

Required scope: templates.read

cURL Example:

curl -X POST "https://waflow.edesy.in/api/v1/templates/12/sync" \
  -H "X-API-Key: wc_your_api_key"

Delete a template

DELETE /api/v1/templates/{id}

Required scope: templates.write

Response:

{ "success": true }