Skip to main content
The 10DLC endpoints register your business and your messaging programs with the US 10DLC registry, so US carriers deliver your application-to-person traffic. A brand describes the business that sends messages. A campaign describes one messaging program that runs under a brand and lists the numbers that send it. Toll-free verification uses the same campaign resource, with the business details inside the request instead of a brand. All paths are relative to https://api.vobiz.ai/api/v1/sms and take the X-Auth-ID and X-Auth-Token headers.
Registering a brand or campaign, vetting a brand, appealing and deregistering all submit your business to the US 10DLC registry for review. Run them only with your own credentials, with accurate business details, and when you intend to submit.

The brand object

Optional fields are omitted from the response when they are empty.

The campaign object

Endpoints

Brands

Campaigns

Documents

Registration lifecycle

1

Create the brand

POST /10dlc/brands with at least name and brandType. The brand starts in DRAFT.
2

Register the brand

POST /10dlc/brands/{id}/register moves it to SUBMITTED. registrationStatus starts at PENDING and settles at ACTIVE or REJECTED. A TENDLC_PUBLIC_COMPANY brand also completes brand authentication and shows PENDING_2FA until its business contact does.
3

Create and register a campaign

Upload any documents, then POST /10dlc/campaigns with name and brandId. The campaign starts in DRAFT. POST /10dlc/campaigns/{id}/register submits it, and stage moves through review until it reaches REGISTERED or REJECTED.
4

Attach numbers and check the networks

Attach sending numbers with POST /10dlc/campaigns/{id}/numbers, then use GET /10dlc/campaigns/{id}/network-statuses to see which carriers have provisioned the campaign.
If a campaign is rejected, read rejectionReasons, fix it with PUT /10dlc/campaigns/{id} and either register it again or file an appeal. To follow changes without polling, listen for the 10dlc.brand.updated and 10dlc.campaign.updated events on the WebSocket.

Behaviour to know

  • Retrieves refresh from the registry. GET /10dlc/brands/{id} and GET /10dlc/campaigns/{id} refresh the record from the registry before returning it. lastSyncedAt shows when that last succeeded. The list endpoints return the stored records without a refresh.
  • Lists are bare arrays. GET /10dlc/brands and GET /10dlc/campaigns return every record, newest first, with no pagination. GET /10dlc/brands/{id}/vets is the one paged list: page from 0 and size from 0 to 100 (default 20).
  • Idempotent creates. Pass a referenceId on brand and campaign creates. A retry with the same value, for example after a 502, reconciles to the same record.
  • Updates replace. PUT on a brand or campaign replaces the whole object, so send every field you want to keep. name (and brandType for brands) is required on every update. PUT applies to 10DLC campaigns; a toll-free campaign returns 400.
  • Delete order. A brand with campaigns returns 409. Deregister registered campaigns, delete the campaigns, then delete the brand.
  • Registry pass-through. Vetting records, priority options, network statuses and campaign numbers come straight from the registry, so read the fields you need and ignore the rest.

Errors

Every error is a JSON object with an error message. When the registry is involved, the body also carries providerError, an opaque diagnostic string you can quote to support.

Example: create a brand

cURL
201 Created

Compliance overview

Which registration your traffic needs.

Register a 10DLC brand

Step-by-step brand registration and vetting.

Register a 10DLC campaign

Campaign fields, review and attaching numbers.

Toll-free verification

Verify toll-free numbers for messaging.

WebSocket events

Get brand and campaign updates as they happen.

Errors

Error format and status codes across the API.