Contact lists
A contact list is a named bag of recipient phone numbers. Every broadcast picks one list and fans out to every member.
POST /api/v1/rcs/contact-lists
GET /api/v1/rcs/contact-lists
DELETE /api/v1/rcs/contact-lists/{id}
POST /api/v1/rcs/contact-lists/{id}/members
GET /api/v1/rcs/contact-lists/{id}/members
DELETE /api/v1/rcs/contact-lists/{id}/members/{phone}Create a list
POST /api/v1/rcs/contact-lists
{ "name": "May launch — opted in" }Response:
{
"success": true,
"list_id": "a1b2…",
"name": "May launch — opted in",
"count": 0,
"created_at": "2026-05-27T09:14:00Z"
}Add members (bulk)
CSV-style uploads are passed as JSON. Phones are normalised — spaces,
dashes, parens are stripped; a leading + is preserved.
POST /api/v1/rcs/contact-lists/{id}/members
{
"members": [
{ "phone": "+919876543210", "name": "Asha", "extra": { "city": "Mumbai" } },
{ "phone": "+919876543211", "name": "Rohan", "extra": { "city": "Pune" } }
]
}Up to 100,000 members per request. Members already in the list overwrite (idempotent — safe to retry on partial network failure).
Response:
{
"success": true,
"added": 2,
"skipped": 0,
"count": 2
}skipped includes phones that failed normalisation (less than 7
digits after stripping) or were rejected by the database write.
List members
GET /api/v1/rcs/contact-lists/{id}/members?size=200size defaults to 200, max 1000. For huge lists prefer slicing by
phone prefix using the extra map at upload time.
Delete a member
DELETE /api/v1/rcs/contact-lists/{id}/members/{phone}{phone} is the URL-encoded full string including the +.
Delete a list
DELETE /api/v1/rcs/contact-lists/{id}Removes the list plus every member. Broadcasts that already snapshotted this list at create time keep running — they don’t read the list table after the snapshot.