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

# 10DLC-Ablehnungen, Re-Vetting und der Nach-Genehmigungs-Lebenszyklus

> Dekodieren Sie einen rohen TCR- oder Carrier-Ablehnungscode in eine Fix-Karte, reichen Sie korrigierte Marken- und Kampagnen-Payloads erneut ein, fordern Sie bei Score-Blockaden ein Marken-Re-Vet an und lesen Sie die AT&T-Durchsatzklasse und die T-Mobile-Tagesobergrenzen-Stufe, die Ihre Marke tatsächlich hält.

# 10DLC-Ablehnungen, Re-Vetting und der Nach-Genehmigungs-Lebenszyklus

Der [10DLC-Registrierungsleitfaden](/guides/10dlc-registration) endet bei
„Versand beginnen". Dieser Leitfaden behandelt, was danach passiert — eine
Ablehnung mit einem kryptischen Code, ein Vetting-Score, der Ihren Durchsatz
deckelt, oder eine genehmigte Kampagne, deren Tagesobergrenze nicht mehr zu
Ihrem Volumen passt. Alles hier ist eine Kontrolle über Ihre eigenen
Registrierungen; Carrier- und Registry-Entscheidungen bleiben deren.

## Wo Ablehnungen herkommen

Eine Ablehnung ist eines von zwei Dingen, und der Unterschied entscheidet
alles, was Sie als Nächstes tun:

* **Registry-Ablehnungen (TCR und die CSPs, die ihn proxyen)** feuern während
  oder nach der Registrierungsprüfung — die Einreichung selbst wird
  verweigert. Diese erscheinen als `FAILED`-/`REJECTED`-Statusdatensätze mit
  einer `rejectionReason`-Zeichenfolge, an drei Stellen: dem **Einstellungen >
  Compliance > 10DLC**-Wizard, einer Dashboard-Benachrichtigung beim
  terminalen Übergang und dem `rejectionReason`-Feld auf
  `GET /api/v1/compliance/10dlc/campaigns/:id/status`.
* **Carrier-Ablehnungen (AT\&T, T-Mobile)** können nach TCR-Genehmigung
  landen, innerhalb der Carrier-`mnoStatuses`-Map — ein direktes
  Carrier-Audit auf der Marke, oder ein Carrier, der mit der
  CSP-Ebenen-Entscheidung nicht einverstanden ist.

Einige Codes werden **vor** jeder TCR-Entscheidung emittiert:
`DUPLICATE-BRAND` und der Kleinbuchstaben-`usecase`-Fehler sind
Einreichungszeit-Signale, keine Prüfungsphasen-Ergebnisse. Eine Ablehnung,
die der Wizard unmittelbar nach Ihrer Einreichung zeigt, fällt üblicherweise
in diese Klasse.

Zwei Ablehnungen sperren den Datensatz statt eine Korrektur anzufordern —
`BRAND-DCA-FAIL` und `DUPLICATE-BRAND` geben eine Fix-Karte mit
`resubmit_allowed: false` zurück, was bedeutet, dass die Marken-ID verbrannt
ist und der Fix eine frische Registrierung ist, nicht eine Bearbeitung.

## Einen rohen Ablehnungscode in eine Fix-Karte dekodieren

TCR und die CSPs geben Codes wie `30883`, `40016` und `EIN-MISMATCH` mit
einer einzeiligen Freitext-Begründung und ohne feldspezifische Korrektur
zurück. Die Remediation-Tabelle unter
[Troubleshooting: 10DLC-Kampagne abgelehnt](/troubleshooting/10dlc-campaign-rejection)
deckt die gängigen Fälle statisch ab; der Decoder-Endpunkt wendet denselben
Katalog auf jeden Code an — einschließlich Formulierungen und Codes, die die
Tabelle nicht auflistet.

`POST /api/v1/compliance/10dlc/decode-rejection`

Übergeben Sie den rohen `code`, plus den Freitext-`rejectionReason`, wenn Sie
ihn haben — der Freitext disambiguiert Codes, die auf mehrere Ursachen
mappen:

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/decode-rejection \
  -H "X-API-Key: $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "30883",
    "free_text": "Sample messages include prohibited SHAFT content"
  }'
