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

# Vobiz Messaging Compliance - 10DLC, Toll-Free and DLT

> Why messaging registration matters, which registration path applies to each type of Vobiz number (US 10DLC, US toll-free, India DLT), what to prepare before you submit, how to track review status, and how to fix common rejections.

Registering who you are and what you send is part of sending application-to-person (A2P) messages. US carriers filter and block A2P traffic from unregistered numbers, and Indian operators only pass commercial SMS that carries valid DLT identifiers. Vobiz exposes the registration flows as API resources and in the console under **SMS & RCS → Registration**, so you can complete them from code or from the dashboard.

<Tip>
  Building with code? Registration runs entirely through the [Messaging API](/docs/sms/overview) - see the [registration endpoints](/docs/sms/api/10dlc/create-brand).
</Tip>

<CardGroup cols={2}>
  <Card title="US 10DLC brands" icon="building" href="/docs/sms/compliance/us-10dlc-brands">
    Register your business with the US 10DLC registry.
  </Card>

  <Card title="US 10DLC campaigns" icon="bullhorn" href="/docs/sms/compliance/us-10dlc-campaigns">
    Describe your use case, attach local numbers, go live.
  </Card>

  <Card title="US toll-free verification" icon="phone" href="/docs/sms/compliance/us-toll-free">
    Verify 8XX numbers without a brand record.
  </Card>

  <Card title="India DLT" icon="id-card" href="/docs/sms/compliance/india-dlt">
    Pass your TRAI DLT entity, header and template IDs on every message.
  </Card>
</CardGroup>

## Why registration matters

* **United States.** Carriers require every business sending to US mobile numbers to be known to the 10DLC registry (for local numbers) or verified (for toll-free numbers). Traffic from numbers with no registration is filtered, and the message record ends in `status: failed` with a carrier error code.
* **India.** TRAI requires commercial SMS to carry a registered Principal Entity ID, sender header and template ID. Operators reject messages whose content does not match a registered template.
* **Everywhere else.** Requirements vary by country. Check the `registration` fields on [`GET /coverage/{country}`](/docs/sms/api/coverage/get-coverage) before you send to a new destination.

## Which path applies to your number

| Number or destination | What to do | Where |
| - | - | - |
| US local (10-digit) number | Create a brand, register it, create a campaign under the brand, register the campaign, add the number to the campaign | [Brands](/docs/sms/compliance/us-10dlc-brands), [Campaigns](/docs/sms/compliance/us-10dlc-campaigns) |
| US toll-free (8XX) number | Submit a toll-free verification with the number attached | [Toll-free](/docs/sms/compliance/us-toll-free) |
| Indian recipients | Register on a TRAI DLT portal, then send `dltEntityId`, `dltHeaderId` and `dltTemplateId` with each message | [India DLT](/docs/sms/compliance/india-dlt) |
| Other countries | Read `registration.required`, `registration.informationRequired` and `registration.documentsRequired` on the coverage detail for that country, then contact support if registration is required | [Coverage](/docs/sms/api/coverage/get-coverage) |

<Tip>
  The [Numbers guide](/docs/sms/numbers) explains how a number's `registration` object tells you which path it is on and how far along it is.
</Tip>

## Registration checklist

Reviewers check that the business is real, that recipients agreed to receive messages, and that the message content matches what you declared. Have the following ready before you create a brand or campaign:

* **A live website** on the domain you declare in `website`, with a reachable **privacy policy** and **terms of service**. The URLs you pass in `privacyPolicyUrl` and `termsAndConditionsUrl` must open.
* **Legal identity.** The exact legal name, the tax ID (EIN for US companies, or the equivalent for your country of registration), the issuing country and the registered address. The values must match the official records for the entity.
* **A clear opt-in flow.** Where and how a person gives consent: a web form with an unchecked SMS consent checkbox, a keyword, a verbal script or a paper form. Keep screenshots of the form and the exact consent text. You describe this in `optIns` and can upload images as supporting documents.
* **Sample messages** that look like what you will send. Each sample should start with your brand name and include opt-out language such as "Reply STOP to opt out, HELP for help".
* **Keyword responses.** The text you send back on STOP (`stopMessage`), HELP (`helpMessage`) and after opt-in (`confirmationMessage`).
* **A support contact.** A monitored email (`customerCareEmail`) and phone number (`customerCarePhone`).

<Note>
  Review is carried out by the US 10DLC registry and the carriers, not by Vobiz. It takes time, and the time varies with the brand type, the use case and the reviewer's queue. Submit early, before you need to send.
</Note>

## How review works

<Steps>
  <Step title="Create the record">
    `POST /10dlc/brands`, `POST /10dlc/campaigns` or `POST /10dlc/campaigns/toll-free` stores a draft on your account. Nothing is submitted yet, so you can correct fields with `PUT`.
  </Step>

  <Step title="Register">
    `POST .../register` submits the record to the registry. The `stage` moves from `DRAFT` to `SUBMITTED` (brands) or into the review stages (campaigns).
  </Step>

  <Step title="Wait and poll">
    Poll the status endpoints below, or subscribe to `10dlc.brand.updated` and `10dlc.campaign.updated` on the [WebSocket](/docs/sms/websocket) to be told when something changes.
  </Step>

  <Step title="Act on the result">
    Approved: add numbers and send. Rejected: read `rejectionReasons`, fix the record, and register again or appeal.
  </Step>
