← API marketplace
Messaging
Templates & Campaigns
Templates with {{first_name}} placeholders, campaigns to a list with scheduling, pause/cancel and live stats. Marketing sends wait for WASPA hours (Mon–Fri 08:00–20:00, Sat 09:00–13:00) and require an opt-out instruction.
POST
/v1/templatesCreate a template
Scopes: templates:write
curl -X POST "https://api.sendaapp.co.za/v1/templates" \
-H "Authorization: Bearer $SENDA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"November promo","body":"Hi {{first_name}}, 20% off this weekend at ACME. Reply STOP to opt out.","category":"marketing"}'Example response (201)
{
"id": "…",
"name": "November promo",
"variables": [
"first_name"
]
}POST
/v1/campaignsCreate a campaign
Scopes: campaigns:write
curl -X POST "https://api.sendaapp.co.za/v1/campaigns" \
-H "Authorization: Bearer $SENDA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"November promo","template_id":"…","list_id":"…","sender":"ACME"}'Example response (201)
{
"id": "…",
"status": "draft",
"total_recipients": 1200
}POST
/v1/campaigns/{id}/scheduleStart or schedule a campaign
Scopes: campaigns:write
curl -X POST "https://api.sendaapp.co.za/v1/campaigns/…/schedule" \
-H "Authorization: Bearer $SENDA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"scheduled_at":"2026-11-06T09:00:00+02:00"}'Example response (200)
{
"id": "…",
"status": "scheduled"
}GET
/v1/campaigns/{id}/statsCampaign progress
Scopes: campaigns:read
curl -X GET "https://api.sendaapp.co.za/v1/campaigns/…/stats" \
-H "Authorization: Bearer $SENDA_API_KEY"Example response (200)
{
"total": 1200,
"submitted": 1150,
"failed": 20,
"queued": 30
}