A2P 10DLC Brand
Your business identity, registered once per account.
A2P 10DLC Campaign
The per-use-case registration on top of a brand.
Toll-Free Verification
The per-number verification for toll-free SMS.
Local 10DLC numbers need brand + campaign; toll-free numbers need TFV. You don’t need both for the same channel.
Status Badges
Every brand, campaign, and TFV row carries a status badge. The vocabulary is unified across A2P and TFV.Under review (amber)
Under review (amber)
Local state:
pending · Twilio state: IN_REVIEW, PENDING_REVIEW, SUBMITTING Twilio (and/or the carrier) is reading your submission.What you can do: Wait. ~2–3 business days for A2P, 1–5 for TFV.Approved (emerald)
Approved (emerald)
Local state:
approved · Twilio state: TWILIO_APPROVED You can send.What you can do: Nothing — you’re done.Action required (red)
Action required (red)
Local state:
failed · Twilio state: TWILIO_REJECTED / FAILED / SUBMIT_FAILED Carrier or Twilio rejected the submission. Read the reason, fix, resubmit.What you can do: Click Manage → fix the flagged fields → save. VIVI patches the existing verification instead of starting a new one, which preserves Twilio’s audit history.Not registered (grey)
Not registered (grey)
Local state:
null / first-time · Twilio state: — You haven’t submitted yet.What you can do: Click Manage → fill the form → submit.A2P 10DLC
A2P 10DLC stands for “application-to-person messaging on 10-digit long codes”, the framework US carriers built to police business texting on local numbers. Two registrations are required:- Brand — who you are (legal entity / sole proprietor). Registered once per account.
- Campaign — what you’re texting about (use case, sample messages, opt-in flow). One or more per brand.
Brand
- Standard (Registered Business)
- Sole Proprietor
Use this if you have a legal entity with an EIN (US) or BN (Canada). This is the right choice for almost every business.
Submit → review → land
When you click Submit, VIVI posts the brand to Twilio:1
Not registered
NOT_REGISTERED — nothing submitted yet.2
Submitting
SUBMITTING — VIVI’s request is in flight to Twilio.3
In review
IN_REVIEW — Twilio has acknowledged and the carrier is reviewing.4
Approved or failed
APPROVED on carrier sign-off, or FAILED on rejection — with the reason surfaced in the row.Campaign
A campaign is the per-use-case bundle that sits on top of an approved brand. You can have multiple campaigns per brand (e.g. one for transactional, one for marketing).1
Campaign basics
2
Opt-in & compliance
3
Sample messages
You need 2 to 5 sample messages that look exactly like the production messages your agent will send. Each is between 20 and 1024 chars.Click Submit campaign — same status flow as the brand.
Editing a failed brand or campaign
AFAILED or SUBMIT_FAILED brand/campaign is editable in place — click Manage, fix the flagged fields, click Resubmit. VIVI patches the existing record via Twilio’s resubmit endpoint, preserving the audit trail (Twilio reviewers see exactly what changed). You don’t lose your slot in the review queue.
Toll-Free Verification (TFV)
Toll-free numbers don’t use the A2P framework — they use Twilio’s per-number verification, the Toll-Free Verification (TFV). One TFV per toll-free channel.Immediately after creating a toll-free SMS channel, the channel detail page shows an Action required banner with a Start verification button. The Compliance hub also lists the channel under Toll-Free Verifications with an Action required badge.
1
Business and contact information
2
Business location
Physical address. Cap: street 255, city 100, state 100, ZIP 20. US + CA only.
3
Messaging use case
Optional details
Privacy policy URL, terms & conditions URL, and additional information are all optional but all helpful to Twilio’s reviewers — include them if you have them.What happens after you submit
Click Submit verification. VIVI posts (or patches — see below) to Twilio. The compliance row’sverificationStatus transitions to pending, and the TFV banner on the channel detail page flips to Verification in progress.
Twilio’s actual states map onto VIVI’s:
What happens on rejection
The channel detail page shows a Twilio rejection banner with the reason text and a “How to fix it” link to the relevant Twilio docs page (auto-resolved from the30xxx error code in the reason). The form re-opens for editing; saving again triggers a resubmit so you don’t burn through Twilio’s rate limit on new TFV submissions.
See Twilio errors and use cases for the canonical rejection reasons and how to fix each one.
Resubmission After Rejection
The biggest gotcha across both A2P and TFV is that resubmits are PATCHes, not new submissions. VIVI handles this automatically:Status Check First
VIVI fetches Twilio’s current status before saving.
Editable → PATCH
If the existing verification is editable (DRAFT / PENDING_REVIEW / TWILIO_REJECTED), VIVI sends a PATCH with your changes.
Locked → Blocked
If it’s not editable (IN_REVIEW / APPROVED), VIVI blocks the save with a clear message.
Race Recovery
If a race occurs and Twilio responds “already exists” anyway, VIVI recovers by refreshing local state from Twilio’s truth instead of writing a spurious “failed” status.
This is invisible to you — but it’s why you should never see the same TFV submission counted twice on Twilio’s side, and why the audit trail to Twilio’s reviewers stays clean across multiple iterations.
Related
SMS Channel Creation
The channel-level flow that triggers compliance.
Twilio Errors
Canonical rejection reasons + remediation.

