Skip to content

List the calls in progress right now

Returns the calls that are up on your PBX at this instant — ringing, connected or on hold. A call appears the moment the phone system starts it and disappears the moment it ends; nothing is retained here. For calls that have already finished, and for recordings, use the CDR endpoints under /cdrs-utility/ instead.

Authentication and scope

Send an Integrations API key carrying the Call history scope, or a user bearer token. It is the same call-history scope the /cdrs-utility/ endpoints use — one scope covers your PBX's calls both while they are up and after they end, so a key that can already read CDRs needs no change to read this.

Tenancy

The PBX is resolved from your token. There is no path or query parameter to name one, and any pbx_id you send is ignored — a key can only ever see its own PBX's calls.

Request

A plain GET. No path parameters, no query parameters and no request body; anything you send is ignored. Poll it when you need fresh state — a few seconds apart is normal, and the endpoint shares the standard customer API rate limit.

Response

A JSON array, one object per call in progress, ordered as the phone system reports them. [] means nothing is up right now — that is a success, not an error, so check the array's length rather than treating an empty body as a failure.

The call objects are passed through from the phone system exactly as it reports them, so treat them as an open shape: read the fields you need by name, ignore the ones you do not recognise, and expect new fields to appear without a new API version. Cockpit adds, removes and renames nothing.

Implementing against it

  • linkedid identifies a call for its whole life. Key your own state on it to tell a call you have already seen from a new one between two polls, and to join a live call to the CDR that appears under /cdrs-utility/ once it ends.
  • callees is a list, not a single party: a ring group, a twinned mobile or a transfer all add legs to the same call.
  • status, direction and call_type are open sets of strings. Match the values you handle and fall through on anything else rather than switching exhaustively.
  • attended_transfer_info and data_source_info are JSON documents inside strings — parse them a second time before reading their fields.
  • eventtime is YYYY-MM-DD HH:MM:SS.ffffff in server local time, with no timezone offset. Parse it with an explicit format; it is not RFC 3339.
HTTP: bearerAuth

User bearer token. Default authentication for customer-facing endpoints. Obtain a token by calling POST /login with your credentials, then send it on every subsequent request as Authorization: Bearer <token>. The token inherits the permissions and PBX scope of the authenticated user.

HTTP Authorization Scheme
bearer
Bearer format
Bearer <token>
HTTP: IntegrationApiKey

API key created on the Cockpit Integrations page (an "API key" integration). It is a bearer token owned by the customer's PBX and limited to the scopes selected when the key was created (e.g. phone-numbers, push-configuration).

Send it in the Authorization header:

Authorization: Bearer <api_key>

Manage keys (create / reveal / revoke) from Integrations → New integration → API key.

HTTP Authorization Scheme
bearer
accept header · string
example: application/json

Responses

