Templates
WhatsApp message templates — create, submit for Meta review and track their status.
GET
/whatsapp/templatesAvailablePOST/whatsapp/templatesAvailableGET/whatsapp/templates/{template_id}BetaDELETE/whatsapp/templates/{template_id}AvailableList WhatsApp templates
Section titled “List WhatsApp templates”GET
/v1/whatsapp/templatesAvailableQuery parameters
| Field | Type | Description |
|---|---|---|
status |
“draft” | “pending” | “approved” | “rejected” | “paused” | “disabled” | |
language |
string |
curl "https://api.waasl.io/v1/whatsapp/templates?language=ar" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/whatsapp/templates?language=ar", { headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.get( "https://api.waasl.io/v1/whatsapp/templates?language=ar", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — Templates
{ "data": [ { "name": "string", "language": "ar", "category": "marketing", "components": [ { "type": null, "format": null, "text": null, "examples": null, "buttons": null } ], "id": "tpl_Qm81", "status": "draft", "rejection_reason": "string", "quality": "GREEN", "updated_at": "2026-10-01T08:15:00Z" } ]}Create and submit a template
Section titled “Create and submit a template”POST
/v1/whatsapp/templatesAvailableCreates the template and submits it to Meta for review. The result arrives as a template.status_updated webhook — usually within minutes.
Request body
| Field | Type | Description |
|---|---|---|
name required |
string | |
language required |
string | |
category required |
“marketing” | “utility” | “authentication” | |
components required |
object[] | |
components[].type |
“header” | “body” | “footer” | “buttons” | |
components[].format |
“text” | “image” | “video” | “document” | |
components[].text |
string | |
components[].examples |
string[] | |
components[].buttons |
object[] |
curl -X POST "https://api.waasl.io/v1/whatsapp/templates" \ -H "Authorization: Bearer $WAASL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "order_ready", "language": "ar", "category": "utility", "components": [ { "type": "body", "text": "مرحبا {{1}}، طلبك رقم {{2}} جاهز للتوصيل 🚚", "examples": [ "سارة", "4821" ] }, { "type": "buttons", "buttons": [ { "type": "quick_reply", "text": "شكراً" } ] } ]}'const res = await fetch("https://api.waasl.io/v1/whatsapp/templates", { method: "POST", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "name": "order_ready", "language": "ar", "category": "utility", "components": [ { "type": "body", "text": "مرحبا {{1}}، طلبك رقم {{2}} جاهز للتوصيل 🚚", "examples": [ "سارة", "4821" ] }, { "type": "buttons", "buttons": [ { "type": "quick_reply", "text": "شكراً" } ] } ] }),});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.post( "https://api.waasl.io/v1/whatsapp/templates", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"}, json={ "name": "order_ready", "language": "ar", "category": "utility", "components": [{ "type": "body", "text": "مرحبا {{1}}، طلبك رقم {{2}} جاهز للتوصيل 🚚", "examples": ["سارة", "4821"] }, { "type": "buttons", "buttons": [{ "type": "quick_reply", "text": "شكراً" }] }] },)r.raise_for_status()print(r.json())Response 201 — Submitted template (status: pending)
{ "name": "string", "language": "ar", "category": "marketing", "components": [ { "type": "header", "format": "text", "text": "string", "examples": [ "string" ], "buttons": [ { "type": null, "text": null, "url": null, "phone_number": null } ] } ], "id": "tpl_Qm81", "status": "draft", "rejection_reason": "string", "quality": "GREEN", "updated_at": "2026-10-01T08:15:00Z"}Errors: 422 The request body is invalid
Retrieve a template
Section titled “Retrieve a template”GET
/v1/whatsapp/templates/{template_id}BetaPath parameters
| Field | Type | Description |
|---|---|---|
template_id required |
string |
curl "https://api.waasl.io/v1/whatsapp/templates/tpl_Qm81" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/whatsapp/templates/tpl_Qm81", { headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);const data = await res.json();import osimport requests
r = requests.get( "https://api.waasl.io/v1/whatsapp/templates/tpl_Qm81", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()print(r.json())Response 200 — The template, including its review history
{ "name": "string", "language": "ar", "category": "marketing", "components": [ { "type": "header", "format": "text", "text": "string", "examples": [ "string" ], "buttons": [ { "type": null, "text": null, "url": null, "phone_number": null } ] } ], "id": "tpl_Qm81", "status": "draft", "rejection_reason": "string", "quality": "GREEN", "updated_at": "2026-10-01T08:15:00Z"}Delete a template
Section titled “Delete a template”DELETE
/v1/whatsapp/templates/{template_id}AvailableDeletes it in Waasl and at Meta. A deleted name can’t be reused for 30 days (Meta rule).
Path parameters
| Field | Type | Description |
|---|---|---|
template_id required |
string |
curl -X DELETE "https://api.waasl.io/v1/whatsapp/templates/tpl_Qm81" \ -H "Authorization: Bearer $WAASL_API_KEY"const res = await fetch("https://api.waasl.io/v1/whatsapp/templates/tpl_Qm81", { method: "DELETE", headers: { Authorization: `Bearer ${process.env.WAASL_API_KEY}` },});if (!res.ok) throw new Error((await res.json()).code);import osimport requests
r = requests.delete( "https://api.waasl.io/v1/whatsapp/templates/tpl_Qm81", headers={"Authorization": f"Bearer {os.environ['WAASL_API_KEY']}"},)r.raise_for_status()Returns 204 — Deleted.