API Endpoint
GET/api/v1/global/agents/call-history
Content-Type: application/json
Authentication: Required (API token validated by middleware apiauth.verifyToken). Provide token via header token or api_access_token.
Query Parameters / Request Body
This endpoint accepts parameters either as query parameters (GET) or as JSON in the request body (middleware mapsreq.data).
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | No | Pagination page number. Defaults to env DEFAULT_PAGE. |
limit | integer | No | Number of items per page. Defaults to env DEFAULT_PAGE_LIMIT. |
fromdate | string | No | Start date for range (e.g. 2025-01-01 or datetime). Defaults to 1 month ago if omitted. |
todate | string | No | End date for range. Defaults to now if omitted. (Code enforces a reasonable max window, ~3 months.) |
agent_id | integer | No | Filter results to a specific agent. |
calling_number | string | No | Partial match filter for calling number. |
provider_number | string | No | Filter by provider number. |
status | string/number | No | Filter by call/execution status (e.g. completed, failed). |
sentiment, disposition, emotion, transcript, audio_url, etc. However this endpoint forces grouping by agent_id.
Available Filters (from code)
The controller and underlyingagentController support a set of filters you can pass as query parameters or in the request body. Below are the most useful filters observed in the implementation:
| Filter | Type | Description |
|---|---|---|
agent_id | integer | Filter results to a specific agent (AGENT_ID). |
calling_number | string | Partial-match filter against CALLING_NUMBER (uses SQL LIKE). |
provider_number | string | Exact match against PROVIDER_NUMBER. |
status | string/integer | Filters by execution STATUS in summary (and CALL_STATUS in per-call list endpoints). Common values: completed, failed, running (depends on your workspace data). |
fromdate / todate | string | Date or datetime range. Controller defaults to last 1 month when omitted; code enforces a maximum reasonable window (~3 months). |
page | integer | Pagination page. |
limit | integer | Page size / limit. |
audio_url | string | Pass available to return calls with an audio file (FILE_PATH is not null), or any other value to look for missing files. |
transcript | string | Pass available to return calls with TRANSCRIPT present, or unavailable for missing transcripts. |
sentiment | string | Filter by OVERALL_SENTIMENT recorded in the execution (if voice analysis ran). |
disposition | string | Comma-separated dispositions; controller splits and applies IN filter on DISPOSITION. |
emotion | string | Filter by DETECTED_EMOTION. |
input_data | string | Partial-match (LIKE) against INPUT_DATA. |
cost_breakdown | string | Partial-match (LIKE) against COST_BREAKDOWN or inside RETURN_DATA. |
duration | string | For per-call list: expects a range like min-max to filter TOTAL_DURATION. (Used in getAgentExecutionList.) |
- The
getCallHistoryendpoint specifically calls the summary function withgroup_by = 'agent_id', so grouping is enforced even if othergroup_byvalues exist in the summary helper. - Some filters have slightly different column names between the summary and the per-call list endpoints (
STATUSvsCALL_STATUS); prefer usingstatusfor the summary endpoint andCALL_STATUSwhen calling the per-call list directly if you need exact behavior. dispositionaccepts comma-separated values and will be converted into anINfilter in SQL.- For precise per-call data (transcripts, audio URLs, cost breakdown), use the per-call endpoint
agentController.getAgentExecutionListand apply the same filters.
Example Request
Successful Response (200)
Top-level response follows the project’s standard wrapper in many endpoints. The importantdata structure (simplified) is shown below.
Response Fields
| Field | Type | Description | |
|---|---|---|---|
datalist | array | Array of agent summary objects (one per agent). | |
datalist[].agent_id | integer | Agent ID (group value). | |
datalist[].agent_name | string | Agent display name (if available). | |
datalist[].total_calls | number | string | Total calls for that agent in the range. |
datalist[].success_calls | number | string | Successful (completed) calls count. |
datalist[].failed_calls | number | string | Failed calls count. |
datalist[].total_duration | string | Formatted duration for that agent: Xh:Ym:Zs. | |
datalist[].call_from | string | null | Representative provider number (one sample per agent). |
datalist[].call_to | string | null | Representative calling number (one sample per agent). |
pagination | object | Pagination info: totalRecords, totalPages, currentPage, limit. | |
total_calls | integer | Overall total calls across returned agent groups. | |
successful_calls | integer | Overall successful calls across returned agent groups. | |
total_duration | string | Overall duration formatted Xh:Ym:Zs. |
Error Responses
400 - Bad Request
Status Code:400 Bad Request
Invalid date range or parametersfromdate / todate format invalid
401 - Authentication Error
Status Code:401 Unauthorized
404 - Not Found
Status Code:404 Not Found
500 - Server Error
Status Code:500 Internal Server Error
Pagination
Results are paginated. Usepage and limit to page through results. Pagination metadata is returned in the pagination object. For large datasets, prefer narrow date ranges (≤ 3 months).
Important Notes
- Grouping: This endpoint is implemented by calling
getAgentExecutionSummarywithgroup_by=agent_id, so responses are grouped by agent. - Representative numbers:
call_fromandcall_toare taken from one representative execution (latest with non-null numbers) per agent — usegetAgentExecutionListfor full per-call records. - Date ranges: Defaults to last 1 month if
fromdate/todateare not provided. The code enforces a reasonable maximum range (~3 months) for performance. - Pagination defaults: Values come from environment variables
DEFAULT_PAGEandDEFAULT_PAGE_LIMITif not provided.
Example: Use agent_id to fetch one agent’s summary
Example Requests (filters)
Below are cURL examples that demonstrate how to call the endpoint using the various filters supported by the code. You can use GET query parameters or POST JSON bodies (middleware mapsreq.data).
1) Get summary for a specific agent (GET)
2) Get summary for a specific agent (POST)
3) Filter by calling_number (partial match)
4) Filter by provider_number (exact match)
5) Filter by status (e.g., completed)
6) Filter for calls that have audio available
7) Filter for calls with transcript available
8) Filter by sentiment or emotion
9) Filter by disposition (comma-separated)
10) Filter by input_data partial match
11) Filter by cost_breakdown (partial match)
12) Duration range (per-call list; example for reference)
13) Combined filters (example)
14) POST example with multiple filters (combined)
- Use GET for simple queries and POST when your client prefers JSON bodies or needs to send complex filters.
- Some filters (like
duration) are more relevant to the per-call list endpoint; the summary groups by agent but accepts the filter (the underlying query logic differs slightly).
Related Endpoints
/api/v1/global/agents/get— Get agent metadata and configuration./api/v1/global/agents/call— Initiate an agent call.agentController.getAgentExecutionList— Use this endpoint for row-level per-call details (call-level list, transcripts, audio URLs).

