Skip to main content

Troubleshoot strict sender-ID mode rejects

Strict sender-ID mode re-checks every outbound alphanumeric sender against the destination country’s format, prefix, and length rules before the send is submitted and rejects a violation with 422 SENDER_INVALID_FOR_DESTINATION. This page decodes every rule code the rejection can carry and shows the fix for each — read the code out of the error’s details.rule field before retrying, because a blind retry re-burns the same code.

Gate the control

The mode is an opt-in, tenant-owned toggle — it lives on the sms_sender_id_strict key in your organization’s settings and defaults to off (permissive). Flip it via the dashboard sender-ID settings or through support. Turning it on re-applies the full destination-country rule set pre-send, so sends that used to pass with an advisory now fail closed. That is the behavior you asked for — the page decodes which rule fired.

Decode the rule code

A strict-mode rejection carries the violating rule in details.rule, the destination country in details.country, the offending sender in details.sender, and — for prefix violations — the matched prefix in details.matchedPrefix. Other codes in the format family — too_long, too_short, invalid_chars, wrong_alpha_only, wrong_numeric_only — follow the same pattern: the rejection names the country and the sender, so adjust the sender value on the failing send path.
SMS is billed when it is submitted to the network, not on delivery, and a carrier reject is not refunded. In permissive mode the same violating send is accepted and the wallet is charged — the pre-send 422 exists to stop that spend.

Incoming state: mode off vs mode on

Permissive advisories are informational only; strict mode blocks before any wallet deduction.

Revert the mode

Disable the mode the same way you enabled it — clear the sms_sender_id_strict key on your organization settings (dashboard sender-ID settings, or support). Permissive behavior resumes immediately: non-conforming sends are accepted again and violations return as advisory metadata. There is no migration or cooldown.

Reproduce and fix each code

A violating request in strict mode hits the 422 on the same endpoint you sent to. The examples below assume strict mode is on.

wrong_length_exact — an 8-character sender to India

Fix: set from to a 6-character alphabetic header, for example MYBRND, or route the destination through a sender pool whose members conform — see sender pools.

restricted_prefix — a BANK* sender to Turkey

Fix: rename the sender to drop the reserved prefix (NOWBANK passes; the check matches the start of the sender). If the brand genuinely needs the prefix, register it through the country’s regulator channel — see sender-ID registration.

leading_trailing_space — whitespace at the boundary

Fix: trim the sender before sending — internal spaces are fine, boundary spaces are not.

Alpha-unsupported destination

For US/Canada recipients, strict mode raises a 400 instead:
Fix: send US/CA traffic from a phone number or short code; the implicit fallback without strict mode swaps to a platform number, but explicit is safer — see sender resolution.

Lens+: this is a tenant-owned control

Like suppression and opt-out gating, the sender-ID rule set is a control you own — Orbit does not mandate it (see Compliance posture FAQ). Enabling strict mode trades a permissive accept against a pre-send reject; disabling it trades back. Neither choice changes what carriers enforce — it only moves the reject from the carrier’s DLR back to your API response.