</Steps>

## Tracking status

| Resource | Endpoint | What you read |
| - | - | - |
| Brand | [`GET /10dlc/brands/{id}`](/docs/sms/api/10dlc/get-brand) | `stage`, `registrationStatus`, `brandIdentityStatus`, `rejectionReasons` |
| Brand, per registrar | [`GET /10dlc/brands/{id}/registrar-statuses`](/docs/sms/api/10dlc/brand-registrar-statuses) | One entry per registrar with `state`, `brandIdentityStatus`, `brandAuthenticationStatus` and `rejectionReason` |
| Campaign | [`GET /10dlc/campaigns/{id}`](/docs/sms/api/10dlc/get-campaign) | `stage` and `rejectionReasons` |
| Campaign, per carrier network | [`GET /10dlc/campaigns/{id}/network-statuses`](/docs/sms/api/10dlc/campaign-network-statuses) | The carriers' individual review states as returned by the registry |
| Number | [`GET /numbers`](/docs/sms/api/numbers/list-numbers) | The `registration` object on each number |

Every number on [`GET /numbers`](/docs/sms/api/numbers/list-numbers) carries a `registration` object that summarises the campaign it is attached to:

```json theme={null}
{
  "e164": "+14155550100",
  "tollFree": false,
  "registration": {
    "kind": "10dlc",
    "status": "approved",
    "campaignId": "9b2e1c40-8a3d-4f5e-9c1a-7d6b2e8f4a01",
    "campaignName": "Account alerts",
    "stage": "REGISTERED"
  }
}
```

| `registration.status` | Meaning |
| - | - |
| `not_registered` | The number needs registration and is not attached to any campaign yet |
| `draft` | Attached to a campaign that has not been submitted |
| `pending` | The campaign is under review |
| `approved` | The campaign is registered; the number can send A2P traffic |
| `rejected` | The campaign was rejected; read `rejectionReasons` on the campaign |
| `not_required` | No registration applies to this number |

`registration.kind` is `10dlc`, `toll_free` or `none`.

## Common rejection reasons and fixes

<AccordionGroup>
  <Accordion title="Missing or unclear opt-in evidence">
    The reviewer could not see how a recipient agrees to receive messages. Describe the flow precisely in `optIns` (URL and the exact call-to-action text), upload a screenshot of the consent form with [`POST /10dlc/documents`](/docs/sms/api/10dlc/upload-document) and reference it in `supportingDocuments`. For toll-free, put the screenshot URLs in `optInImageURLs`.
  </Accordion>

  <Accordion title="Sample messages without brand name or STOP language">
    Every entry in `exampleMessages` should begin with your brand name and end with opt-out instructions, for example `Acme: Your order #1234 has shipped. Reply STOP to opt out.`
  </Accordion>

  <Accordion title="Website does not match the business">
    The domain in `website`, the brand name on the site and the legal name on the tax record should refer to the same business. If you trade under a different name, put it in `businessDba` and keep `legalName` as registered.
  </Accordion>

  <Accordion title="Wrong vertical or tax ID">
    `vertical` should describe the business, not the message content. `taxId` and `taxIdIssuingCountry` must match the official registration exactly. A mismatch leaves `brandIdentityStatus` unverified and blocks campaign approval.
  </Accordion>

  <Accordion title="Missing privacy policy or terms">
    `privacyPolicyUrl` and `termsAndConditionsUrl` must resolve to pages that state how you handle phone numbers and that you do not share them with third parties for marketing.
  </Accordion>

  <Accordion title="Campaign attached to an unverified brand">
    A campaign cannot be approved while its brand is still pending or rejected. Fix the brand first, confirm `registrationStatus` is `ACTIVE`, then register the campaign again.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Register a 10DLC brand" icon="building" href="/docs/sms/compliance/us-10dlc-brands">
    Start here for US local numbers.
  </Card>

  <Card title="Numbers" icon="hashtag" href="/docs/sms/numbers">
    Buy numbers and read their registration state.
  </Card>

  <Card title="Error reference" icon="triangle-exclamation" href="/docs/sms/errors">
    Status codes and the `providerError` diagnostic.
  </Card>

  <Card title="WebSocket events" icon="bolt" href="/docs/sms/websocket">
    Live `10dlc.brand.updated` and `10dlc.campaign.updated` events.
  </Card>
</CardGroup>

## Build it with the Messaging API

<CardGroup cols={2}>
  <Card title="Messaging API overview" icon="code" href="/docs/sms/overview">
    Base URL, authentication and every endpoint.
  </Card>

  <Card title="Send your first SMS" icon="rocket" href="/docs/sms/quickstart">
    Send once your number is registered.
  </Card>

  <Card title="Registration endpoints" icon="shield-check" href="/docs/sms/api/10dlc/create-brand">
    Brands, campaigns, toll-free and documents by API.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/docs/sms/errors">
    Registry rejections and how they surface.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.