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_idrequiredcursorstringThe `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://backend.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" }
Authorization
BearerAuth Bearer token authentication. Obtain your API key from the OmniDimension dashboard.
In: header
Path Parameters
Id of the bulk call campaign.
Query Parameters
The next_cursor from your previous response. Omit it on the first
request. Opaque: pass it back unchanged.
Rows per page. Above 150 the request is refused.
30value <= 150Return only contacts in this state.
"Pending" | "In Progress" | "completed" | "voicemail_detected" | "no-answer" | "busy" | "Failed" | "Skipped" | "retry_scheduled" | "cancelled"Return only contacts with this interaction outcome.
An exact phone number, matched against the contact's number and the number that called it. Not a substring search.
Add 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/jsonResponse Body
application/json
