Call Analytics API documentation

API documentation

Call Analytics turns raw sales call recordings into a structured, scored intelligence report. Submit a call, we transcribe and analyze it, and you fetch back a machine-readable report you can route into a CRM, a coaching workflow, or an autonomous agent.

REST + JSON Bearer / X-Api-Key auth Outbound webhooks (HMAC) OpenAPI 3.1 llms.txt

Base URL

All API requests go to the versioned base URL on the api. subdomain:

https://api.callanalyticsapi.com/v1

The same endpoints are also served at https://api.callanalyticsapi.com/api/v1 (the canonical path that works on any host). The /v1 form shown throughout these docs is the clean alias for the api. subdomain.

The three surfaces

60-second quickstart

1. Submit a call. POST a recording URL and a few details. You get back a call_id and a processing_status_url.

curl -X POST https://api.callanalyticsapi.com/v1/calls \
  -H "Authorization: Bearer cc_3a91f8e2_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "external_call_id": "crm-8821",
    "rep_name": "Jordan Lee",
    "customer_name": "Acme Corp",
    "recording_url": "https://example.com/recordings/8821.mp3",
    "source_system": "my_app"
  }'

# 201 Created
{
  "call_id": 4127,
  "status": "received",
  "processing_status_url": "/api/v1/calls/4127",
  "report_url": null
}

2. Poll until the report is ready. Check report_status; once it is ready, a report_url appears.

curl https://api.callanalyticsapi.com/v1/calls/4127 \
  -H "Authorization: Bearer cc_3a91f8e2_your_api_key"

# 200 OK
{
  "call_id": 4127,
  "external_call_id": "crm-8821",
  "customer_name": "Acme Corp",
  "processing_status": "complete",
  "report_status": "ready",
  "overall_score": 78,
  "outcome": "follow_up_scheduled",
  "created_at": "2026-06-22T15:04:01Z",
  "report_url": "/api/v1/calls/4127/report"
}

3. Fetch the report.

curl https://api.callanalyticsapi.com/v1/calls/4127/report \
  -H "Authorization: Bearer cc_3a91f8e2_your_api_key"

# 200 OK
{ "call_id": 4127, "report": { "overall_score": 78, "summary": "...", ... } }

Prefer push over poll? Subscribe an endpoint to call.report_completed and we will POST the report to you when it is ready. See Webhooks.

Mock vs live

Every API key looks like cc_3a91f8e2_… (a cc_ prefix, a short public id, then a secret shown only once). Whether a submitted call is analyzed by the mock pipeline (deterministic placeholder reports, no AI credits) or the live OpenAI pipeline is a server-side setting, not a property of the key — so the request and response shapes are identical and you can build against the mock pipeline and flip to live with no code changes.

Keep reading