Skip to content
← 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/templates

Create 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/campaigns

Create 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}/schedule

Start 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}/stats

Campaign 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
}