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

NameTypeSampleExplanation
customer_id
post
int123Customer id whose recordings should be returned. cust_id is also accepted. The user must have permission to see this customer.

Optional Parameters

NameTypeSampleWhat it gives
start
post
int0First row offset for paging.
limit
post
int25Maximum rows to return. Values above 25 are capped to 25.
length
post
int25DataTables page-size alias for limit. Values above 25 are capped to 25.
per_page
post
int25Alternative page-size alias. Values above 25 are capped to 25.
search
post
string054Searches phone, source, department, note, and message fields.
filter_data
post
stringsalesLegacy search alias for the same text search.
search[value]
post
stringsalesDataTables search text alias.
from_date
post
date2026-07-01Return 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_date
post
date2026-07-19Return 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.
direction
post
stringinFilter by call direction. Use in for incoming or out for outgoing.
answered
post
int1Filter by answer state. 1 means answered, 0 means not answered.
source
post
stringphoneFilter by recording source.
department
post
stringsalesFilter by department saved on the recording.
team_member_id
post
int47Filter by assigned/team member id.
tel_team_member_id
post
int47Filter by telephone team member id.
call_status
post
stringdoneFilter by call status value. call_statuses is also accepted.
type_of_purchase
post
int1Filter by sale/purchase type flag saved on the recording.
telemarketing_queue
post
int0Filter recordings by telemarketing queue flag.
transcription_status
post
stringdoneFilter by AI transcription status when present.
order_by
post
stringdate_createdOrder by id, date_created, direction, answered, source, department, or c_lenght.
order_dir
post
stringdescOrder 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.List

Sample 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"
}