Docs
Workspace

Connected senders

GEThttps://api.norreach.app/v1/senders

What the workspace can send from, per channel — email inboxes, verified domain senders, phone numbers (texting, AI calling, or voice only), WhatsApp numbers and LinkedIn seats — read exactly the way a campaign launch checks them, so channels.<channel>.ready: false is the reason a launch answers 409 no_sender. Connecting senders happens in the app.

workspace:readOperation id: list_senders
GET/senders
curl -X GET "https://api.norreach.app/v1/senders" \
  -H "Authorization: Bearer $NORREACH_API_KEY"
Connected senders
{
  "object": "senders",
  "channels": {
    "email": {
      "ready": true,
      "count": 1
    },
    "sms": {
      "ready": false,
      "count": 0
    },
    "call": {
      "ready": true,
      "count": 1
    },
    "whatsapp": {
      "ready": false,
      "count": 0
    },
    "linkedin": {
      "ready": false,
      "count": 0
    }
  },
  "data": [
    {
      "object": "sender",
      "kind": "email_inbox",
      "label": "email inbox",
      "address": "sales@acme.example",
      "name": null,
      "channels": [
        "email"
      ],
      "status": "connected",
      "verified": true,
      "voice_only": false,
      "ai_calling": null,
      "country": null
    },
    {
      "object": "sender",
      "kind": "phone_number",
      "label": "phone number",
      "address": "+46812345678",
      "name": "Stockholm office",
      "channels": [
        "call"
      ],
      "status": "connected",
      "verified": true,
      "voice_only": true,
      "ai_calling": true,
      "country": "SE"
    }
  ],
  "complete": true
}

Authorizations

Authorizationstringheaderrequired

Bearer authentication: send Authorization: Bearer <key>, with an API key or an OAuth access token. The key needs the scope workspace:read. API keys and scopes

Response

200application/json— Connected senders

object"senders"required
channelsobjectrequired
Show child attributes
channels.emailobjectrequired
Show child attributes
channels.email.readybooleanrequired
channels.email.countintegerrequired
channels.smsobjectrequired
Show child attributes
channels.sms.readybooleanrequired
channels.sms.countintegerrequired
channels.callobjectrequired
Show child attributes
channels.call.readybooleanrequired
channels.call.countintegerrequired
channels.whatsappobjectrequired
Show child attributes
channels.whatsapp.readybooleanrequired
channels.whatsapp.countintegerrequired
channels.linkedinobjectrequired
Show child attributes
channels.linkedin.readybooleanrequired
channels.linkedin.countintegerrequired
dataobject[]required
Show child attributes
data[].object"sender"required
data[].kindenumrequired
One of:email_inboxdomain_senderphone_numberwhatsapp_numberlinkedin_seat
data[].labelstringrequired

"email inbox", "domain sender", "phone number", "WhatsApp number" or "LinkedIn seat".

data[].addressstringrequired

The address, domain, number or seat name.

data[].namestring | nullrequired

What you called it, when you named it.

data[].channelsenum[]required

What it can send on now.

data[].statusstringrequired

connected / verified, or the seat's state (e.g. needs_attention).

data[].verifiedbooleanrequired
data[].voice_onlybooleanrequired

A number that can call but not text.

data[].ai_callingboolean | nullrequired

Numbers: connected to AI calling.

data[].countrystring | nullrequired
completebooleanrequired

false: a part couldn't be read just now — what's missing may be connected.

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