OK. The calls in progress, or `[]` when there are none.
Response schema
Each item — A single call in progress, exactly as the phone system reports it. The properties below are the ones observed on a live call; the object is open, so read what you need by name and ignore the rest.
linkedidstring
The call's identifier, stable for its whole life (`<epoch>.<sequence>`). This is the key to follow one call across polls, and the same id the CDR for this call will carry once it ends.
example: 1789711164.415472
userfieldstring · uuid
The PBX the call belongs to. Always your own PBX.
statusstring
Where the call is in its life, e.g. `answered`. Treat it as an open set of strings and compare case-sensitively; new values can appear.
example: answered
directionstring
Direction of the call, e.g. `outgoing`. Open set of strings.
example: outgoing
call_typestring
What kind of call it is, e.g. `internal` (extension to extension). Open set of strings.
example: internal
eventtimestring
When the phone system last emitted an event for this call, as `YYYY-MM-DD HH:MM:SS.ffffff` in **server local time**. Note this is a plain string with a space separator and no timezone offset - it is not RFC 3339, so parse it with an explicit format.
example: 2026-09-18 07:59:24.149687
callerobject
Who started the call.
caller_idstring
Identifier of the calling party.
caller_namestring | null
Display name of the calling party, when known.
caller_numberstring | null
The calling party's number - an extension for an internal call, an E.164 number for an external one.
caller_sip_device_idstring | null · uuid
The SIP device the call came from.
calleesarray<object>
Everyone the call is being offered to or connected with. More than one entry is normal - a ring group, a twinned mobile or a transfer all add legs - so do not assume a single callee.
callee_idstring
Identifier of the called party.
callee_namestring | null
Display name of the called party, when known.
callee_numberstring | null
How the leg was addressed. For an internal leg this is often the user's uuid rather than a dialable extension, so do not assume it is a phone number.
callee_sip_device_idstring | null · uuid
The SIP device this leg rings.
event_typesarray<string>
How this leg was reached, e.g. `DIAL-USER`, `DIAL-WEBRTC`.
[]string
queue_idstring | null
The queue the call is in, or null when it is not in one.
queue_namestring | null
Name of that queue, or null.
queue_numberstring | null
Number of that queue, or null.
queue_start_timestring | null
When the call entered the queue, or null.
channamestring
The phone system's primary channel name for the call. Diagnostic detail - its format is internal and may change.
example: PJSIP/sd_9ff7b6e5-599c-428a-9332-cdc59cf0b5ba-0001c971
external_channamestring | null
Channel name on the carrier side for an external call, else null.
all_channamesarray<string>
Every channel the phone system has created for this call, including the per-leg `Local/...` channels. Diagnostic detail; the list grows as legs are added, and its entries are not a stable interface.
[]string
ip_addressstring | null
Source address the call was seen from, in CIDR notation.
example: 203.0.113.24/32
caller_id_source_detailstring | null
How the phone system resolved the caller's identity. Diagnostic.
example: ACCOUNTCODE_UUID
call_answered_extra_on_transferstring | null
Set only when the call was answered as part of a transfer, else null.
attended_transfer_infostring
**A JSON document embedded in a string**, not an object - `JSON.parse` it before reading `is_attended_transfer`.
example: {"is_attended_transfer": false}
data_source_infostring
**A JSON document embedded in a string**, like `attended_transfer_info`. Records which internal rule resolved the caller and callee identities. Diagnostic.
example: {"callee_id_source": "CALLEES_LOGIC", "caller_id_source_summary": "CALLER_INFO_LOGIC", "source_transfer_linkedid": null}
rownuminteger
Position of the call within this response, starting at 1.
total_eventsinteger
How many events the phone system has recorded for this call so far. It climbs while the call is up, so it is a liveness hint, not a leg count.
Authorization Token Missing. This error is returned when the authorization token is missing.
Response schema
errorstring
Error message
example: Authorization Token is missing
Forbidden. The bearer token authenticated successfully but does not carry the scope this endpoint requires. Re-create the Integrations API key with the missing scope selected (Integrations > New integration > API key).
Response schema
messagestring
Server error. An unexpected condition was encountered on the server and the request could not be completed. The body is a generic JSON envelope with a `message` field. The response is logged on the server side; quote the request URL + timestamp when reporting an issue.
Response schema
messagestring
exceptionstring
Only present in non-production environments.
filestring
Only present in non-production environments.
lineinteger
Only present in non-production environments.
The phone system could not be reached, timed out, or answered with an error. It is a transient upstream condition on our side, not a problem with your request: retry after a short pause. The upstream status and body are deliberately not passed through.
Response schema
messagestring
Live calls are not available on this deployment because the link to the phone system is not configured. Retrying will not help — contact support.
Response schema
messagestring
get https://cockpit.voxbi.com/api/v1/calls/live
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/calls/live' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/calls/live', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
});

const data = await response.json();
console.log(data);
import requests

response = requests.get('https://cockpit.voxbi.com/api/v1/calls/live',
    headers={'Authorization': f'Bearer {YOUR_TOKEN}'}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
    'http' => [
        'method'  => 'GET',
        'header'  => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
    ],
]);

$response = file_get_contents('https://cockpit.voxbi.com/api/v1/calls/live', false, $context);
$data = json_decode($response, true);
print_r($data);
[]
Host string
example: cockpit.voxbi.com
Date string
example: Mon, 16 Oct 2023 14:08:48 GMT
Connection string
example: close
Cache-Control string
example: no-cache, private
Content-Type string
example: application/json
X-RateLimit-Limit integer
example: 60
X-RateLimit-Remaining integer
example: 59
Vary string
example: Origin
{ … }
"error": "Authorization Token is missing"
}
Cache-Control string
example: private, must-revalidate
Connection string
example: keep-alive
Content-Type string
example: application/json
Vary string
example: Origin
X-RateLimit-Limit integer
Max requests allowed in the current rate-limit window.
example: 60
X-RateLimit-Remaining integer
Requests remaining in the current rate-limit window.
example: 57
{ … }
"message": "Invalid ability provided."
}
Content-Type string
example: application/json
{ … }
"message": "Server Error"
}
{ … }
"message": "Failed to retrieve live calls."
}
Content-Type string
example: application/json
{ … }
"message": "The live calls service is not configured."
}
Content-Type string
example: application/json