POST
Recordings.List
Return call recordings for one customer as JSON rows. Use it when a customer screen needs call history, recording URLs, notes, direction, answer status, transcription status, and team/source metadata.
Permissions
- User must be logged in with a valid bearer token.
- Returned or changed records are limited by the user permissions, team access, folder access, and account settings.
Action
- Returns Recordings rows as JSON.
- Supports the documented filters and paging fields.
- List responses are capped at 25 rows per call.
Push Service
No push is sent because this function only reads data or returns helper information.
Automation
No automation is run for this function.
Special Instructions
- Send the bearer token on protected calls with Authorization: Bearer YOUR TOKEN.
- Send parameters as POST body fields exactly as documented.
- For paging, do not request more than 25 rows.
- For total rows, call the matching Count function with the same filters.
Required Parameters
| Name | Type | Sample | Explanation |
|---|---|---|---|
customer_idpost | int | 123 | Customer id whose recordings should be returned. cust_id is also accepted. The user must have permission to see this customer. |
Optional Parameters
| Name | Type | Sample | What it gives |
|---|---|---|---|
startpost | int | 0 | First row offset for paging. |
limitpost | int | 25 | Maximum rows to return. Values above 25 are capped to 25. |
lengthpost | int | 25 | DataTables page-size alias for limit. Values above 25 are capped to 25. |
per_pagepost | int | 25 | Alternative page-size alias. Values above 25 are capped to 25. |
searchpost | string | 054 | Searches phone, source, department, note, and message fields. |
filter_datapost | string | sales | Legacy search alias for the same text search. |
search[value]post | string | sales | DataTables search text alias. |
from_datepost | date | 2026-07-01 | Return recordings created from this date. Dates are interpreted as UTC Y-m-d. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part. |
to_datepost | date | 2026-07-19 | Return recordings created until this date. Dates are interpreted as UTC Y-m-d. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part. |
directionpost | string | in | Filter by call direction. Use in for incoming or out for outgoing. |
answeredpost | int | 1 | Filter by answer state. 1 means answered, 0 means not answered. |
sourcepost | string | phone | Filter by recording source. |
departmentpost | string | sales | Filter by department saved on the recording. |
team_member_idpost | int | 47 | Filter by assigned/team member id. |
tel_team_member_idpost | int | 47 | Filter by telephone team member id. |
call_statuspost | string | done | Filter by call status value. call_statuses is also accepted. |
type_of_purchasepost | int | 1 | Filter by sale/purchase type flag saved on the recording. |
telemarketing_queuepost | int | 0 | Filter recordings by telemarketing queue flag. |
transcription_statuspost | string | done | Filter by AI transcription status when present. |
order_bypost | string | date_created | Order by id, date_created, direction, answered, source, department, or c_lenght. |
order_dirpost | string | desc | Order direction: asc or desc. |
Authentication
Send the bearer token returned by Login in the request header.
Authorization: Bearer YOUR TOKEN
Sample Request
{
"url": "\/app\/Recordings.List",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
},
"body": {
"customer_id": "123",
"limit": "25",
"order_by": "date_created",
"order_dir": "desc"
},
"url_user": "https:\/\/{user}.bull36.com\/app\/Recordings.List",
"url_domain": "https:\/\/{domain}\/app\/Recordings.List"
}Endpoint
POST /app/Recordings.List
POST https://{user}.bull36.com/app/Recordings.List
POST https://{domain}/app/Recordings.ListSample Output
{
"success": 1,
"count": 1,
"recordsTotal": 1,
"data": [
{
"recording_id": 600,
"customer_id": 123,
"phone": "0540000000",
"direction": "in",
"answered": 1,
"answered_text": "Answered",
"date_created": "2026-07-19 10:00:00",
"recording_url": "https:\/\/files.bull36.com\/biz1upload\/sip_recodings\/call.mp3",
"note": "Customer asked for callback",
"transcription_status": "done"
}
]
}Count Only
Use the matching count route with the same filters when the UI only needs total rows for paging.
{
"url": "\/app\/Recordings.Count",
"url_user": "https:\/\/{user}.bull36.com\/app\/Recordings.Count",
"url_domain": "https:\/\/{domain}\/app\/Recordings.Count",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
},
"body": {
"customer_id": "123",
"order_by": "date_created",
"order_dir": "desc"
},
"sample_output": {
"success": 1,
"count": 123
},
"notes": {
"count": "Total matching recordings before paging.",
"max_limit": 25
}
}Count JavaScript
const token = 'YOUR TOKEN';
const body = new URLSearchParams();
body.set('customer_id', '123');
body.set('order_by', 'date_created');
body.set('order_dir', 'desc');
const res = await fetch('https://{domain}/app/Recordings.Count', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body
});
const data = await res.json();
console.log(data.count);JavaScript Example
const token = 'YOUR TOKEN';
const body = new URLSearchParams({ customer_id: '123', limit: '25' });
const res = await fetch('/app/Recordings.List', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body
});
const data = await res.json();
console.log(data);Error Example
{
"success": "0",
"message": "Missing required parameter: customer_id"
}