```

**Antwort (`200 OK`):**

```json theme={null}
{
  "data": {
    "code": "30883",
    "title": "Content violation",
    "meaning": "Carrier (typically T-Mobile) determined the sample messages or use case describe content prohibited under 10DLC policy — SHAFT-C, gambling-without-license, loans without a registered FCRA disclosure, or messaging unrelated to the declared vertical.",
    "fix": "Rewrite sample messages to match the declared use case verbatim; remove SHAFT-C wording, shortener domains, and generic 'click here' CTAs. Re-state the opt-in moment in message_flow.",
    "resubmit_allowed": true,
    "category": "content",
    "field": "campaign.sample_message",
    "references": [
      "https://support.twilio.com/hc/en-us/articles/4424803542043",
      "https://www.csptcr.com/wp-content/uploads/2023/03/Campaign-Registry-Common-Rejections.pdf"
    ]
  },
  "meta": {
    "request_id": "req_dec001",
    "timestamp": "2026-09-01T09:00:00Z"
  }
}
```

Lesen Sie vier Felder von der Karte ab:

* **`fix`** — der einzelne höchstwahrscheinliche Korrekturschritt, in demselben
  Register, das der Ablehnungsbanner des Wizards verwendet.
* **`resubmit_allowed`** — das Urteil, das Ihren nächsten Aufruf entscheidet.
  `true`: die Payload korrigieren und dieselbe Marke oder Kampagne erneut
  einreichen. `false`: der Datensatz ist gesperrt; eine frische Registrierung
  starten.
* **`category`** — ein stabiler Bucket (`eligibility`, `content`, `identity`,
  `throughput`, `format`, `dca`, `unknown`) zur Gruppierung in Ihrer eigenen
  UI.
* **`field`** — der Wizard-Schritt, auf den sich der Fix bezieht
  (`campaign.sample_message`, `brand.ein`, …), sodass Sie den Operator zum
  richtigen Formular zurückdeep-linken können.

Der Decoder ist eine reine Regel-Engine — er speichert nichts, erstellt
nichts und normalisiert den Code für Sie: `TCR-30883`, `Twilio Error 30883`
und `ein_mismatch` lösen alle zu ihren kanonischen Einträgen auf. Ein nicht
erkannter Code gibt eine Karte der Kategorie `unknown` zurück, deren `fix`
Sie an Devotel-Compliance weiterleitet, sodass eine UI, die die Karte
rendert, niemals ein leeres Panel zeigt.

<Tip>
  Führen Sie den Decoder aus, bevor Sie Remediation laufen lassen. Wenn der
  `fix` der Karte eine Beispielnachricht oder Beschreibung umschreibt, führen
  Sie die korrigierte Payload durch den
  [Preflight-Linter](/guides/10dlc-registration#preflight-prüfung-ihrer-einreichung),
  bevor Sie erneut einreichen — er erfasst die Sekundär-Ablehnung, die der Fix
  oft einführt.
</Tip>

## Ausgearbeitetes Beispiel: 'Use-Case-Mismatch'

Ein Kampagnen-Status-Poll gibt zurück:

```json theme={null}
{
  "data": {
    "campaignId": "C9X27A",
    "status": "FAILED",
    "rejectionReason": "use case mismatch — samples describe promotional traffic filed under CUSTOMER_CARE"
  }
}
```

Die Begründungszeichenfolge nennt die Ursache, aber keinen TCR-Code. Der
Decoder arbeitet mit einem oder dem anderen, also übergeben Sie, was Sie
haben — den Freitext allein:

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/decode-rejection \
  -H "X-API-Key: $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code": "unknown", "free_text": "use case mismatch"}'
```

**Antwort — die `30898`-Karte:**

```json theme={null}
{
  "data": {
    "code": "30898",
    "title": "Use case mismatch with declared vertical",
    "fix": "Either change the brand's vertical to match the actual messaging, or pick a different use case that aligns with the brand identity (MARKETING / MIXED for promotional content).",
    "resubmit_allowed": true,
    "category": "eligibility",
    "field": "campaign.usecase"
  }
}
```

