curl --request GET \
--url https://api.eqho.ai/v1/calls \
--header 'X-API-KEY: <api-key>' \
--header 'x-org-id: <api-key>'import requests
url = "https://api.eqho.ai/v1/calls"
headers = {
"X-API-KEY": "<api-key>",
"x-org-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>', 'x-org-id': '<api-key>'}};
fetch('https://api.eqho.ai/v1/calls', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eqho.ai/v1/calls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("x-org-id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"calls": [
{
"_id": "<string>",
"call_type": "<string>",
"external_id": "<string>",
"from_number": "<string>",
"to_number": "<string>",
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z",
"conversation_medium": "<string>",
"external_recording_url": "<string>",
"transcript": [
{
"role": "<string>",
"content": "<string>",
"timestamp": 123,
"id": "<string>"
}
],
"disposition_level_1": "<string>",
"disposition_level_2": "<string>",
"disposition_level_3": "<string>",
"disposition_conversion": true,
"disposition_contacted": true,
"call_summary": "<string>",
"twilio_status": "<string>",
"is_answer_machine": true,
"lead_id": "<string>",
"lead": {
"_id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"timezone": "US/Mountain",
"email": "<string>"
},
"agent_id": "<string>",
"agent_name": "<string>",
"campaign_id": "<string>",
"campaign_name": "<string>",
"account_id": "<string>",
"service_version": "<string>",
"completed_at": "2023-11-07T05:31:56Z",
"call_count": 123,
"is_dry_run": false,
"call_metrics": {
"ttfb": {
"stt": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
},
"ai": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
},
"tts": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
},
"e2e": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
}
},
"utterances": [
{}
],
"user_talk_time_in_sec": 123,
"agent_talk_time_in_sec": 123,
"user_to_agent_talk_ratio": 123,
"total_silence_in_sec": 123,
"longest_silence_in_sec": 123,
"silence_frequency": 123,
"words_per_agent_response": 123
},
"credits_used": 123,
"greeting_info": {
"greeting": "<string>",
"generation_schema_details": {
"greeting_tone": "<string>",
"greeting_length": "<string>",
"medium_type_description": "<string>",
"role_context_used": true,
"greeting_examples": "<string>"
},
"ai_greeting_used": false,
"ai_generation_timed_out": false,
"ai_generation_failed": false
},
"duration_in_seconds": 123,
"search_score": 123,
"custom_fields": {},
"pre_call_tasks": [
"<unknown>"
],
"post_call_tasks": [
"<unknown>"
]
}
],
"meta": {
"per_page": 123,
"last_page": 123,
"current_page": 123,
"next_page": 123,
"prev_page": 123,
"total": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Get Calls
Retrieves calls for your account
curl --request GET \
--url https://api.eqho.ai/v1/calls \
--header 'X-API-KEY: <api-key>' \
--header 'x-org-id: <api-key>'import requests
url = "https://api.eqho.ai/v1/calls"
headers = {
"X-API-KEY": "<api-key>",
"x-org-id": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>', 'x-org-id': '<api-key>'}};
fetch('https://api.eqho.ai/v1/calls', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eqho.ai/v1/calls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("x-org-id", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"calls": [
{
"_id": "<string>",
"call_type": "<string>",
"external_id": "<string>",
"from_number": "<string>",
"to_number": "<string>",
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z",
"conversation_medium": "<string>",
"external_recording_url": "<string>",
"transcript": [
{
"role": "<string>",
"content": "<string>",
"timestamp": 123,
"id": "<string>"
}
],
"disposition_level_1": "<string>",
"disposition_level_2": "<string>",
"disposition_level_3": "<string>",
"disposition_conversion": true,
"disposition_contacted": true,
"call_summary": "<string>",
"twilio_status": "<string>",
"is_answer_machine": true,
"lead_id": "<string>",
"lead": {
"_id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"timezone": "US/Mountain",
"email": "<string>"
},
"agent_id": "<string>",
"agent_name": "<string>",
"campaign_id": "<string>",
"campaign_name": "<string>",
"account_id": "<string>",
"service_version": "<string>",
"completed_at": "2023-11-07T05:31:56Z",
"call_count": 123,
"is_dry_run": false,
"call_metrics": {
"ttfb": {
"stt": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
},
"ai": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
},
"tts": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
},
"e2e": {
"values": [
123
],
"min": 123,
"max": 123,
"median": 123
}
},
"utterances": [
{}
],
"user_talk_time_in_sec": 123,
"agent_talk_time_in_sec": 123,
"user_to_agent_talk_ratio": 123,
"total_silence_in_sec": 123,
"longest_silence_in_sec": 123,
"silence_frequency": 123,
"words_per_agent_response": 123
},
"credits_used": 123,
"greeting_info": {
"greeting": "<string>",
"generation_schema_details": {
"greeting_tone": "<string>",
"greeting_length": "<string>",
"medium_type_description": "<string>",
"role_context_used": true,
"greeting_examples": "<string>"
},
"ai_greeting_used": false,
"ai_generation_timed_out": false,
"ai_generation_failed": false
},
"duration_in_seconds": 123,
"search_score": 123,
"custom_fields": {},
"pre_call_tasks": [
"<unknown>"
],
"post_call_tasks": [
"<unknown>"
]
}
],
"meta": {
"per_page": 123,
"last_page": 123,
"current_page": 123,
"next_page": 123,
"prev_page": 123,
"total": 123
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Your API key for authentication.
Org impersonation via x-org-id. Superadmins may impersonate any org; admins may impersonate their direct sub-organizations. Enter the target organization ID to act as that org.
Query Parameters
Search for a specific term across all fields.
Search for a specific term spoken by the agent or lead.
user, assistant (Deprecated) Use 'include_action_slugs' instead. Filter calls that have a specific action slug.
(Deprecated) Use 'call_types' instead. Show calls of a specific type.
outbound, inbound (Deprecated) Use 'conversation_mediums' instead. Filter by conversation medium.
web_voice, telephony, sms, email, chatbot, api_text, chat_app, softphone Filter by one or more disposition values. You can pass multiple values like: ?disposition_level_3=1&disposition_level_3=2
Filter by whether the call was dispositioned.
(Deprecated) Use 'twilio_statuses' instead. Filter calls by Twilio status.
queued, initiated, ringing, in-progress, completed, busy, failed, no-answer, canceled, voicemail (Deprecated) Use 'campaign_ids' instead. Show calls for a specific campaign id.
(Deprecated) Use 'agent_ids' instead. Show calls of a specific agent.
Show calls of a specific lead.
Show calls with specific call ids.
Comma-separated list of action slugs that MUST have been called. Takes precedence over action_slug.
Comma-separated list of action slugs that must NOT have been called.
Comma-separated list of Twilio statuses to filter by. Takes precedence over twilio_status.
queued, initiated, ringing, in-progress, completed, busy, failed, no-answer, canceled, voicemail Comma-separated list of campaign IDs to filter by. Takes precedence over campaign_id.
Comma-separated list of agent IDs to filter by. Takes precedence over agent_id.
Comma-separated list of call types to filter by (inbound, outbound). Takes precedence over call_type.
outbound, inbound Comma-separated list of conversation mediums to filter by (telephony, web_voice, sms, chatbot, email). Takes precedence over conversation_medium.
web_voice, telephony, sms, email, chatbot, api_text, chat_app, softphone Filter by dry-run status. True=only dry-runs, False=exclude dry-runs, None=include all (default).
Filter calls by feedback type. 'POSITIVE' returns calls with positive feedback, 'NEGATIVE' returns calls with negative feedback, 'any' returns calls with any feedback. Case-insensitive.
POSITIVE, NEGATIVE, NEUTRAL Filter calls with feedback created on or after this datetime (inclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-04T00:00:00Z)
Filter calls with feedback created before this datetime (exclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-05T00:00:00Z)
Comma-separated list of evaluation definition IDs to filter by.
Comma-separated list of grader names to filter by.
Filter calls by evaluation pass/fail status. True=only passed, False=only failed.
Filter calls with numerical evaluation result greater than or equal to this value (inclusive).
Filter calls with numerical evaluation result less than this value (exclusive).
Comma-separated list of evaluation result label values to filter by.
Filter calls with evaluation results created on or after this datetime (inclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-04T00:00:00Z)
Filter calls with evaluation results created before this datetime (exclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-05T00:00:00Z)
(Deprecated) Use 'created_gte' instead.
(Deprecated) Use 'created_lt' instead.
Show conversations that started on or after this datetime (inclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-04T00:00:00Z)
Show conversations that started before this datetime (exclusive). Must be in UTC using ISO 8601 format (e.g., 2025-07-05T00:00:00Z)
Show conversations lasting at least this many seconds (inclusive). Conversations without a recorded duration are excluded.
x >= 0Show conversations lasting less than this many seconds (exclusive). Conversations without a recorded duration are excluded.
x >= 0The offset for the pagination. If not provided, the first 10 calls will be listed.
x >= 1The maximum number of calls to return in the response. If not provided, 10 calls will be listed.
1 <= x <= 500Sort by a specific field. If not provided, calls will be sorted by start_date.
Order by a specific field. If not provided, calls will be ordered by start_date in descending order.
Filter calls by a specific field. Format: key=value
Comma-separated list of call fields to return (e.g. 'call_type,from_number,status').
Filter by conversation custom field key-value pairs using bracket notation. Use custom_fields[key]=value to filter on any key in a conversation's custom_fields, the same keys webhook events publish as conversation_custom_fields. Combine several pairs to require all of them: ?custom_fields[rc_id]=RC12345&custom_fields[lead_type]=residential. Dotted keys reach nested custom fields, so custom_fields[order.id]=A17 matches {"order": {"id": "A17"}}. At most 10 pairs per request; keys are limited to 128 characters and values to 256. Values are compared as exact, case-sensitive strings: a custom field stored as the number 12345 is not matched by custom_fields[job_id]=12345.
Show child attributes
Show child attributes
Was this page helpful?