> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshooting: 10DLC campaign rejected

> Read a FAILED 10DLC campaign's rejectionReason, map the cause to the fix — brand vetting, EIN mismatch, use-case mismatch, lowercase use-case codes, missing opt-out language, political token — and resubmit without resetting your approved campaigns.

# 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](/guides/10dlc-registration); this page picks
up where it stops, at "rejected — see `rejectionReason`."

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

## Where rejections surface

A rejection shows up on the campaign record. Read it with the status
endpoint:

```bash theme={null}
curl https://api.orbit.devotel.io/api/v1/compliance/10dlc/campaigns/CXXXXXX/status \
  -H "X-API-Key: $ORBIT_API_KEY"
```

**Response (`status: "FAILED"`):**

```json theme={null}
{
  "data": {
    "campaignId": "CXXXXXX",
    "status": "FAILED",
    "rejectionReason": "Sample content does not match declared use case",
    "brandId": "BXXXXXX",
    "mnoStatuses": {
      "10017": "FAILED",
      "10035": "REVIEW",
      "10095": "REVIEW"
    }
  }
}
```

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.

<Note>
  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](/guides/10dlc-registration). SaaS
  customers on `api.orbit.devotel.io` do not manage this.
</Note>

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

| Symptom in `rejectionReason`               | Cause                                                                                                                                                                                | Fix                                                                                                                                                                                                                                                                                                                        |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| EIN / legal-name mismatch (brand level)    | The legal company name and EIN must match IRS records exactly, as a pair. "Acme Corp" on the form vs. "Acme Corporation Inc." in the tax record is a rejection, not a rounding error | Copy the legal name and EIN character-for-character from your IRS determination letter or SS-4 confirmation, correct the brand record, and resubmit the brand                                                                                                                                                              |
| Brand vetting incomplete (brand level)     | The brand record is missing identifying information — no EIN, no website, no full legal name — so the vetting score stays low or the review stalls on a manual pass                  | Complete the brand record: EIN, website, and full legal name at minimum. A more complete record also raises your vetting score, which sets your throughput tier                                                                                                                                                            |
| Use-case mismatch (campaign level)         | The sample messages and message flow do not match the declared `usecase` — e.g. promotional samples filed under `CUSTOMER_CARE`, or delivery updates filed under `MARKETING`         | Re-file the campaign with the use case that describes the actual traffic — one of `CUSTOMER_CARE`, `MARKETING`, `ACCOUNT_NOTIFICATION`, `DELIVERY_NOTIFICATION`, or `TWO_FACTOR_AUTH` — and make the samples representative of it. If the traffic genuinely mixes use cases, file `MIXED` and accept the reduced daily cap |
| Code rejected at submission                | The `usecase` value was sent lowercase. TCR codes are **uppercase** — `customer_care` is rejected at registration                                                                    | Send the code exactly as listed in the [use-case table](/guides/10dlc-registration) — `CUSTOMER_CARE`, not `customer_care`                                                                                                                                                                                                 |
| Missing opt-out language (campaign level)  | The `message_flow` or samples cover consent opt-in but never state how recipients opt out                                                                                            | Reference the STOP keyword explicitly in the flow and in at least one sample: "Reply STOP to unsubscribe." It must appear in narrative you control, not just be handled at send time                                                                                                                                       |
| `PUBLIC_SERVICE_ANNOUNCEMENT` rejected     | Public-interest announcements are restricted — only government entities and qualifying organizations can use this use case                                                           | Re-file under the use case your entity actually qualifies for (typically `CUSTOMER_CARE` or `ACCOUNT_NOTIFICATION`); a commercial brand cannot carry `PUBLIC_SERVICE_ANNOUNCEMENT` traffic                                                                                                                                 |
| `POLLING_AND_VOTING` / political rejection | Campaigns with a `usecase` of `POLITICAL_ADVOCACY` or `POLLING_AND_VOTING`, or flagged `is_political: true`, require a Campaign Verify `cv_token`                                    | Order a Campaign Verify token before you file, and pass it as `cv_token` on the campaign submission. A filing without the token rejects                                                                                                                                                                                    |

## 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:

   ```bash theme={null}
   curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/campaign \
     -H "X-API-Key: $ORBIT_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "brand_id": "BXXXXXX",
       "usecase": "CUSTOMER_CARE",
       "description": "Sending order updates and support responses to customers who opted in on our website checkout form.",
       "sample_message": [
         "Your order #12345 has shipped! Track at https://acme.com/track/12345. Reply STOP to unsubscribe.",
         "Hi! Your support ticket #567 has been resolved. Reply STOP to opt out."
       ],
       "message_flow": "Customers opt in via a web form at checkout and confirm consent. They can reply STOP at any time to opt out.",
       "help_message": "Reply HELP for assistance or contact support@acme.com.",
       "optout_message": "You have been unsubscribed and will receive no further messages."
     }'
   ```

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](/guides/10dlc-registration). 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](/troubleshooting/message-undelivered-failed)
  page covers the send-side symptoms when registered traffic still
  fails.

## When to escalate

Escalate to [support@devotel.io](mailto: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

* [10DLC registration guide](/guides/10dlc-registration) — the full
  brand → campaign → approval flow, use-case codes, and throughput tiers
* [Troubleshooting: message undelivered or failed](/troubleshooting/message-undelivered-failed)
  — the send-side page; a `rejected` message status on US traffic often
  traces back to the campaign state this page covers
* [Compliance troubleshooting: pending or gated surfaces](/compliance/troubleshooting-pending-gated-surfaces)
  — sender-registration gates beyond 10DLC
