Troubleshoot sender resolution and pool errors
Every outbound message needs a sender, and Orbit checks for one before it accepts the send. Three error codes cover the whole failure family: the request named no sender at all, the request pointed at a pool that does not resolve, or your organisation has no usable sender on file. Match the code to its meaning before you retry — these are permanent rejects, so a blind retry loop returns the same code.Match the code to its meaning
SENDER_REQUIRED is a request-shape problem — fix the payload. The other
two are organisation state: the pool pointer or the sender inventory. A
retry without the matching fix burns rate-limit budget and re-enqueues
the same code.
Fix per code
SENDER_REQUIRED — the request named no sender
A send body must carry at least one sender selector. Sending without any
of them:
from— a number you own, a registered alphanumeric sender ID, or the shared platform sender.sender_pool_id— a pool the send rotates across.messaging_service_id— a service whose default pool supplies the sender.
from (for example "") counts as omitted and trips
the same code, so an empty-string fallback does not satisfy the gate.
The full precedence chain — a pool beats a bare from, and a
messaging_service_id fills in only when you named neither — is on
Sender resolution.
SENDER_POOL_NOT_FOUND — the pool pointer does not resolve
This request names a pool, but the id does not resolve to a pool row on
your organisation:
- Point at a real pool. List your pools with
GET /api/v1/messaging/sender-pools, copy the id of the pool you meant, and send again. The full endpoint table, including preview and health reads, is in the Sender pools guide. - Drop the pool. Pass
fromalone, or passsender_pool_idand let a different pool resolve. If the pool was deleted, any wiring that still points at it — a messaging service’s default pool, acountry_sender_poolsentry — will keep hitting this 404 until you repoint it.
422 SENDER_POOL_EMPTY — and is not this code.
NO_SENDER_CONFIGURED — the organisation has no sender to fall back to
When a send reaches the fallback chain — an inbox conversation without a
sticky sender, a campaign send, or a double-opt-in confirmation prompt —
and the chain is the only place a sender could come from, your
organisation must already own one. With no default sender and no active
phone number, the send rejects with HTTP 422:
- Register an alphanumeric sender ID — see Sender-ID registration.
- Claim or purchase a phone number — see Phone numbers.
- Set an organisation default sender for the channel so the fallback chain always has one to pick.
Reconcile the three codes
The distinction matters:
SENDER_REQUIRED is always a request fix,
SENDER_POOL_NOT_FOUND is a pointer fix, and NO_SENDER_CONFIGURED is
a one-time setup fix.
Related references
- Sender resolution — the full precedence
chain: pool over bare
from,messaging_service_idfills in only when you named neither, and the fallback order. - Sender pools — create pools, preview picks, and read per-member health.
- Error codes — the full sender-resolution error table.