Get AI call analytics
https://api.norreach.app/v1/analytics/callsAI calls: how many, how many reached a person (connect rate), time on the phone, meetings booked on them, outcomes by status, sentiment, how many met their goal, credits used, and calls per day. Optionally for one campaign (campaign_id; another workspace's is 404). Over from–to (YYYY-MM-DD, UTC; default the last 30 days, at most 366 days). Read-only.
curl -X GET "https://api.norreach.app/v1/analytics/calls" \
-H "Authorization: Bearer $NORREACH_API_KEY"{
"object": "call_analytics",
"from": "2026-10-07",
"to": "2026-11-05",
"campaign_id": null,
"total": 120,
"connected": 46,
"connect_rate": 0.3833,
"total_duration_seconds": 9120,
"average_duration_seconds": 152,
"meetings_booked": 9,
"outcomes": [
{
"status": "completed",
"count": 41
},
{
"status": "no_answer",
"count": 52
},
{
"status": "voicemail",
"count": 22
},
{
"status": "transferred",
"count": 5
}
],
"sentiment": {
"positive": 21,
"neutral": 18,
"negative": 7,
"unknown": 74
},
"success": {
"analyzed": 46,
"successful": 19,
"rate": 0.413
},
"credits_used": {
"credits": 1824,
"exact": "1824"
},
"by_day": [
{
"date": "2026-11-04",
"calls": 12,
"connected": 5
}
],
"truncated": false
}Authorizations
Bearer authentication: send Authorization: Bearer <key>, with an API key or an OAuth access token. The key needs the scope analytics:read. API keys and scopes
Query parameters
First day (YYYY-MM-DD, UTC; default 29 days before to).
Last day (YYYY-MM-DD, UTC; default today).
Only this campaign's calls.
Response
200application/json— Get AI call analytics
First day (YYYY-MM-DD, UTC).
Last day (YYYY-MM-DD, UTC).
Calls that reached a person.
0..1 (four decimals); null when there is nothing to divide by.
Over calls that lasted; null when none did.
Meetings booked on these calls.
Calls per status, most first.
Show child attributesHide child attributes
Show child attributesHide child attributes
Show child attributesHide child attributes
Calls whose goal was met.
0..1 (four decimals); null when there is nothing to divide by.
An amount of credits.
Show child attributesHide child attributes
Whole credits (rounded half away from zero).
The exact amount as a decimal string — a per-minute charge can hold a fraction of a credit.
Show child attributesHide child attributes
true when a source held more rows than the people / per-day roll-ups read (10 000); the totals are exact counts either way.
Errors
Errors are application/problem+json with a stable code.
| Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | The request couldn't be read. |
| 400 | unknown_field | The request has a field this operation doesn't know. |
| 401 | unauthorized | A valid API key is required. |
| 403 | insufficient_scope | This API key doesn't have the scope this operation needs. |
| 403 | feature_not_enabled | The API isn't switched on for this workspace. |
| 404 | not_found | That doesn't exist. |
| 422 | validation_failed | The request has invalid fields. |
| 429 | rate_limited | Too many requests. Slow down and try again. |
| 500 | server_error | Something went wrong on our side. |
| 503 | unavailable | The API isn't available right now. Try again shortly. |