Troubleshooting: Sender-ID registration rejected or expired
Traffic to a destination country is gated, and the country entry on your Sender ID readsrejected or expired instead of approved. Both states
are terminal: nothing moves the entry back to approved except a new
review. The fix for each is the same shape — find the cause for rejected
or time the window for expired, then re-submit — because the
POST /compliance/sender-id-registrations call is an upsert that resets
either state to pending without touching the approvals you already hold.
Registering in the first place is covered by
Sender-ID Registration; this page
picks up where it stops, at “fix the issue and re-submit.”
Approvals and rejections are decided by the carrier or regulator in each
country — Orbit submits your filing, syncs the verdict, and enforces what
comes back. Lead times below are expectations, not guarantees.
How the statuses move
Each country entry on a Sender ID walks one path:pending → approved → (rejected | expired) → re-submit → pending
Two properties of the upsert make re-submission safe at any point:
- Approved countries stay approved. Re-submitting an
approvedcountry keeps the approval and only refreshes the documents, provider reference, and notes on file. - Scope is per country. Re-submit the entry that needs it and nothing
else: the call keys on
sender_id, so include only the country entries you mean to change, or none at all to leave a registration untouched.
Rejected — find the cause, fix, resubmit
A rejection is per country: a multi-country registration can holdapproved on one market and rejected on the next. Rejections typically
land on the identity or the evidence, not the mechanics of the call —
reviewers decline a filing for what it says. These are the causes that
account for nearly every rejection:
The resubmission, step by step
-
Read the rejection against the failing country, not at the
registration level. List your registrations to confirm which country
entry holds
rejected:Locate the entry bysender_idandcountryin the response. Arejectedentry looks like: -
Fix the item the reviewer named. Replace stale documents (upload
the new file through
/compliance/documentsfirst — files are not uploaded here, only referenced), correct the Sender ID text, or rewrite the use-casenotes. The table above maps cause to fix. -
Re-submit the corrected entry. Same endpoint as the initial filing
— it is an upsert keyed on
(sender_id, country), so send only the country entries you corrected: -
The entry re-enters review at
pending. Expect the same lead time as the original filing. Your other countries — including Brazil if it was approved on a differentsender_id— do not move.
Expired — renew before the window closes
Anapproved entry carries an expires_at timestamp. When that window
closes the entry flips to expired and send-time gates start blocking
traffic to the country within the next moments after expiry — there is no
grace period, and the renewal is the same upsert as a fresh submission.
-
Read the expiry before it lands. List your registrations and sort
the
approvedentries byexpires_at:An entry nearing its window close reads: -
Start the renewal with the registry’s lead time in mind. Regulator
and carrier queues that took days to weeks on the original filing take
the same time on a renewal — begin while
expires_atis still that lead time away, not the week of. If the market’s rule level isrequired, an unrenewed expiry does not just risk blocking — traffic is held by the send-time gate until a new approval lands. Country Compliance Requirements marks each market’s level. -
Re-submit to renew. The same call resets an
expiredentry topending. Renewal is a good moment to attach current documents — reviewers can and do decline renewals on evidence that was valid when first filed but has since aged out: - A renewal is a new review. Treat it like the original: expect the same lead time, and do not assume approval is a formality because the first filing passed.
The
expires_at value belongs to the country’s registration entry,
not to a global deadline. Entries expire independently per market and
per Sender ID — a registration that covers BR and DE can renew one
while the other still has months to run.Track more than one Sender ID
Registrations are keyed on(organization, sender_id), so your account
typically holds several — a renewal queue of markets for the brand ID,
plus older IDs still on file. A few practices keep that row set readable:
- List first, per problem. Use the list endpoint above and filter to
the
sender_idandcountryyou are working before you re-submit. It catches the case where a second, forgotten registration holds the traffic gate you expected this one to hold. - Keep the Sender ID text consistent. Re-submitting a country on
MyBrandat a different length or casing —My-Brand,MYBRAND— creates a new registration with its own pending review, it does not correct the old one. Fix the text by naming the samesender_idverbatim. - Retire IDs you no longer use. A
sidreg_…row whose brand you have outgrown does not block traffic on its own — but leaving it unresolved means every Sender-ID Registration read-back carries stale entries that make the active set harder to scan.
When to escalate
Escalate to support@devotel.io when you have fixed the item the rejection named and the next verdict still fails on the same finding, or when anexpires_at window is inside two weeks and
no renewal has finished review. Attach:
- Your tenant ID (dashboard → Settings → Organization, or
organizationIdonGET /api/v1/me). - The
sender_idand the failing country code. - The exact prior status response — the entry’s
status,registered_at, andexpires_atfrom the list call — and what you changed on re-submit.
See also
- Sender-ID Registration — the lifecycle: register, list, and read the status per country
- Country Compliance Requirements — which markets gate on registration and what documentation they expect
- KYC Documents & the Compliance-Profile Lifecycle
— upload the
doc_…IDs your registrations reference, and renew them before they age out - Troubleshooting: 10DLC campaign rejected — the US 10DLC equivalent, where the verifier is a registry rather than a carrier queue