Contacts & groups
Keep your audiences on the platform so campaigns, personalisation and opt-outs stay in sync.
Create a contact
GET
https://bulksmsapi.selanim.com/v1/contactsPOST
https://bulksmsapi.selanim.com/v1/contactsGET
https://bulksmsapi.selanim.com/v1/contacts/{contactId}PUT
https://bulksmsapi.selanim.com/v1/contacts/{contactId}DELETE
https://bulksmsapi.selanim.com/v1/contacts/{contactId}| Field | Type | Description |
|---|---|---|
phonerequired | string | |
firstName | string | |
lastName | string | |
email | string | |
notes | string | |
customFields | object | Read by {{placeholders}} when you personalise a send. |
groupIds | string (uuid)[] |
bash
curl -X POST "https://bulksmsapi.selanim.com/v1/contacts" \
-H "Authorization: Bearer $SBS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phone": "0713111321",
"firstName": "Rehema",
"lastName": "Mwakalinga",
"customFields": {
"class": "Form 4"
}
}'Needs: curl, on every machine already.
Bulk import
Import up to 50,000 contacts per call. Duplicates are matched on phone number and updated rather than re-created.
POST
https://bulksmsapi.selanim.com/v1/contacts/import| Field | Type | Description |
|---|---|---|
contactsrequired | ContactWrite[] | Up to 50,000 entries. |
groupId | string (uuid) | Add every imported contact to this group. |
skipDuplicates | boolean | When false, an existing number is updated instead of skipped. Defaults to true. |
json
{
"groupId": "GRP-1",
"contacts": [
{ "name": "Emmanuel Shayo", "phone": "255712345678" },
{ "name": "Consolata Urio", "phone": "255713998877", "tags": ["Form 1"] }
]
}json
{ "imported": 2, "updated": 0, "invalid": 0, "groupId": "GRP-1" }Groups
GET
https://bulksmsapi.selanim.com/v1/groupsPOST
https://bulksmsapi.selanim.com/v1/groupsDELETE
https://bulksmsapi.selanim.com/v1/groups/{groupId}| Field | Type | Description |
|---|---|---|
namerequired | string | |
description | string |
json
{
"data": [
{ "id": "GRP-1", "name": "Parents", "contactCount": 1250 },
{ "id": "GRP-6", "name": "VIP Customers", "contactCount": 210 }
]
}Opt-outs are automatic
Recipients who reply STOP are marked opted-out and are silently skipped on future marketing campaigns. They still receive transactional traffic such as OTPs, as required by TCRA rules.

