List campaign contacts
Per-contact status for a campaign, oldest first. A contact that read the message and then replied STOP counts as read and opted out.
Set up WhatsApp first. Connect a WhatsApp number in the dashboard or with Connect numbers. Included on every paid plan. See plans.
campaign_idrequiredstatusstring · enumShow only contacts in this state.
limitintegerRows per page.
cursorstringThe next_cursor from the previous page.
curl -X GET 'https://backend.omnidim.io/api/v1/whatsapp/campaigns/{campaign_id}/contacts?limit=20' \ -H 'Authorization: Bearer YOUR_API_KEY'
{ "data": [ { "id": 0, "phone_number": "+15551234567", "name": "string", "data_source": "csv", "status": "pending", "skipped_reason": "human_handling", "opted_out": false, "wa_message_id": "string", "sent_at": "string", "delivered_at": "string", "read_at": "string", "failure": { "code": "string", "reason": "string" } } ], "has_more": false, "next_cursor": "string" }
BearerAuthAuthorizationBearer <token>Bearer token authentication. Obtain your API key from the OmniDimension dashboard.
campaign_id*integerId of a WhatsApp campaign, from listWhatsappCampaigns.
status?stringShow only contacts in this state.
"pending""sent""delivered""read""replied""failed""skipped""opted_out"limit?integerRows per page.
1 <= value <= 10020cursor?stringThe next_cursor from the previous page.
Response body
application/jsonOne page of contacts.
application/jsondata?has_more?booleannext_cursor?stringGet a campaign
One campaign with its counts and analytics: per-source figures and the failed contacts grouped by reason. delivery_rate and read_rate are null on a number that does not report receipts.
Add campaign contacts
Add one contact, or up to 500 at once. On a draft they are stored for launch. On a running campaign they are sent now. A contact already in the campaign is skipped, so a retry is safe. Each contact needs a phone_number; every other key is kept and can fill a template parameter through variable_mapping.
