Get started with toll-free verification using the API
ISVs: Compliance Embeddable for Toll-Free Verification
By adding the Compliance Embeddable to their website, an independent software vendor (ISV) can onboard customers without using the Toll-Free Verification (TFV) API. The Compliance Embeddable lets customers submit compliance information through a self-service workflow. To learn more, see the blog post introducing the Compliance Embeddable for Toll-Free verification. To get additional guidance, see our support article for guidance on TFV for ISVs.
Toll-free phone numbers for the US and Canada use the North American Numbering Plan (NANP). NANP toll-free numbers begin with 800, 888, 877, 866, 855, 844, or 833. To use these numbers to send SMS messages, your organization must comply with federal regulations. Compliance requires verifying how you plan to use your phone number to send texts. To verify your NANP toll-free phone number for regulatory compliance, use the Toll-Free Verification API.
Business Registration Number required and optional properties
Registration includes properties for a business registration number and related compliance information.
To reduce review times and minimize the risk of rejection, provide your business registration number and related details. To learn more, see Toll-Free Verification Policy for Collecting Business Registration Number.
Campaign Verify Token Required for Political Organizations
If your organization is a 527 political organization and you are registering for the POLITICAL_ELECTION_CAMPAIGNS use case, you MUST provide a Campaign Verify (CV) token during toll-free verification. Failure to provide a valid CV token will result in rejection of your verification request.
Read the Campaign Verify section below before starting the TFV process.
TFV requests with Twilio require your business to have a Trust Hub Primary Customer Profile. A Primary Customer Profile is also known as a Primary Business Profile.
- Open the Trust Hub in the Twilio Console.
- Create your Trust Hub Primary Customer Profile.
- When you reach the Business Information step of the Create Profile workflow, set the value of Select business identity.
- If you plan to use Twilio in a product you sell to customers, Twilio considers you an ISV. Choose ISV Reseller or Partner.
- If you plan to use Twilio to communicate directly with customers or staff, Twilio considers you a direct customer. Choose Direct Customer.
- At the Notification settings step, provide an email address at which Twilio can contact you about the status of your request.
- After you submit your request to Twilio, Twilio reviews it and sends a notification of approval or rejection to the email address you provided.
- After you receive notification of your profile status, open the Trust Hub in the Twilio Console. Twilio approved your Primary Customer Profile.
Your Profile Details page displays a Status of Twilio-Approved. - Copy the Business Profile SID value of your parent account. This SID begins with
BUwith 32 hexadecimal digits. To Create a TFV request, you need this Business Profile SID. The Create TFV resource names this parameterCustomerProfileSid. These refer to the same value.
Trust Hub Customer Profiles can link to a parent account or a subaccount. Think of a parent account as the main organization and subaccounts as departments or subsidiaries. To create a parent account, you must use the Twilio Console. You can create subaccounts using the Twilio TrustHub API.
To keep customers separate, production ISV parent accounts should link Trust Hub customer profiles to subaccounts.
To use an NANP toll-free phone number for messaging, submit a verification request for the related business. As you have an approved Primary Customer Profile, your request only needs the parameters for the TFV. To learn more, see Required Information for Toll-Free Verification in the Twilio Help Center.
To support changes to toll-free messaging policy when submitting a TFV request, include additional metadata about your business. To avoid rejection and accelerate vetting, provide this information before its required. To learn more, see Toll-Free Verification Policy for Collecting Business Registration Number in the Twilio Help Center.
-
Make a
POSTrequest to thehttps://messaging.twilio.com/v1/Tollfree/Verificationsresource.
All parameters for this request are request body parameters.Click to review the request body parameters(information)Info
Note about Campaign Verify parameters: The
VettingIdandVettingProviderparameters shown in this example are REQUIRED if your organization is a 527 political organization and if you are registering for the POLITICAL_ELECTION_CAMPAIGNS use case. For all other organizations and use cases, these parameters are optional. See the Campaign Verify section for details.1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function createTollfreeVerification() {11const tollfreeVerification =12await client.messaging.v1.tollfreeVerifications.create({13additionalInformation: "privacy policy is geo-locked to NAMER region",14businessName: "Owl, Inc.",15businessWebsite: "http://www.example.com",16customerProfileSid: "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",17messageVolume: "10",18notificationEmail: "support@example.com",19optInImageUrls: [20"https://example.com/images/image1.jpg",21"https://example.com/images/image2.jpg",22],23optInType: "VERBAL",24productionMessageSample: "lorem ipsum",25tollfreePhoneNumberSid: "PNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",26useCaseCategories: ["TWO_FACTOR_AUTHENTICATION", "MARKETING"],27useCaseSummary:28"This number is used to send out promotional offers and coupons to the customers of Owl, Inc.",29vettingId:30"cv|1.0|mno|tfree|b344a16f-b435-4a39-bf91-df9b8e4e0a0d|E5eh-rOPHCr_lrgHDYEZP45FzuJSHS1fkFTmVPD8GQ4",31vettingProvider: "CAMPAIGN_VERIFY",32});3334console.log(tollfreeVerification.sid);35}3637createTollfreeVerification();Twilio reviews TFV requests within three business days.
-
Check the status of your TFV request.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function fetchTollfreeVerification() {11const tollfreeVerification = await client.messaging.v112.tollfreeVerifications("HHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")13.fetch();1415console.log(tollfreeVerification.sid);16}1718fetchTollfreeVerification();If you don't have your TFV request SID, use the API to get a list of TFV SIDs for your related toll-free number.
Click to review the get list of TFV SIDs API request -
Look for the
statusproperty in the response.1{2"sid": "HHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",3"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",4"customer_profile_sid": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"regulated_item_sid": null,6"trust_product_sid": null,7"business_name": "Owl, Inc.",8"status": "PENDING_REVIEW",9"date_created": "2021-01-27T14:18:35Z",10"date_updated": "2021-01-27T14:18:36Z",11"business_street_address": "123 Main Street",12"business_street_address2": "Suite 101",13"business_city": "Anytown",14"business_state_province_region": "AA",15"business_postal_code": "11111",16"business_country": "US",17"business_website": "http://www.example.com",18"business_contact_first_name": "firstname",19"business_contact_last_name": "lastname",20"business_contact_email": "email@company.com",21"business_contact_phone": "+11231231234",22"notification_email": "support@example.com",23"use_case_categories": [24"TWO_FACTOR_AUTHENTICATION",25"MARKETING"26],27"use_case_summary": "This number is used to send out promotional offers and coupons to the customers of Owl, Inc.",28"production_message_sample": "lorem ipsum",29"opt_in_image_urls": [30"https://testbusiness.com/images/image1.jpg",31"https://testbusiness.com/images/image2.jpg"32],33"opt_in_type": "VERBAL",34"message_volume": "10",35"additional_information": "privacy policy is geo-locked to NAMER region",36"tollfree_phone_number_sid": "PNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",37"rejection_reason": null,38"error_code": null,39"edit_expiration": null,40"edit_allowed": null,41"rejection_reasons": null,42"resource_links": {},43"url": "https://messaging.twilio.com/v1/Tollfree/Verifications/HHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",44"external_reference_id": "abc123xyz567",4546// New response fields for the 2026 update47"business_registration_number": "123456789",48"business_registration_authority": "EIN",49"business_registration_country": "US",50"doing_business_as": "Other Company",51"business_type": "PRIVATE_PROFIT",52"opt_in_confirmation_sample": "Opt in sample message",53"help_message_sample": "Help sample",54"privacy_policy_url": "http://www.example.com/privacy",55"terms_and_condition_url": "http://www.example.com/terms",56"age_gated_content": false,57"opt_in_keywords": "STOP",5859// New response fields for CV Token update60"vetting_id": "cv|1.0|mno|tfree|b344a16f-b435-4a39-bf91-df9b8e4e0a0d|E5eh-rOPHCr_lrgHDYEZP45FzuJSHS1fkFTmVPD8GQ4",61"vetting_provider": "CAMPAIGN_VERIFY",62"vetting_id_expiration": "2027-01-31T23:59:59Z"6364}If Twilio approved your TFV request,
statusreads as"status": "TWILIO_APPROVED". The verified toll-free number can send Application to Person (A2P) SMS messages with minimal traffic filtering.
If you don't have a Trust Hub Customer Profile, you can create one at the same time as submitting your TFV request. To learn how to perform both tasks at once, see this variation on the Create TFV request.
If Twilio rejected your TFV request, your check request displays "status": "TWILIO_REJECTED". The toll-free number isn't verified and you can't use it to send messages. To review common rejection reasons, see Why Was My Toll-Free Verification Rejected? in the Twilio Help Center.
If the response includes "edit_allowed": true, you can resubmit your TFV request.
-
Check the status of your TFV request.
-
In the response, find two properties:
- The
edit_allowedproperty- If this value is set to
true, you can edit the TFV request and resubmit it. - You must submit the TFV request before the timestamp provided in the
edit_expirationproperty. Twilio sets this property value to seven days from the initial request. After that date, the TFV request expires and you need to create another.
- If this value is set to
- The
rejection_reasonsproperty array- This array returns the list of reasons why Twilio rejected your TFV as a human-readable
reasonand acodethat links to details on this error.
- This array returns the list of reasons why Twilio rejected your TFV as a human-readable
- The
-
To correct any errors in your TFV request, use the Edit a TFV Request resource.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function updateTollfreeVerification() {11const tollfreeVerification = await client.messaging.v112.tollfreeVerifications("HHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")13.update({14additionalInformation:15"See our privacy policy at www.example.com/privacypolicy",16editReason: "Updated the ProductionMessageSample",17messageVolume: "1,000",18optInImageUrls: [19"https://example.com/images/image1.jpg",20"https://example.com/images/image2.jpg",21],22optInType: "VERBAL",23productionMessageSample:24"Get 10% off when you save this coupon: https://bit.ly/owlcoupon",25useCaseCategories: ["TWO_FACTOR_AUTHENTICATION", "MARKETING"],26useCaseSummary:27"This number is used to send out promotional offers and coupons to the customers of Owl, Inc.",28});2930console.log(tollfreeVerification.sid);31}3233updateTollfreeVerification();Response
1{2"sid": "HHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",3"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",4"regulated_item_sid": null,5"customer_profile_sid": "BUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",6"trust_product_sid": null,7"status": "PENDING_REVIEW",8"date_created": "2021-01-27T14:18:35Z",9"date_updated": "2021-01-27T14:18:36Z",10"business_name": "Owl, Inc.",11"business_street_address": "123 Main Street",12"business_street_address2": "Suite 101",13"business_city": "Anytown",14"business_state_province_region": "AA",15"business_postal_code": "11111",16"business_country": "US",17"business_website": "http://www.company.com",18"business_contact_first_name": "firstname",19"business_contact_last_name": "lastname",20"business_contact_email": "email@company.com",21"business_contact_phone": "+11231231234",22"notification_email": "support@company.com",23"use_case_categories": [24"TWO_FACTOR_AUTHENTICATION",25"MARKETING"26],27"use_case_summary": "This number is used to send out promotional offers and coupons to the customers of Owl, Inc.",28"production_message_sample": "Get 10% off when you save this coupon: https://bit.ly/owlcoupon",29"opt_in_image_urls": [30"https://example.com/images/image1.jpg",31"https://example.com/images/image2.jpg"32],33"opt_in_type": "VERBAL",34"message_volume": "1,000",35"additional_information": "See our privacy policy at www.example.com/privacypolicy",36"tollfree_phone_number_sid": "PNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",37"rejection_reason": null,38"error_code": null,39"edit_expiration": null,40"edit_allowed": null,41"rejection_reasons": null,42"resource_links": {},43"url": "https://messaging.twilio.com/v1/Tollfree/Verifications/HHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",44"external_reference_id": null,45"business_registration_number": "123456789",46"business_registration_authority": "EIN",47"business_registration_country": "US",48"business_type": "PRIVATE_PROFIT",49"business_registration_phone_number": "+13023334444",50"doing_business_as": "Toms Widgets",51"age_gated_content": false,52"help_message_sample": "For help, reply HELP or visit our website.",53"opt_in_confirmation_message": "Thank you for opting in!",54"opt_in_keywords": [55"START"56],57"privacy_policy_url": "https://www.example.com/privacy",58"terms_and_conditions_url": "https://www.example.com/terms",59"tollfree_phone_number": "+18003334444",60"vetting_id": null,61"vetting_id_expiration": null,62"vetting_provider": null63} -
Check your TFV request status.
If you can't edit your TFV request, delete it. The delete resource requires the SID for the Verification record to delete. This SID starts with HH followed by 32 other hexadecimal digits.
If you don't have your TFV request SID, use the API to get a list of TFV SIDs for your related toll-free number.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function deleteTollfreeVerification() {11await client.messaging.v112.tollfreeVerifications("HHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")13.remove();14}1516deleteTollfreeVerification();
Info
This section applies to 527 political organizations registering for the POLITICAL_ELECTION_CAMPAIGNS use case for toll-free messaging.
Campaign Verify is a secure, non-partisan verification solution for US political organizations who wish to engage with voters via toll-free messaging.
All organizations sending political communications on behalf of a federal, state, or local political campaign must be verified by Campaign Verify to complete toll-free verification for political use cases.
Warning
You should read the Campaign Verify FAQ before continuing with this guide, as this process involves fees and identity verification.
A Campaign Verify token is REQUIRED for toll-free verification when:
- Your organization is a 527 political organization
- And you select POLITICAL_ELECTION_CAMPAIGNS as a use case category.
Without a valid CV token, your toll-free verification will be rejected if you meet these criterias.
Verification involves submitting information about your political organization to Campaign Verify, as well as verifying your identity as an authorized person associated with the political organization.
- Visit Campaign Verify to begin the verification process
- Complete identity verification and provide required organization information
- After approval, Campaign Verify issues you a CV token
- Provide this CV token during TFV registration using the
VettingIdandVettingProviderparameters
A full CV token is composed of 6 pipe (|) delimited fields, for example:
..cv|1.0|mno|tfree|b344a16f-b435-4a39-bf91-df9b8e4e0a0d|E5eh-rOPHCr_lrgHDYEZP45FzuJSHS1fkFTmVPD8GQ4
When submitting your TFV request:
- Set
VettingProvidertoCAMPAIGN_VERIFY - Set
VettingIdto your full CV token (all 6 fields, including the pipes) - The token is case-sensitive and must match the format provided by Campaign Verify exactly
- CV tokens expire after a period of time (expiration date provided by Campaign Verify)
- The
vetting_id_expirationfield in the TFV response shows when your token expires - The CV token must be registered for the organization entity listed on the token. If your TFV request is rejected with an error code related to Campaign Verify, check that the token is valid and registered to the correct organization.
- If you are ISV and multiple customers sending political messaging, each customer needs a separate CV token.
- To update an expired token, edit your existing TFV request with a new CV token
Warning
An organization that does not provide a Campaign Verify token when required will have their toll-free verification rejected. Even if approved without a token initially, carriers may block political messaging traffic that is not properly verified through Campaign Verify.