Skip to content
← API marketplace
Audience

Contacts & Lists

Store contacts with the consent basis you collected, group them into lists, import CSVs of up to 100 000 rows and honour opt-outs automatically at send time.

POST/v1/contacts

Create or update a contact

Scopes: contacts:write

curl -X POST "https://api.sendaapp.co.za/v1/contacts" \
  -H "Authorization: Bearer $SENDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"msisdn":"0821234567","name":"Thandi Nkosi","attributes":{"first_name":"Thandi","branch":"Sandton"},"consent_source":"web_form"}'
Example response (201)
{
  "id": "…",
  "msisdn": "+27821234567",
  "name": "Thandi Nkosi",
  "attributes": {
    "first_name": "Thandi"
  },
  "consent_source": "web_form",
  "opted_out_at": null
}
GET/v1/contacts

Search contacts

Scopes: contacts:read

curl -X GET "https://api.sendaapp.co.za/v1/contacts?q=Thandi" \
  -H "Authorization: Bearer $SENDA_API_KEY"
Example response (200)
{
  "data": [],
  "next_cursor": null
}
POST/v1/contacts/{id}/opt-out

Opt a contact out

Scopes: contacts:write

curl -X POST "https://api.sendaapp.co.za/v1/contacts/…/opt-out" \
  -H "Authorization: Bearer $SENDA_API_KEY"
Example response (200)
{
  "id": "…",
  "opted_out_at": "2026-11-01T09:00:00.000Z"
}
POST/v1/lists

Create a list

Scopes: contacts:write

curl -X POST "https://api.sendaapp.co.za/v1/lists" \
  -H "Authorization: Bearer $SENDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Loyalty members"}'
Example response (201)
{
  "id": "…",
  "name": "Loyalty members",
  "members": 0
}