Skip to main content
A brand is the business behind your messages: its legal identity, tax ID, website and contact details. The US 10DLC registry verifies the brand before any campaign under it can be approved. One brand can own many campaigns.
Building with code? The full request and response for every call here are in the brand endpoints of the Messaging API.
In the console, brands live under SMS & RCS → Registration → Brands. This page covers the same flow through the API.
Have the registration checklist ready. The legal name, tax ID and address must match the entity’s official records exactly.

Brand fields

Send these fields on POST /10dlc/brands and on PUT /10dlc/brands/{id}. The PUT takes the full body, not a patch.

Registry values

The US 10DLC registry accepts these values. Vobiz passes them through as you send them.
AGRICULTURE, COMMUNICATION, CONSTRUCTION, EDUCATION, ENERGY, ENTERTAINMENT, FINANCIAL, GAMBLING, GOVERNMENT, HEALTHCARE, HOSPITALITY, HUMAN_RESOURCES, INSURANCE, LEGAL, MANUFACTURING, NGO, POLITICAL, POSTAL, PROFESSIONAL, REAL_ESTATE, RETAIL, TECHNOLOGY, TRANSPORTATION
PRIVATE_COMPANY, PUBLIC_COMPANY, NON_PROFIT, GOVERNMENT, SOLE_PROPRIETOR
VAT, CBN, PROVINCIAL_NUMBER, ABN, SIREN, NZBN, CIF, CNPJ, OTHER

Register a brand

1

Create the brand

POST /10dlc/brands creates the brand with stage: DRAFT. It is not submitted for review until you register it in the next step.
The response is 201 with the brand object. Keep id; every other call uses it.
2

Submit it to the registry

POST /10dlc/brands/{id}/register has no body. It returns 200 with the brand refreshed: stage becomes SUBMITTED and registrationStatus starts at PENDING.
3

Poll the registrar statuses

GET /10dlc/brands/{id}/registrar-statuses returns one entry per registrar:
registrar identifies the registrar that reported the state. brandIdentityStatus, brandAuthenticationStatus and rejectionReason appear only when the registrar has set them. An empty array means no registrar has reported yet. GET /10dlc/brands/{id} also refreshes the brand from the registry before returning it, so either call works for polling. The WebSocket 10dlc.brand.updated event tells you when the brand changes without polling.
4

Public companies: complete brand authentication

Brands with brandType: TENDLC_PUBLIC_COMPANY go through an extra authentication step. POST /10dlc/brands/{id}/brand-auth-verification starts it and returns 202 {"status": "requested"}. If the one-time code did not arrive, POST /10dlc/brands/{id}/resend-2fa sends it again, also 202 {"status": "requested"}. While the code is outstanding, registrationStatus reads PENDING_2FA.Calling either endpoint on another brand type returns 400 {"error": "invalid request: brand authentication is only available for TENDLC_PUBLIC_COMPANY brands"}.
5

Optional: request vetting to raise throughput

Registered brands start with a baseline message throughput. Vetting lets the registry assign a higher tier. POST /10dlc/brands/{id}/vet takes {"type": "STANDARD"}, ENHANCED or POLITICAL (default STANDARD; any other value is 400 {"error": "invalid request: type must be one of STANDARD, ENHANCED, POLITICAL"}). The 200 body is the vetting record as the registry returns it.GET /10dlc/brands/{id}/vets lists past vetting requests as {"results": [...], "paging": {"page", "size", "totalPages", "totalResults"}}. Pass page (0 or more) and size (0 to 100); other values return 400 {"error": "page must be >= 0 and size between 0 and 100"}.
Only request vetting with your own credentials, after you have confirmed any fee with support and established that your campaigns need the extra throughput.

Update or delete a brand

  • PUT /10dlc/brands/{id} replaces the brand with the full body you send, using the same fields as create. referenceId is ignored. Use it to fix a rejected brand before registering again.
  • DELETE /10dlc/brands/{id} returns 204. A brand that still owns campaigns returns 409 {"error": "conflict: brand still has 2 campaign(s); delete them first"}.
  • GET /10dlc/brands returns every brand on the account as an array, newest first.

The brand object

Fields you did not set are omitted. Three fields describe progress: When a registrar rejects the brand, rejectionReasons holds an array of {registrar, state, rejectionReason} entries. Fix the fields it names with PUT, then call register again.

Errors

All errors are {"error": "<message>"}. Responses that originate at the registry add providerError, an opaque diagnostic string you can quote to support. See the error reference for the full list.

Next steps

Create a campaign

Describe your use case and attach numbers to this brand.

Brand endpoints

Full request and response schemas.

Build it with the Messaging API

Brand endpoints

Create, register, verify and vet a brand.

WebSocket events

Get 10dlc.brand.updated as review progresses.

Send your first SMS

Send once your campaign is registered.

Errors

Registry errors and providerError.