Skip to Content
RCS Panel APIContact lists

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=200

size 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.