`resubmit_allowed: true` sagt korrigieren-und-erneut-einreichen. Reichen Sie
jetzt die korrigierte Kampagne gegen dieselbe Marke erneut ein — derselbe
Aufruf wie die Ersteinreichung, wie-für-wie erneut eingereicht:

```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": "B4D2E1",
    "usecase": "MARKETING",
    "description": "Acme sends weekend promotional offers to customers who opted in at checkout.",
    "sample_message": [
      "Acme: 20% off today at https://acme.com/sale. Reply STOP to unsubscribe."
    ],
    "message_flow": "Customers opt in at checkout and tick the SMS consent checkbox. Reply STOP to opt out.",
    "help_message": "Reply HELP for assistance or email support@acme.com.",
    "optout_message": "You have been unsubscribed and will receive no further messages."
  }'
```

Erwarten Sie dieselben 1–5 Werktage wie die Ersteinreichung; pollen Sie den
Status-Endpunkt oder beobachten Sie die Dashboard-Benachrichtigung.

## Ein zweites ausgearbeitetes Beispiel: 'SHAFT-Sample'

Dies ist dieselbe Schleife mit einer Inhaltsklasse-Karte. Eine Begründung wie
`"Sample 2 flagged: SHAFT sample"` dekodiert zu `30883` — Inhaltsverstoß —
mit `resubmit_allowed: true` und `field: "campaign.sample_message"`.
Schreiben Sie das beanstandete Sample um, um das deklarierte Vertical zu
nennen und die verbotene Formulierung zu entfernen, dann reichen Sie die
Kampagne wie-für-wie erneut ein. Der Punkt der Schleife: ein Decoder-Aufruf,
eine korrigierte Einreichung, und nichts davon hängt davon ab, welche
Formulierung TCR zurückgab.

## Re-Vet vs. Neuesreichung

Ablehnungen von Inhalten bedeuten Neuesreichung. Ein **niedriger
Vetting-Score** ist ein anderer Blocker — keine Korrektur an einer
Kampagnen-Payload repariert ihn, und er deckelt jede Kampagne auf der Marke,
nicht nur die unter Prüfung. Der Score entscheidet das Limit, also ist das
Mittel ein Re-Vet, nicht eine Neuesreichung.

`POST /api/v1/compliance/10dlc/brands/:id/revet`

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

**Antwort (`200 OK`):**

```json theme={null}
{
  "data": {
    "brandId": "B4D2E1",
    "status": "PENDING",
    "provider": "telnyx"
  },
  "meta": {
    "request_id": "req_rev004",
    "timestamp": "2026-09-01T09:30:00Z"
  }
}
```

`provider` nennt, welcher Registrar die Marke trägt; `status` ist der
aktualisierte Markenstatus, sobald das Re-Vet startet. Bevor Sie re-veten,
vollständigen Sie den Markendatensatz — EIN, rechtlicher Name abgeglichen mit
IRS-Aufzeichnungen, Website, Support-E-Mail auf Ihrer eigenen Domain — das
Re-Vet bewertet dieselben Informationen erneut, und ein unveränderter
Datensatz gibt einen unveränderten Score zurück.

Der Registrar ratenlimitiert Re-Vets (einmal sofort nach Registrierung, dann
einmal pro ungefähr drei Monate), sodass ein ratenlimitierter Aufruf 422 mit
dem Warte-bis-Text des Registrars zurückgibt — lesen Sie ihn, nicht in einer
Schleife erneut versuchen.

## Durchsatzplanung: Was der Score gewährt

Zwei Endpunkte wandeln den Vetting-Score in die Limits um, unter denen Sie
operieren.

`GET /api/v1/compliance/10dlc/brands/:id/vetting` gibt das rohe Ergebnis
zurück:

```json theme={null}
{
  "data": {
    "brandId": "B4D2E1",
    "provider": "telnyx",
    "vettingScore": 78,
    "vettingClass": "PASS",
    "vettedDate": "2026-08-30T12:00:00Z"
  }
}
```

`vettingScore: null` bedeutet, der EVP verarbeitet noch — rendern Sie
„Ausstehend", nicht `0`.

