Bulk call results
Per-contact results for a campaign: what happened on each call, the variables you sent with that contact, and a pointer to the recording.
bulk_call_idrequireduser_idintegerReseller keys only: act as one of your clients by its user id. Omit it to act on your own account. [How acting for a client works](/docs/reseller/your-clients/acting-as-clients).
cursorstringThe next_cursor from your previous response. Omit it on the first request. Opaque: pass it back unchanged.
pagesizeintegerRows per page. Above 150 the request is refused.
call_statusstring · enumReturn only contacts in this state.
interaction_statusstringReturn only contacts with this interaction outcome.
searchstringAn exact phone number, matched against the contact's number and the number that called it. Not a substring search.
include_totalbooleanAdd total_records to the response. It costs a count over the whole filtered campaign, so it is off unless you ask. Ask for it once to fill a header, not on every page of a walk.
curl -X GET 'https://omnidim.io/api/v1/calls/bulk_call/{bulk_call_id}/lines?pagesize=30&include_total=false' \ -H 'Authorization: Bearer YOUR_API_KEY'
{ "status": "success", "bulk_call_id": 314, "records": [ { "id": 156, "to_number": "+15551234567", "from_number": "+15559876543", "call_status": "completed", "interaction_status": "", "failed_reason": null, "dispatched_at": "2026-08-26 14:46:02", "custom_variables": { "contact_name": "Ravi Kumar", "company_name": "Acme Corp" }, "metadata": {}, "retry_attempt": 1, "retry_scheduled": false, "retry_scheduled_datetime": null, "reschedule_requested": false, "reschedule_datetime": null, "reschedule_status": "pending", "call": { "recording_id": 50585, "time_of_call": "2026-08-26 14:46:21", "duration_seconds": 9, "duration_minutes": 0, "recording_url": "https://backend.omnidim.io/api/v1/recording/50585?token=9d35be29", "call_status": "completed", "sentiment_score": "", "extracted_variables": {}, "is_voicemail": false, "answering_machine_detected": false } } ], "pagesize": 150, "has_more": true, "next_cursor": "MTU2" }
BearerAuthAuthorizationBearer <token>Bearer token authentication. Obtain your API key from the OmniDimension dashboard.
bulk_call_id*integerId of the bulk call campaign.
user_id?integerReseller keys only: act as one of your clients by its user id. Omit it to act on your own account. How acting for a client works.
cursor?stringThe next_cursor from your previous response. Omit it on the first
request. Opaque: pass it back unchanged.
pagesize?integerRows per page. Above 150 the request is refused.
value <= 15030call_status?stringReturn only contacts in this state.
"Pending""In Progress""completed""voicemail_detected""no-answer""busy""Failed""Skipped""retry_scheduled""cancelled"interaction_status?stringReturn only contacts with this interaction outcome.
search?stringAn exact phone number, matched against the contact's number and the number that called it. Not a substring search.
include_total?booleanAdd total_records to the response. It costs a count over the whole
filtered campaign, so it is off unless you ask. Ask for it once to
fill a header, not on every page of a walk.
falseResponse body
application/jsonOne page of results. next_cursor is null on the last page.
application/jsonstatus?stringbulk_call_id?integerrecords?pagesize?integerhas_more?booleannext_cursor?stringPass back as cursor. null means you are done.
total_records?integerOnly present when include_total is true.
Was this page helpful?
