---
title: "Submit 10DLC brand for review"
method: POST
path: "/v1/10dlc/brands/{brandId}/submit"
tags: ["10DLC"]
---

# Submit 10DLC brand for review

`POST /v1/10dlc/brands/{brandId}/submit`

## Request

- Base URL: `https://api.zavu.dev`
- URL: `https://api.zavu.dev/v1/10dlc/brands/{brandId}/submit`
- Auth: HTTP bearer

Submit a draft brand to The Campaign Registry (TCR) for vetting. The brand must be in draft status, and the team must have an approved Business Verification (KYB) — carriers register a brand against a vetted legal entity, so submitting without one returns `403` with code `kyb_required`.

TCR's one-time $4 brand registration fee is charged from your balance at submission (passed through at cost) and refunded if the carrier rejects the registration. The fee is per BRAND: a team registering a second legal entity pays it again. A brand already paid for through the compliance flow is not charged twice. Campaign registration is billed separately when a campaign is submitted.

## Path parameters

- `brandId` string, required

## Response `200`

Brand submitted for review.

- TenDlcBrandResponse
  - `brand` TenDlcBrand, required
    - `id` string, required
    - `entityType` 'PRIVATE_PROFIT' | 'PUBLIC_PROFIT' | 'NON_PROFIT' | 'GOVERNMENT' | 'SOLE_PROPRIETOR', required: Business entity type for 10DLC brand registration.
    - `displayName` string, required: Display name of the brand.
    - `companyName` string, nullable: Legal company name.
    - `ein` string, nullable: Employer Identification Number (EIN).
    - `firstName` string, nullable
    - `lastName` string, nullable
    - `email` string, email, required
    - `phone` string, required: Contact phone number in E.164 format.
    - `street` string, required
    - `city` string, required
    - `state` string, required
    - `postalCode` string, required
    - `country` string, required: Two-letter ISO country code.
    - `website` string, uri, nullable
    - `vertical` string, required: Industry vertical.
    - `stockSymbol` string, nullable
    - `stockExchange` string, nullable
    - `status` 'draft' | 'pending' | 'verified' | 'unverified' | 'rejected' | 'failed', required: Status of a 10DLC brand registration. - `draft`: created, not yet submitted to the carrier. - `pending`: submitted, awaiting the carrier's answer. - `verified`: the carrier registered the brand AND verified the business behind it. - `unverified`: the carrier registered the brand but did not verify the business — the registration exists, the identity check did not pass or has not been resolved. Campaigns are allowed, with lower daily limits. Read `identityStatus` for the carrier's own wording. - `rejected`: refused by the carrier. - `failed`: the registration never reached the carrier; the fee is refunded.
    - `identityStatus` string, nullable: The carrier's raw identity verdict on the business, as the carrier spells it (`VERIFIED`, `VETTED_VERIFIED`, `SELF_DECLARED`, `UNVERIFIED`). Null while the identity has not been resolved — which is not the same as verified, and is why such a brand reports `status: unverified`.
    - `brandScore` integer, nullable: Trust score assigned by TCR after vetting.
    - `brandRelationship` string, nullable
    - `failureReason` string, nullable: Reason for rejection, if applicable.
    - `submittedAt` string, date-time, nullable
    - `verifiedAt` string, date-time, nullable
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required

## Other responses

- `400`: Brand already submitted or invalid status, or it lacks an EIN, which every entity type except `SOLE_PROPRIETOR` needs to register (`invalid_request`, nothing charged). Or the carrier refused the registration (`invalid_request`, with the carrier's reason in `message`). On a refusal the fee is refunded and the brand stays `draft`, so it can be corrected and submitted again.
- `401`: Unauthorized.
- `403`: Business verification (KYB) is not approved. Carriers register 10DLC against a vetted legal entity, so registration is blocked until it is.
- `404`: Brand not found.

## Changes

> 80 revisions in range; 1 not diffed.

- **2026-08-20** `39259ea9d4c3`: 1 info
  - added the non-success response with the status `403`
- **2026-03-17** `dca8af164271`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/changes/v1/10dlc/brands/:brandId/submit/post.md)

---

[API](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api.md) - [All operations](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/revisions/75bc777b0ffb?raw)
