Call Legs
๐ Looking for live/real-time queue, agent or call-level data? See Work Analytics โ Overview.
๐ Updated Endpoint
The Call Legs and Call Detail Records are dedicated endpoints to replace the previous Call Detail Record Legs endpoint which served both purposes
๐
Note: This API provides access to data from the past 2 years only in accordance with Analytics for Work data compliance policies; queries spanning more than 2 years will return only the most recent 2 years of data, and queries outside this range will return no results
Call Legs Explainedโ
A Call Record is a single record view of the overall call and metrics represented by a single Call ID.
A Call Leg provides detailed metrics on an individual segment of a call within the call journey and is represented by a Call Leg ID combined with a Call ID.
Example: A Call Record would be a single row representation of a call that follows the following path which would have multiple Call Legs to fully represent the journey.
- Inbound to an Auto Attendant
- Transferred to Ring Group
- Simultaneous calls to 5 Ring Group members (Leg per member contacted regardless of outcome)
- Answered by one of the members
8x8 Work Analytics Historical access is via this multi step process. For any of the endpoints the same process is followed.
๐ You will need a working API key to begin
You can generate API credentials from How to get API Keys
The
8x8-api-keywill be theKeygenerated. For Work Analytics the Secret from Admin Console is not required.
Use the following base URL during this process:
https://api.8x8.com/analytics/work
Run Reportโ
Parametersโ
Method: GET
Headersโ
| Name | Required | Description | Example |
|---|---|---|---|
| Authorization | โ | Pass the access_token returned from the authentication request as a Bearer token Bearer {access_token} | Bearer eyJhbGciOiJSUzI1NiJ9.yyyyyyy.zzzzzzzzzzz |
Pathโ
| Name | Required | Description | Example |
|---|---|---|---|
| version | โ | The current version for cdr is v1 | v1 |
Queryโ
| Name | Required | Description | Example |
|---|---|---|---|
| pbxId | โ | Pass the pbxId (PBX Name) of the requested pbx or comma separated list of pbxIds or allpbxes for all of the pbxs in the customer account. PBX names can be found here in Admin Console | acmecorp,acmecorp2 |
| startTime | โ | The interval start time for CDR searches - the format is YYYY-MM-DD HH:MM:SS. | 2022-10-20 08:30:00 |
| endTime | โ | The interval end time for CDR searches - the format is YYYY-MM-DD HH:MM:SS. | 2022-10-20 19:00:00 |
| timeZone | โ | IANA Time Zones. Examples America/New_York, Europe/London Wikipedia Time Zone List | America/New_York |
| pageSize | โ | Number of records to return in pages See Pagination. Must be | 50 |
| scrollId | โ/โ | Not required for initial page required on subsequent pages. See Pagination | |
| isConnectTime | โ | This parameter allows you to get your results based on either connect time or disconnect time of each call leg. Default is false. See isConnectTime explained for more details. | false |
| isSimplified | โ | Only valid for Call Legs. Default is false. When true: Child calls are not returned. For example, child calls are the ones the service makes to one or more agents when a call comes into a call queue or a ring group. Some call legs are omitted. For example, the removal of CallForking and CallRecording legs. | false |
isConnectTime explainedโ
This looks at the timing of call legs and as such is not valid for call records
if false will use 'disconnected_time' of the call leg to filter data and return the result
if true will use the 'connected_time' of the call leg to filter data and return the result
disconnected_time is when the call leg was disconnected from the system
connected_time is when the call leg transitioned from alerting to connected.
Call Legs Requestโ
As per the Open API specification guidelines, we have migrated the URLs for Call Leg Report as give in the below table :
| Deprecated URL Version | Migrated URL (Current version) |
|---|---|
| v1/cdr?isCallRecord=false | v2/call-legs |
Try out the CDR Legs Request
๐ Jump in and try it out in the CDR Legs Reference
curl --location --request GET 'https://api.8x8.com/analytics/work/v{version}/call-legs?pbxId={pbxId here}&startTime=2022-02-03 00:00:00&endTime=2022-02-03 10:00:00&timeZone=America/New_York&pageSize=50&isSimplified=false&isConnectTime=false' \
--header 'Authorization: Bearer {access_token here}' \
--header '8x8-apikey: {8x8-apikey input here}'
Call Legs Responseโ
For details on call legs metrics please refer toCDR Glossary and Details
{
"meta": {
"totalRecordCount": 2,
"scrollId": "c3VwZXJ0ZW5hbnRjc21fMTYzNTU3MTA0ODM0NV8xXzE2NDM4OTc0OTI5MDM"
},
"data": [
{
"callId": "1635571048351",
"legId": "1",
"startTimeUTC": 1643898447499,
"startTime": "2022-02-03T09:27:27.499-0500",
"connectTimeUTC": 1643898447539,
"connectTime": "2022-02-03T09:27:27.539-0500",
"disconnectedTimeUTC": 1643898472253,
"disconnectedTime": "2022-02-03T09:27:52.253-0500",
"talkTimeMS": 0,
"talkTime": "00:00:00",
"caller": "+15555551220",
"callerName": "MARK SMITH",
"callee": "120088",
"calleeName": "Jane Li",
"lra": "120088",
"direction": "Incoming",
"parentCallId": null,
"transferToCallId": null,
"dnis": "12025555720",
"status": "Completed",
"callerDeviceId": null,
"calleeDeviceId": null,
"callerDeviceModel": "",
"calleeDeviceModel": "",
"callerId": "MARK SMITH,+15555551220",
"missed": "Missed",
"abandoned": "-",
"answered": "-",
"cause": "Ring No Answer",
"callerSvcName": null,
"callerSvcType": null,
"calleeSvcName": "VMadvanced",
"calleeSvcType": "Custom",
"lraType": 1,
"calleeHoldDurationMS": 0,
"calleeHoldDuration": "00:00:00",
"calleeDisconnectOnHold": "",
"callerDisconnectOnHold": "",
"pbxId": "acmecorppbx",
"sipCallId": "user@example.com",
"departments": [
"Sales Engineering"
],
"branches": [
"Central"
],
"recordServiceOn": "",
"bargeServiceOn": "",
"masterSlaveExts": "",
"propsLastPartyDisp": "Voicemail",
"accountCode": "",
"aaPath": "",
"callTime": 24754
},
{
"callId": "1635571048345",
"legId": "1",
"startTimeUTC": 1643897492903,
"startTime": "2022-02-03T09:11:32.903-0500",
"connectTimeUTC": 1643897493100,
"connectTime": "2022-02-03T09:11:33.100-0500",
"disconnectedTimeUTC": 1643899189420,
"disconnectedTime": "2022-02-03T09:39:49.420-0500",
"talkTimeMS": 0,
"talkTime": "00:00:00",
"caller": "+15551234567",
"callerName": "15551234567",
"callee": "CallQueue",
"calleeName": "Test Queue",
"lra": "110081",
"direction": "Incoming",
"parentCallId": null,
"transferToCallId": null,
"dnis": "15554441212",
"status": "Completed",
"callerDeviceId": null,
"calleeDeviceId": null,
"callerDeviceModel": "",
"calleeDeviceModel": "",
"callerId": "14164666541,+14164666541",
"missed": "Missed",
"abandoned": "Abandoned",
"answered": "-",
"cause": "Normal",
"callerSvcName": null,
"callerSvcType": null,
"calleeSvcName": "ACDOperatorService",
"calleeSvcType": "Custom",
"lraType": 4,
"calleeHoldDurationMS": 0,
"calleeHoldDuration": "00:00:00",
"calleeDisconnectOnHold": "",
"callerDisconnectOnHold": "",
"pbxId": "acmecorppbx",
"sipCallId": "user@example.com",
"departments": [
"East Office"
],
"branches": [
"East Coast"
],
"recordServiceOn": "",
"bargeServiceOn": "",
"masterSlaveExts": "",
"propsLastPartyDisp": "Missed",
"accountCode": "",
"aaPath": "",
"callTime": 1696517
}
]
}
๐ Follow the pagination steps below to retrieve subsequent pages.
Paginationโ
Within Work Analytics Only the /call-records and /call-legs endpoints are subject to pagination.
This is controlled by pageSize and scrollId
pageSizeis the number of records to return per page and is required for /call-legsscrollIdis returned from /call-legs requests providing an id for the next page of results.
Pagination Example
Assuming there will be 81 records in total. With an initial input of pageSize=50 the returned meta data will be as follows.
Note: data has been truncated to an empty array to limit the size of the example text
{
"meta": {
"totalRecordCount": 81,
"scrollId": "c3VwZXJ0ZW5hbnRjc21fMTYzNTU3MTA0ODQ4Nl8xXzE2NDM5MTIzNTI0NDE"
},
"data": [
]
}
The request for the next page would include scrollId set as the value returned in the previous request pageKey=50&scrollId=c3VwZXJ0ZW5hbnRjc21fMTYzNTU3MTA0ODQ4Nl8xXzE2NDM5MTIzNTI0NDE
The new result set would look as follows. The returned result set would only have 31 elements.
{
"meta": {
"totalRecordCount": 81,
"scrollId": "c3VwZXJ0ZW5hbnRjc21fMTYzNTU3MTA0ODM0NV8xXzE2NDM4OTc0OTI5MDM"
},
"data": [
]
}
The request for the next page would be pageKey=50&scrollId=c3VwZXJ0ZW5hbnRjc21fMTYzNTU3MTA0ODM0NV8xXzE2NDM4OTc0OTI5MDM the scrollId has been set to the value returned in the previous request
{
"meta": {
"totalRecordCount": 0,
"scrollId": "No Data"
},
"data": []
}