API Reference
Complete WABA Developer API endpoint inventory and shared HTTP contracts.
Base URL
Use the environment URL supplied by Notify Africa. Production examples use:
https://api.notify.africaAuthentication
Authorization: Bearer ntfy_your_api_keyEvery operation is scoped to the Notify Africa account that owns the key. The key must have WABA access.
Endpoint Inventory
These 11 operations are the complete API-key-authenticated surface.
| Method | Path | Success | Reference |
|---|---|---|---|
POST | /v1/waba-api/templates | 201 wrapped | Create template |
GET | /v1/waba-api/templates | 200 wrapped/paginated | List templates |
GET | /v1/waba-api/templates/:templateId | 200 wrapped | Get template |
PATCH | /v1/waba-api/templates/:templateId | 200 wrapped | Update template |
DELETE | /v1/waba-api/templates/:templateId | 200 wrapped | Delete template |
POST | /v1/waba-api/templates/:templateId/validate | 201 wrapped | Validate bindings |
POST | /v1/waba-api/templates/:templateId/preview | 201 wrapped | Preview template |
POST | /v1/waba-api/templates/:templateId/sync | 201 wrapped | Synchronize template |
GET | /v1/waba-api/templates/:templateId/status | 200 wrapped | Get template status |
POST | /v1/waba-api/messages/text | 200 wrapped | Send text |
POST | /v1/waba-api/messages/template | 200 wrapped | Send template message |
Portal account setup, webhook management, secret rotation, webhook testing, and delivery inspection are not Developer API operations — see Test Webhook.
Standard Success Envelope
Template and message successes use:
{
"status": 200,
"message": "Success",
"timestamp": "2026-09-09T11:00:00.000Z",
"path": "/v1/waba-api/example",
"data": {}
}status is the HTTP status code. path includes the request query string when present.
The webhook-test operation currently returns its delivery DTO directly.
Pagination
Template list queries support:
| Parameter | Type | Behavior |
|---|---|---|
q | string | Search input |
currentPage | number | Positive integer; invalid/missing values normalize to 1 |
pageSize | number | Positive integer; invalid/missing values normalize to 10; maximum 25 |
sortBy | string | Requested sort field |
sortOrder | string | asc or desc |
Paginated responses add:
{
"pagination": {
"total": 42,
"currentPage": 2,
"totalPages": 5,
"pageSize": 10
}
}Standard Error Envelope
{
"status": 400,
"message": "Request validation failed",
"code": "VALIDATION_ERROR",
"timestamp": "2026-09-09T11:01:00.000Z",
"path": "/v1/waba-api/templates",
"error": ["externalTemplateName must use lowercase letters, numbers, and underscores only"],
"details": {
"field": "externalTemplateName"
}
}details is optional. error can be a string, array, or object.
Common Status Codes
| Status | Meaning |
|---|---|
200 | Successful read/update/delete or message result response |
201 | Template create/action or webhook test queued |
400 | DTO, UUID, schema, binding, or state validation failure |
401 | Missing, malformed, invalid, revoked, expired, or unauthorized API key |
404 | Resource absent or not owned by the authenticated tenant |
409 | Duplicate/conflicting resource, such as template name and language |
422 | WABA readiness or provider precondition failure |
500 | Unexpected server failure |
503 | Required dependency unavailable |
Header Rules
- Send
Content-Type: application/jsononly when sending JSON. - Do not send tenant or user identifiers in headers.
- Do not send WABA or phone-number identifiers to override tenant selection.
- Store the API key and webhook signing secret as separate secrets.
