Docs
Analytics

Get analytics per channel

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

Per channel (email, SMS, WhatsApp, LinkedIn): messages sent, replies, the different people reached and who wrote back, and the reply rate (people who replied / people reached). Over from–to (YYYY-MM-DD, UTC; default the last 30 days, at most 366 days). Read-only.

analytics:readOperation id: get_channel_analytics
GET/analytics/channels
curl -X GET "https://api.norreach.app/v1/analytics/channels" \
  -H "Authorization: Bearer $NORREACH_API_KEY"
Get analytics per channel
{
  "object": "channel_analytics",
  "from": "2026-10-07",
  "to": "2026-11-05",
  "channels": [
    {
      "channel": "email",
      "messages_sent": 1500,
      "replies": 70,
      "people_reached": 520,
      "people_replied": 52,
      "reply_rate": 0.1
    },
    {
      "channel": "sms",
      "messages_sent": 210,
      "replies": 18,
      "people_reached": 90,
      "people_replied": 13,
      "reply_rate": 0.1444
    },
    {
      "channel": "whatsapp",
      "messages_sent": 80,
      "replies": 9,
      "people_reached": 30,
      "people_replied": 6,
      "reply_rate": 0.2
    },
    {
      "channel": "linkedin",
      "messages_sent": 40,
      "replies": 0,
      "people_reached": 0,
      "people_replied": 0,
      "reply_rate": null
    }
  ],
  "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).

Response

200application/json— Get analytics per channel

object"channel_analytics"required
fromstringrequired

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

tostringrequired

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

channelsobject[]required
Show child attributes
channels[].channelenumrequired
One of:emailsmswhatsapplinkedin
channels[].messages_sentintegerrequired

Messages that went out (queued, sent, delivered, read).

channels[].repliesintegerrequired

Messages that came in.

channels[].people_reachedintegerrequired

Different people messages went out to.

channels[].people_repliedintegerrequired

Different people who wrote back.

channels[].reply_ratenumber | nullrequired

people_replied / people_reached (0..1).

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