Skip to main content

Call Details API (v1)

Retrieve details of a specific call, or query bulk call records with filters.

Single Call Details​

GET /v1/Accounts/<your_sid>/Calls/<CallSid>

Optional Query Parameter​

ParameterDescription
detailsSet to true to include leg-level information

Example Request​

curl 'https://<api_key>:<api_token>@api.exotel.com/v1/Accounts/<your_sid>/Calls/<CallSid>.json?details=true'

Response (with details=true)​

{
"Call": {
"Sid": "b6cfaf5f5cef3ca0fc937749ef96d245",
"ParentCallSid": null,
"DateCreated": "2017-03-03 10:48:33",
"DateUpdated": "2017-03-03 10:53:33",
"AccountSid": "your_sid",
"To": "0XXXXX38847",
"From": "0XXXXX30240",
"PhoneNumberSid": "0XXXXXX4890",
"Status": "completed",
"StartTime": "2017-03-03 10:48:33",
"EndTime": "2017-03-03 10:49:50",
"Duration": "17",
"Price": "1.500",
"Direction": "outbound-api",
"AnsweredBy": null,
"RecordingUrl": "https://s3-ap-southeast-1.amazonaws.com/.../recording.mp3",
"Details": {
"ConversationDuration": 8,
"Leg1Status": "completed",
"Leg2Status": "completed",
"Legs": [
{
"Leg": {
"Id": 1,
"OnCallDuration": 21
}
},
{
"Leg": {
"Id": 2,
"OnCallDuration": 8
}
}
]
}
}
}

Bulk Call Details​

GET /v1/Accounts/<your_sid>/Calls

Query Filters​

ParameterTypeDescription
SidStringSingle or comma-separated call SIDs (max 100)
DateCreatedRangegte:2019-01-01 00:00:00;lte:2019-01-31 23:59:59
ToStringE.164 format, max 5 comma-separated numbers
FromStringE.164 format, max 5 comma-separated numbers
StatusStringcompleted, failed, busy, no-answer
DurationRangegte:10s;lte:45s or eq:30s
PriceRangegte:0.10;lte:1.0
DirectionStringinbound, outbound-dial, outbound-api
PhoneNumberStringVirtual number, max 5 comma-separated
PageSizeIntegerDefault 50, max 100
SortByStringDateCreated:asc (default: desc)
BeforeStringCursor from PrevPageUri
AfterStringCursor from NextPageUri
RecordingUrlValidityInteger5–60 minutes for pre-signed recording URL

Example Request​

curl 'https://<api_key>:<api_token>@api.exotel.com/v1/Accounts/<your_sid>/Calls.json?DateCreated=gte:2019-12-03+00:00:00%3Blte:2019-12-04+00:00:00&Status=completed&PageSize=20'

Response​

{
"Metadata": {
"Total": 1027,
"PageSize": 20,
"FirstPageUri": "/v1/Accounts/<sid>/Calls.json?...",
"PrevPageUri": "/v1/Accounts/<sid>/Calls.json?Before=abc...",
"NextPageUri": "/v1/Accounts/<sid>/Calls.json?After=xyz..."
},
"Calls": [
{
"Sid": "c5797dcbaaeed7678c4062a4a3ed2f8a",
"DateCreated": "2019-12-03 10:48:33",
"Status": "completed",
"Duration": "45",
"Price": "1.500",
"Direction": "outbound-api",
"To": "0XXXXX38847",
"From": "0XXXXX30240",
"RecordingUrl": "https://..."
}
]
}
note
  • Query up to 6 months of historical data with a maximum 1-month range per request.
  • Use cursor-based pagination (Before/After from PrevPageUri/NextPageUri) for large result sets.

Number Metadata​

Get telecom circle, operator, number type, and DND status for an Indian phone number.

GET /v1/Accounts/<your_sid>/Numbers/<phone_number>

Example Request​

curl 'https://<api_key>:<api_token>@api.exotel.com/v1/Accounts/<your_sid>/Numbers/0XXXXX30240.json'

Response​

{
"Numbers": {
"PhoneNumber": "0XXXXX30240",
"Circle": "GJ",
"CircleName": "Gujarat Telecom Circle",
"Type": "Mobile",
"Operator": "R",
"OperatorName": "Reliance",
"DND": "Yes"
}
}

Circle Codes (India)​

CodeCircle
APAndhra PradeshASAssamBRBihar
CHChennaiDLDelhiGJGujarat
HPHimachal PradeshHRHaryanaJKJammu & Kashmir
KLKeralaKAKarnatakaKOKolkata
MHMaharashtraMPMadhya PradeshMUMumbai
NENorth EastOROrissaPBPunjab
RJRajasthanTNTamil NaduUEUP (East)
UWUP (West)WBWest Bengal

Operator Codes​

CodeOperator
AAirtelVVodafoneIIdea
VIVodafone-IdeaRRelianceBBSNL
MTMTNLTTataALAircel

Status Callback Webhook​

When you set StatusCallback while making a call, Exotel sends a POST to your URL with these parameters:

ParameterDescription
CallSidUnique call identifier
DateUpdatedLast update timestamp
Statuscompleted, failed, busy, no-answer
RecordingUrlRecording link (if recording enabled)
EventTypeterminal or answered
DateCreatedAPI request timestamp
ToCalled party number
FromCalling party number
PhoneNumberSidExoPhone identifier
StartTimeCall initiation time
EndTimeCall completion time
ConversationDurationDuration both parties were connected (seconds)
Directioninbound, outbound-dial, outbound-api
CustomFieldCustom data from original request

Leg Information in Callback​

{
"Legs": [
{
"OnCallDuration": 41,
"Status": "completed",
"AnsweredBy": "NA"
},
{
"OnCallDuration": 32,
"Status": "completed",
"AnsweredBy": "HUMAN"
}
]
}

AnsweredBy Values​

ValueDescription
HumanAnswered by a person
MachineAnswered by voicemail/IVR
NotSureCould not determine
NANot applicable (first leg)

HTTP Status Codes​

CodeMeaning
200Success
400Bad Request — Invalid parameters
401Unauthorized
429Rate limit exceeded

Try It — Single Call Details​

Try It — Number Metadata​