Export complete windows
There is no cursor or offset pagination. If a result reaches your row limit, divide the date range into smaller windows and deduplicate by session_id. Dense windows may also need a rep filter.
Trellus developers
Bring call records and transcripts into your reports, internal tools, and AI workflows.
A Trellus account with API access is required. Your account permissions determine which calls you can read.
Check access, choose a date window, and select the fields your project needs.
curl https://ext.trellus.ai/visible \
-H "api_key: $TRELLUS_API_KEY"
Write code against call records, transcripts, and reporting fields.
Ask a compatible AI assistant about calls you can access.
Find the supported calling workflow for your sales platform.
01 / Authentication
Sign in to Trellus and open Settings → Integrations → Call Data API. The reference includes your account key, request examples, and the field catalogue. If the page is unavailable, ask your team admin to check your access or contact support.
Store the key in your server environment as TRELLUS_API_KEY. It belongs to your signed-in account and inherits that account’s permissions; using it for reporting does not create a separately restricted credential.
curl https://ext.trellus.ai/visible \
-H "api_key: $TRELLUS_API_KEY"
team value appears only when the key can read the whole team.These examples use a placeholder environment variable. This page never asks for a key or sends a request to the API.
02 / Your first query
Start with a small result set. The example selects calls and returns their IDs, start times, contact names, and durations. You can include transcript columns when your project needs them.
curl https://rpt-2.trellus.ai/session-list-v6 \
-H "Authorization: Bearer $TRELLUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"start": 1790812800000000,
"end": 1791417600000000,
"cnf": [
[
{
"column_name": "conversation_type",
"operator": "EQ",
"value_safe": 1
}
]
],
"limit": 50,
"select": [
"session_id",
"started_at",
"customer_data.name",
"duration"
]
}'
| Field | What to send |
|---|---|
start / end | Unix microseconds. Start is included; end is excluded. The date controls calculate these values. |
select | Exact field paths in the order you want returned. |
cnf | Filter groups. This example selects calls using conversation_type EQ 1. |
limit | Up to 1,000 rows. This caps the result; it is not a page size with a continuation token. |
03 / Response shape
List results are arrays of rows. Every cell matches the field at the same position in your request’s select array. A successful empty response, [], means no readable calls matched that query.
[
[
"EXAMPLE_SESSION_ID",
1790812800,
"Example contact",
120
]
]
// Each row follows the same order as your request's select array.
const calls = rows.map(row => Object.fromEntries(
select.map((column, index) => [column, row[index]])
));
// started_at and duration are seconds, unlike request date boundaries.
const startedAt = calls[0] ? new Date(calls[0].started_at * 1000) : null;
started_at values, call durations, and transcript offsets use seconds.| Field | Meaning |
|---|---|
session_id | The identifier to use when requesting one call. |
started_at | Unix seconds. Multiply by 1,000 for a JavaScript Date. |
customer_data.name | Contact name, when captured for the call. |
duration | Call duration in seconds. |
turn_data.texts | Transcript utterances as an array, when available. |
turn_data.is_customers | Aligned with texts: true for the customer, false for the agent. |
turn_data.starts | Aligned with texts: offsets in seconds from session start. |
Contact fields depend on captured CRM data. Transcripts depend on the call’s recording and transcription settings. When transcript arrays are present, match their entries by index.
04 / Call detail
Use an exact session_id from your list response in the x-session-id header. Keep the same account key. The x-proto-as-json header requests JSON instead of the default binary format.
curl https://rpt-2.trellus.ai/session \
-H "Authorization: Bearer $TRELLUS_API_KEY" \
-H "x-session-id: SESSION_ID_FROM_YOUR_LIST" \
-H "x-proto-as-json: true"
Detail JSON uses camelCase names such as customerData and turnData. List-query fields use snake_case paths such as customer_data.name. Default-valued fields may be absent in detail JSON.
https://ext.trellus.ai/visibleConfirm account access before querying call records.
api_key headerhttps://rpt-2.trellus.ai/session-list-v6Read a bounded date window with the exact fields you need.
Authorization: Bearerhttps://rpt-2.trellus.ai/sessionFetch one selected call in JSON using x-proto-as-json.
Authorization: Bearer + x-session-idBefore you schedule a job
There is no cursor or offset pagination. If a result reaches your row limit, divide the date range into smaller windows and deduplicate by session_id. Dense windows may also need a rep filter.
On HTTP 429, wait the number of seconds in Retry-After and use bounded retries. Coordinate jobs sharing the same account key. See the full reference for current request pacing.
Errors may be plain text. For a 401, inspect the response, confirm the selected call and account access, and contact support with the timestamp and session ID if needed. Keep the key out of support messages.
Before scheduling an export, compare a small result with a call you can see in Trellus. Confirm the date window, field order, units, and available transcript data.
The full Call Data API reference also covers filtered counts and duration totals, recording links, the complete field catalogue, and an OpenAPI starter.
Prefer an AI assistant?
Use Trellus with a compatible remote MCP app to ask questions about calls your account can read. Connect through the Trellus sign-in flow and approve access in your browser.
The reporting connector is read-only: it can read permitted call data, but cannot make calls or change your account. Client support and workspace policies determine whether you can add the connection.
Open the MCP setup guideStart with the guide for the platform your team already uses.