Skip to main content

Note de langue

Lorsqu’une traduction n’est pas disponible, le contenu anglais est affiché comme solution de repli. Conservez les codes d’erreur, les chemins d’API et les blocs de code.

Troubleshooting: TEN_DLC_NOT_REGISTERED on US SMS sends

Your SMS request returned HTTP 422 with code TEN_DLC_NOT_REGISTERED, or the send went through but carries a ten_dlc_advisory on the message metadata. Both point to the same finding: the pre-send gate found no approved TCR (The Campaign Registry) brand+campaign registration for the sending number. The full code table is in the messaging error codes reference; this page maps the gate’s verdict to the corrective step.
Since February 2025 every US carrier (AT&T, T-Mobile, Verizon) silently filters A2P SMS sent from an unregistered 10-digit long code (10DLC). The gate is protective: it stops you from paying for a message the carrier will drop.

Two ways the verdict surfaces

How the gate treats an unregistered sender depends on your tenant’s settings:
  • HTTP 422 TEN_DLC_NOT_REGISTERED — your tenant has strict enforcement enabled (Settings → Compliance → 10DLC). The send is rejected at the platform edge; no message row is created and no charge is made.
  • Advisory in the response — with strict enforcement off (the default), the send is handed to delivery anyway, and the verdict comes back as a structured ten_dlc_advisory on the message metadata:
The gate applies to SMS channel sends only, and only when the sender is a US 10-digit long code. It is a no-op for toll-free numbers (covered by the TFV gate), short codes, alphanumeric senders, the platform-default US number, and non-US recipients.

Diagnose the scope

Answer three questions before you touch anything:
  1. Which sender? The 422 error details and the advisory carry the masked sender in from. If you omit from, the pipeline resolves to the platform-default US number, which is registered at the platform level and exempt from this gate — so the flag only appears when you send from one of your own numbers.
  2. Is this sender in the 10DLC class? A US toll-free number routes through the TFV gate instead; a short code is registered upstream outside TCR. If the flagged sender you expect to be toll-free or a short code is being treated as a 10DLC, check the number format you sent — the gate classifies by the E.164 digits, not by what your inventory calls the number.
  3. Is any of your org’s campaigns approved? Read the status endpoint:
    The gate counts the org as registered only when at least one campaign id sits in a terminal-approved TCR state. A campaign at PENDING, FAILED, suspended, or never reconciled does not count.

Symptom → cause → fix

Choose the resolution path

Three legitimate resolutions, in order of preference:
  1. Register the sender. File a TCR brand + campaign for the number — the 10DLC registration guide walks the full flow (brand → campaign → approval, expected 1–5 business days). This is the durable fix and the only one that protects deliverability.
  2. Route through an exempt sender. Omit from to fall back to the platform-default US number, or move US traffic to a toll-free number (subject to TFV — see Toll-free TFV required) or a short code. Use this when you cannot finish registration yet and cannot afford carrier filtering.
  3. Keep strict mode of your own choosing. The advisory is a nudge, the 422 is a refuse. If you opted into strict enforcement previously and now want sends to dispatch with the advisory while registration proceeds, turn the toggle off; if you previously ran advisory and your compliance policy requires a hard block, turn it on.

What not to do

  • Do not keep retrying on the same verdict. The gate reads your org’s registration state; until an approved campaign exists the result is the same, and strict-mode retries just re-eat the 422.
  • Do not treat PENDING as passed. Expect the advisory/422 to clear only when a campaign is in a terminal-approved state — the gate never accepts a pending one.
  • Do not stop at “the campaign is approved” if one carrier still reads REVIEW/FAILED. The mnoStatuses map is per-carrier; hold traffic to any carrier still not approved until that entry flips. 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 an approved campaign in status but the verdict still flags your sends, or when the status endpoint shows no campaigns at all despite a submission that returned a campaign id. Include:
  1. Your tenant ID (dashboard → Settings → Organization, or organizationId on GET /api/v1/me).
  2. The masked sender from the error details.from (or the advisory’s from).
  3. The full GET .../campaigns/<id>/status response so support can see the reconciliation state.

See also