Docs
Analytics

Get AI call analytics

GEThttps://api.norreach.app/v1/analytics/calls

AI 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.

analytics:readOperation id: get_call_analytics
GET/analytics/calls
curl -X GET "https://api.norreach.app/v1/analytics/calls" \
  -H "Authorization: Bearer $NORREACH_API_KEY"
Get AI call analytics
{
  "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

Authorizationstringheaderrequired

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

fromstring (date)query

First day (YYYY-MM-DD, UTC; default 29 days before to).

tostring (date)query

Last day (YYYY-MM-DD, UTC; default today).

campaign_idstring (uuid)query

Only this campaign's calls.

Response

200application/json— Get AI call analytics

object"call_analytics"required
fromstringrequired

First day (YYYY-MM-DD, UTC).

tostringrequired

Last day (YYYY-MM-DD, UTC).

campaign_idstring (uuid) | nullrequired
totalintegerrequired
connectedintegerrequired

Calls that reached a person.

connect_ratenumber | nullrequired

0..1 (four decimals); null when there is nothing to divide by.

total_duration_secondsintegerrequired
average_duration_secondsinteger | nullrequired

Over calls that lasted; null when none did.

meetings_bookedintegerrequired

Meetings booked on these calls.

outcomesobject[]required

Calls per status, most first.

Show child attributes
outcomes[].statusstringrequired
outcomes[].countintegerrequired
sentimentobjectrequired
Show child attributes
sentiment.positiveintegerrequired
sentiment.neutralintegerrequired
sentiment.negativeintegerrequired
sentiment.unknownintegerrequired
successobjectrequired
Show child attributes
success.analyzedintegerrequired
success.successfulintegerrequired

Calls whose goal was met.

success.ratenumber | nullrequired

0..1 (four decimals); null when there is nothing to divide by.

credits_usedobjectrequired

An amount of credits.

Show child attributes
credits_used.creditsintegerrequired

Whole credits (rounded half away from zero).

credits_used.exactstringrequired

The exact amount as a decimal string — a per-minute charge can hold a fraction of a credit.

by_dayobject[]required
Show child attributes
by_day[].datestringrequired
by_day[].callsintegerrequired
by_day[].connectedintegerrequired
truncatedbooleanrequired

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.

StatusCodeMeaning
400bad_requestThe request couldn't be read.
400unknown_fieldThe request has a field this operation doesn't know.
401unauthorizedA valid API key is required.
403insufficient_scopeThis API key doesn't have the scope this operation needs.
403feature_not_enabledThe API isn't switched on for this workspace.
404not_foundThat doesn't exist.
422validation_failedThe request has invalid fields.
429rate_limitedToo many requests. Slow down and try again.
500server_errorSomething went wrong on our side.
503unavailableThe API isn't available right now. Try again shortly.