MCP is live.Set upAsk on Discord
OmniDimension
Bulk calls

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.

GET/calls/bulk_call//lines
Path parameters
bulk_call_idrequired
Query parameters
cursorstring

The `next_cursor` from your previous response. Omit it on the first request. Opaque: pass it back unchanged.

pagesizeinteger

Rows per page. Above 150 the request is refused.

call_statusstring · enum

Return only contacts in this state.

interaction_statusstring

Return only contacts with this interaction outcome.

searchstring

An exact phone number, matched against the contact's number and the number that called it. Not a substring search.

include_totalboolean

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.

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'
Example response
{
  "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
AuthorizationBearer <token>

Bearer token authentication. Obtain your API key from the OmniDimension dashboard.

In: header

Path Parameters

bulk_call_id*integer

Id of the bulk call campaign.

Query Parameters

cursor?string

The next_cursor from your previous response. Omit it on the first request. Opaque: pass it back unchanged.

pagesize?integer

Rows per page. Above 150 the request is refused.

Default30
Rangevalue <= 150
call_status?string

Return only contacts in this state.

Value in"Pending" | "In Progress" | "completed" | "voicemail_detected" | "no-answer" | "busy" | "Failed" | "Skipped" | "retry_scheduled" | "cancelled"
interaction_status?string

Return only contacts with this interaction outcome.

search?string

An exact phone number, matched against the contact's number and the number that called it. Not a substring search.

include_total?boolean

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.

Defaultfalse

Response body

application/json

Response Body

application/json