`GET /api/v1/compliance/10dlc/brands/:id/throughput` leitet die
Carrier-zugewiesenen Limits aus diesem Score ab:

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/compliance/10dlc/brands/B4D2E1/throughput?entity_type=PRIVATE_PROFIT&sent_today=9800" \
  -H "X-API-Key: $ORBIT_API_KEY"
```

**Antwort (`200 OK`):**

```json theme={null}
{
  "data": {
    "brandId": "B4D2E1",
    "provider": "telnyx",
    "vettingScore": 78,
    "vettingClass": "PASS",
    "vettedDate": "2026-08-30T12:00:00Z",
    "throughput": {
      "trust_score": 78,
      "provisional": false,
      "entity_type": "PRIVATE_PROFIT",
      "tmobile": {
        "tier": "HIGH",
        "daily_cap": 200000,
        "unlimited": false,
        "label": "High (200k message parts/day)"
      },
      "att": {
        "class": "A",
        "mpm": 600,
        "label": "Class A (600 MPM)"
      }
    },
    "consumption": {
      "daily_cap": 200000,
      "unlimited": false,
      "sent_today": 9800,
      "remaining": 190200,
      "percent_used": 5,
      "status": "ok"
    }
  }
}
```

* **`att.class`** — AT\&T weist eine Durchsatzklasse pro Kampagne zu, D→C→B→A
  (15 → 75 → 240 → 600 Nachrichten pro Minute), bei Trust-Score-Stufen 0/25/50/75.
* **`tmobile.tier`** — T-Mobile weist eine Tagesobergrenzen-Stufe pro Marke zu
  (2k / 10k / 40k / 200k / unbegrenzt), die jede Kampagne und Nummer auf der
  Marke abdeckt.
* **`entity_type`** (optionaler Query-Param) — Sole-Proprietor-Marken sind
  unabhängig vom Score auf der 2k-Stufe und Klasse D gedeckelt; übergeben Sie
  den registrierten Entity-Typ, damit die Ableitung den Sonderfall sieht.
* **`sent_today`** (optionaler Query-Param) — Message-Parts, die im aktuellen
  rollierenden 24h-Fenster bereits gesendet wurden. Wenn Sie ihn übergeben,
  meldet `consumption` Headroom vor der Silent-Filter-Zone: `ok` unter 80 %
  der Obergrenze, `warning` bei 80 %, `critical` bei 95 %, `exceeded` bei 100 %.

Beide Query-Params sind optional; `consumption` ist `null`, bis Sie
`sent_today` liefern.

### Re-Vet, oder die Stufe akzeptieren?

Verwenden Sie die `warning`-/`critical`-Schwellwerte als Signal. Wenn Ihr
Vordergrundvolumen konsistent im Warnband landet, planen Sie ein Re-Vet — es
ist ratenlimitiert, also verbrennen Sie es nur bei einer echten
Trajektorienänderung. Wenn die Decke die Tagesobergrenze statt der Klasse
ist, ist die Einschränkung pro Marke: Das Zuweisen weiterer Nummern zur
Kampagne hebt sie nicht an, aber ein `SOLE_PROPRIETOR`-Upgrade auf einen
vollständigen Markendatensatz tut es — das ist eine Entity-Typ-Änderung,
kein Re-Vet.

## Neuesreichung, Re-Vet: Was jede kostet

TCR erhebt pro Neuesreichung und pro Re-Vet eine neue Vetting-Gebühr
(typischerweise wenige USD), und Carrier behandeln jede Neuesreichung als
frische Prüfung — unabhängiges Timing von Ihren vorherigen Versuchen.

## Siehe auch

* [10DLC-Registrierungsleitfaden](/guides/10dlc-registration) — Marke →
  Kampagne → Genehmigung, Use-Case-Codes und die Durchsatzstufen-Tabelle
* [Troubleshooting: 10DLC-Kampagne abgelehnt](/troubleshooting/10dlc-campaign-rejection)
  — die statische Symptom → Ursache → Fix-Matrix, die der Decoder dieses
  Leitfadens anwendet
* [Pre-Submit-Linter](/guides/10dlc-registration#preflight-prüfung-ihrer-einreichung)
  — die korrigierte Payload vor der Neuesreichung durch Preflight laufen
  lassen
