Changelog
Every change to the API is listed here, newest first. See Versioning for what we promise within a version.
v1: first public version
Section titled “v1: first public version”Released: 11 November 2026
This is the first version of the API documented on this site.
- New base URL:
https://api.sanadwa.com/v1. The older pathhttps://api.sanadwa.com/api/public/v1keeps working. - Endpoints:
- Messages:
POST /messages/template(send an approved template),POST /messages/text(reply with free-form text while the 24-hour customer-service window is open), andGET /messages/{id}(look up a sent message and its delivery status). GET /templates: list approved templates, with pagination and filters by phone number or WhatsApp Business Account.GET /phone-numbers: list the WhatsApp numbers you can send from.- Contacts:
GET /contacts(with a tag filter),POST /contacts(create or update up to 100 contacts),POST /contacts/import(CSV import, up to 5 MB and 5,000 rows) andDELETE /contacts/{id}. - Tags:
GET /tags,POST /tagsandDELETE /tags/{id}. - Campaigns:
POST /campaigns(send to everyone with a tag, now or scheduled up to 30 days ahead),GET /campaigns,GET /campaigns/{id},POST /campaigns/{id}/pauseandPOST /campaigns/{id}/resume. GET /balance: credit balance and this month’s usage.GET /health: check your API key.GET /openapi.json: the OpenAPI description of the API, without a key.
- Messages:
- API keys with the scopes
read,sendandfull, optional IP allowlists, and a rate limit of 60 requests per minute per key by default. Creating campaigns is limited to 5 requests per minute per key. - The
Idempotency-Keyheader on everyPOSTandDELETErequest. It is required onPOST /campaigns. - Webhooks for
inbound.message,message.sent,message.delivered,message.readandmessage.failed, signed with HMAC-SHA256. - Errors answer JSON with a stable
code, including404 not_foundfor paths that do not exist.