Skip to main content

Troubleshooting: 10DLC campaign rejected

Your 10DLC campaign came back FAILED and the carriers still will not pass your traffic. This page maps the rejection cause to the corrective step and the resubmission path. The full registration flow — brand first, then campaign — is in the 10DLC registration guide; this page picks up where it stops, at “rejected — see rejectionReason.”
Approval and rejection decisions are The Campaign Registry’s and the carriers’ call, not Orbit’s — Orbit submits, syncs the verdict, and enforces what comes back. Lead times here are expectations from current TCR behaviour, not guarantees.

Where rejections surface

A rejection shows up on the campaign record. Read it with the status endpoint:
Response (status: "FAILED"):
Three things to read before you touch anything:
  • status — the CSP-level verdict. FAILED means the registry or a reviewer refused the filing. PENDING is still in review; do not treat a long PENDING as a rejection.
  • rejectionReason — the reviewer’s own finding, verbatim from the registry (“EIN does not match”, “sample content does not match declared use case”). Read it literally: it names the specific item to fix, not a generic error class.
  • mnoStatuses — the per-carrier map (keys are MNO carrier ids). A campaign can be APPROVED at the CSP level while one carrier still holds REVIEW or FAILED — that is a carrier-specific problem, not a do-over of the whole filing.
The same verdict also lands in the dashboard’s Settings > Compliance > 10DLC section and as a notification on every terminal transition, so you do not have to poll.
Platform operators on self-hosted deployments: the registry-side country ruleset that governs sender types and registration requirements is kept current by the iconectiv TCR partner-feed connector — a read-only metadata feed, never a send path. If your tenant sees rejection categories the docs do not list, confirm the feed is configured; see Country-Rule Feed Configuration in the 10DLC registration guide. SaaS customers on api.orbit.devotel.io do not manage this.

Symptom → cause → fix

Work the table until rejectionReason matches a row. The causes below cover the failure modes that make up nearly every 10DLC rejection.

Fix and resubmit

A rejection is scoped to the brand or campaign that failed — fixing and resubmitting it does not touch your brand’s vetting score or any already-approved campaigns.
  1. Fix the named item. Use the table above. Brand-level rejections (EIN, vetting completeness) need a corrected brand submission; campaign-level ones (use case, samples, opt-out language, token) need a corrected campaign submission against the same brand.
  2. Resubmit. Campaign submission is the same call as the initial filing, with the corrected fields:
  3. Read the new verdict. A resubmission starts a fresh review cycle — expect the same 1–5 business days as the initial filing. Poll the status endpoint above or watch the dashboard notification; the FAILED state clears when the new verdict lands.

Raise your vetting score while you are here

If the rejection was vetting-related, fix the score itself, not only the flag: complete the brand record (EIN, website, full legal name, stock symbol if public). A vetting score of 75 or higher moves you from the ~30,000 messages/day-per-number baseline to the ~2,000,000 Top Tier cap — the throughput tiers are in the 10DLC registration guide. The score carries across every campaign on the brand, so this is the one fix that pays off on all future filings.

What not to do

  • Do not resubmit the same body unchanged. A rejected body resubmitted as-is earns a faster second rejection — the reviewer named what to fix in rejectionReason; fix that specific item.
  • Do not treat CSP-level APPROVED as the all-clear. Read mnoStatuses and hold traffic to any carrier still in REVIEW or FAILED until that entry flips.
  • Do not route around the rejection by sending anyway. Unregistered traffic on US 10DLC gets carrier-filtered, surcharged, and throttled — the rejection is the gate, not a warning. Fix the gate; the message undelivered or failed page covers the send-side symptoms when registered traffic still fails.

When to escalate

Escalate to support@devotel.io when you have fixed the item rejectionReason named and the next verdict still fails the same way, or when the reason does not map to any row in the table. Include:
  1. Your tenant ID (dashboard → Settings → Organization, or organizationId on GET /api/v1/me).
  2. The campaign id (C…) and brand id (B…).
  3. The verbatim rejectionReason string from the status response.

See also