Bring customer conversations into your workflow.
Read call history, customer-specific conversations, service outcomes, timing, ratings, and short-lived recording links through one focused REST API.
https://api.frecall.com/v1
Make your first request in minutes.
Generate a key from your manager workspace, keep it on a trusted server, then request the newest calls in your account.
Create an API key
Open Manager → Settings → Call API. The complete key is shown only once.
Store it as a secret
Use your backend environment or secret manager. Never embed the key in browser, Android, or iOS application code.
List your calls
Send the key as a Bearer token and follow the returned opaque cursor when another page is available.
curl "https://api.frecall.com/v1/calls?limit=20" \
-H "Authorization: Bearer $FRECALL_CALL_API_KEY"
One secret, tightly controlled.
Every protected endpoint expects an API key in the HTTP Authorization header.
Treat the key like a password. Frecall stores only its SHA-256 hash. Rotation revokes the previous key immediately.
- Scope
calls:readis always required - Recording
recordings:readis optional - Expiry30–365 days, controlled by you
- NetworkOptional server IP allowlist
Authorization: Bearer fc_live_...
Keys entered into the playground below remain in page memory only and disappear on refresh.
Explore a request before you write code.
Choose an endpoint, adjust its inputs, generate language examples, or run a real request with your key.
/v1/callsList calls
Returns calls across every room owned by the authenticated manager, newest first.
limitintegerItems per page. Default 20; maximum 50.
cursorstringOpaque cursor returned by the previous response.
/v1/customers/{customerId}/callsList customer calls
Returns only the conversations associated with one customer identifier. This is the recommended endpoint for customer-profile integrations.
customerIdstringRequired customer identifier used when joining Frecall.
limitintegerItems per page. Default 20; maximum 50.
cursorstringOpaque cursor for the next page.
/v1/calls/{callId}Get one call
Returns the complete six-field call object, including comments and recording metadata where available.
idCall-log identifiercustomerIdYour customer identifieragentAgent ID and display nametimingQueue, answer, and connected timesresultOutcome, rating, and call healthrecordingAvailability and file metadata/v1/calls/{callId}?includeRecording=trueRequest recording access
Creates a signed listening URL only when playback is requested. The URL expires after 30 minutes and requires the recordings:read scope.
Hold the signed URL in frontend memory only. Do not save it in Firestore, logs, analytics, or long-lived application state.
Move through history with opaque cursors.
When paging.hasMore is true, pass paging.nextCursor unchanged to the next request. Never decode, edit, or manufacture a cursor.
{
"paging": {
"nextCursor": "opaque-cursor",
"hasMore": true
}
}
Every duration has one clear meaning.
ringAtCustomer entered the queue.
assignedAtAn agent successfully claimed the call.
answeredAtBoth participants established LiveKit media.
endedAtThe call was successfully finalized.
durationSeconds measures connected talk time. Recording duration can differ by a few seconds because LiveKit Egress starts and finalizes separately.
Understand how the conversation finished.
Errors are predictable and actionable.
400invalid_cursorA pagination cursor is malformed.
401unauthorizedThe key is missing, invalid, or expired.
403forbiddenThe key lacks a required scope or IP access.
404not_foundThe endpoint or owned call does not exist.
429rate_limitedThe key exceeded 120 requests per minute.
{
"error": {
"code": "unauthorized",
"message": "A valid API key is required."
}
}
Designed for trusted server integrations.
Keys are scoped to one manager account and calls are returned only when their room belongs to that manager.
API v1
Added interactive documentation, OpenAPI 3.1, API discovery, request IDs, version headers, and rate-limit response headers. Existing endpoints and response fields remain unchanged.
Added private MP3 metadata and on-demand 30-minute signed listening URLs.