Overview
A toll-free number can be used to send messages in US & Canada once it passes an additional verification process. Users who don’t verify their toll-free numbers will be blocked from sending messages as of November 8, 2023.
A verified toll-free number ensures that the business owning the number is identified, and that the message's content has been reviewed and does not oppose the Disallowed Content Policy. This process ensures better deliverability and less filtration.
To set up a new channel to send SMS messages using a toll-free number the following steps are required.
API Access
The following API requests can only be made using a valid access key, and attached to an access role, with an access policy that at least specifies the permissions to the resources outlined in each section below. Learn more about API access .
Find an available number
If you do not already have a US or Canadian toll-free number available in your workspace you can find one to purchase.
use the search parameter types=toll-free
to only search for Toll Free Numbers
List Organization Numbers Stock Items GET /organizations/{organizationId}/numbers-stock-items
Copy const response = await fetch ( '/organizations/{organizationId}/numbers-stock-items' , {
method : 'GET' ,
headers : {
"Authorization" : "Bearer jwt"
} ,
});
const data = await response .json ();
Copy {
"results" : [
{
"id" : "123e4567-e89b-12d3-a456-426614174000" ,
"countryCode" : "text" ,
"type" : "local" ,
"numberString" : "text" ,
"capabilities" : {
"voice" : {
"inbound" : false ,
"outbound" : false
} ,
"sms" : {
"inbound" : false ,
"outbound" : false
} ,
"mms" : {
"inbound" : false ,
"outbound" : false
}
} ,
"monthlyPrice" : {
"currencyCode" : "EUR"
}
}
] ,
"nextPageToken" : "text"
}
Purchase a number
Once you have found an available number you can purchase this by providing the numberStockItemIds
matching the id
your previous call returned
A successful request to this endpoint will start a recurring monthly subscription based on the monthly cost of the number.
Create Workspace Long Code Numbers Assigns Long Code Numbers to the current workspace, charging the wallet for their subscription price. When creating LCNs as a User, all specified Number Stock Items should be reserved.
POST /workspaces/{workspaceId}/numbers-long-code
Copy const response = await fetch ( '/workspaces/{workspaceId}/numbers-long-code' , {
method : 'POST' ,
headers : {
"Authorization" : "Bearer jwt" ,
"Content-Type" : "application/json"
} ,
body : JSON .stringify ({
"numberStockItemIds" : [
"123e4567-e89b-12d3-a456-426614174000"
]
}) ,
});
const data = await response .json ();
Copy {
"results" : [
{
"id" : "123e4567-e89b-12d3-a456-426614174000" ,
"endpointId" : "123e4567-e89b-12d3-a456-426614174000" ,
"numberString" : "text" ,
"countryCode" : "text" ,
"type" : "local" ,
"capabilities" : {
"voice" : {
"inbound" : false ,
"outbound" : false
} ,
"sms" : {
"inbound" : false ,
"outbound" : false
} ,
"mms" : {
"inbound" : false ,
"outbound" : false
}
} ,
"createdAt" : "2024-11-21T09:00:08.773Z" ,
"updatedAt" : "2024-11-21T09:00:08.773Z" ,
"order" : {
"countryCode" : "text" ,
"type" : "local" ,
"capabilities" : [
"voice"
] ,
"prefix" : "text" ,
"status" : "draft" ,
"createdAt" : "2024-11-21T09:00:08.773Z" ,
"updatedAt" : "2024-11-21T09:00:08.773Z"
} ,
"deprovisionAt" : "2024-11-21T09:00:08.773Z" ,
"endpoint" : {
"id" : "123e4567-e89b-12d3-a456-426614174000" ,
"type" : "long-code-number" ,
"instanceId" : "123e4567-e89b-12d3-a456-426614174000" ,
"name" : "text" ,
"capabilities" : [
{
"name" : "sms" ,
"inbound" : {
"status" : "active" ,
"issues" : [
"subscription-is-not-active"
]
} ,
"outbound" : {
"status" : "active" ,
"destinationStatuses" : {
"active" : 0 ,
"inactive" : 0 ,
"available" : 0 ,
"unavailable" : 0
} ,
"supportsDestinations" : false ,
"issues" : [
"subscription-is-not-active"
]
}
}
] ,
"dependencies" : [
{
"type" : "connector" ,
"connectorId" : "123e4567-e89b-12d3-a456-426614174000" ,
"connectorTemplateRef" : "text" ,
"capabilities" : [
"voice"
]
}
] ,
"issues" : [
"subscription-is-not-active"
] ,
"provisioningStatus" : "provisioned" ,
"createdAt" : "2024-11-21T09:00:08.773Z" ,
"updatedAt" : "2024-11-21T09:00:08.773Z"
}
}
]
}
Submit a verification application for a toll-free number(s)
Before you can use a toll-free number to send SMS messages, you must submit a toll-free number verification request and wait for it to be approved.
To reduce the likelihood of rejection, ensure you are familiar with TFN registration examples and best practices. Specifically
Check this article for tips on how to write an effective useCaseSummary
Check this article on how to write an effective optInWorkflowDescription
Most TFN rejections are caused by unclear or incomplete useCaseSummary and/or optInWorkflowDescription
You can submit one toll-free number per verification request.
You are not allowed to submit the same number twice, unless the previous submission was resolved with status Rejected or Verified.
Request
Copy {
"businessName": "string",
"businessAddr1": "string",
"businessAddr2": "string",
"businessZip": "string",
"businessCity": "string",
"businessState": "string",
"businessCountry": "string",
"businessContactFirstName": "string",
"businessContactLastName": "string",
"businessContactEmail": "string",
"businessContactPhone": "string",
"corporateWebsite": "string",
"messageVolume": "10",
"useCase": "string",
"useCaseSummary": "string",
"productionMessageContent": "string",
"optInWorkflowDescription": "string",
"optInWorkflowImageUrLs": [
"string"
],
"additionalInformation": "string",
"isvReseller": "string",
"organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"workspaceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"phoneNumbers": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"testMode": true
}
To make this call, you must provide following parameters:
Parameter Description The name of the Business using Toll Free Number.
The address of the Business using Toll Free Number.
businessAddr2 (optional field)
The address of the Business using Toll Free Number.
The city of the Business using Toll Free Number.
The state of the Business using Toll Free Number.
The zip/postal code of the Business using Toll Free Number.
Country of the Business using Toll Free Number.
The website of the Business using Toll Free Number.
Business contact first name.
Business contact last name.
Business contact email address.
Business contact phone number.
Estimate monthly volume of messages from the Toll Free Number. See more details below.
IDs of Toll-Free numbers.
The Category of the use case. See below types of UseCases
Please provide a general idea of the use case and customer.
Example of message content.
Description of the opt in workflow.
Images showing the opt in workflow.
additionalInformation (optional field)
Any additional information.
isvReseller (optional field)
UseCase categories must only be of these types
Copy [
"2FA",
"App Notifications",
"Appointments",
"Auctions",
"Auto Repair Services",
"Bank Transfers",
"Billing",
"Booking Confirmations",
"Business Updates",
"Career Training",
"Chatbot",
"Contests",
"Courier Services & Deliveries",
"Emergency Alerts",
"Events & Planning",
"Financial Services",
"Fraud Alerts",
"Fundraising",
"General Marketing",
"General School Updates",
"HR / Staffing",
"Healthcare Services",
"Housing Community Updates",
"Insurance Services",
"Job Dispatch",
"Mixed",
"Motivational Reminders",
"Notary Notifications",
"Order Notifications",
"Public Works",
"Real Estate Services",
"Religious Services",
"Repair and Diagnostics Alerts",
"Rewards Program",
"Surveys",
"System Alerts",
"Voting Reminders",
"Webinar Reminders",
"Workshop Alerts",
"Zipwhip Testing"
]
Message Volume can only be of this type:
Copy 10; 100; 1,000; 10,000; 100,000; 250,000; 500,000; 750,000; 1,000,000; 5,000,000; 10,000,000+
Fields below are not required for the submission:
Copy businessAddr2, additionalInformation, isvReseller
Responses
201: Created
Copy {
"businessName": "string",
"businessAddr1": "string",
"businessAddr2": "string",
"businessZip": "string",
"businessCity": "string",
"businessState": "string",
"businessCountry": "string",
"businessContactFirstName": "string",
"businessContactLastName": "string",
"businessContactEmail": "string",
"businessContactPhone": "string",
"corporateWebsite": "string",
"messageVolume": "10",
"useCase": "string",
"useCaseSummary": "string",
"productionMessageContent": "string",
"optInWorkflowDescription": "string",
"optInWorkflowImageUrLs": [
"string"
],
"additionalInformation": "string",
"isvReseller": "string",
"organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"workspaceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"phoneNumbers": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"testMode": true
}
422: Unprocessable Entity (Invalid verification submission)
Copy {
"code": "string",
"message": "string",
"details": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
}
}
400: Bad request
Copy {
"code": "string",
"message": "string"
}
Fetch the status of a toll-free number verification
Once you submit your verification request, you must wait for it to be reviewed. You will be informed about the status of your submission in the portal, but you can also use the API to fetch your verification request status.
Statuses
Statuses Verification is submitted and waiting to be reviewed
Verification is being reviewed by authority. Additional information may be requested. In case of API integration please inspect the `statusMessage` object for more information.
Verification submission has been approved, and the number is ready to be used.
Verification submission has been rejected.
Responses
200 OK:
Copy {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"workspaceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"verificationRequestId": "string",
"phoneNumbers": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"verificationRequestData": {
"businessName": "string",
"businessAddr1": "string",
"businessAddr2": "string",
"businessZip": "string",
"businessCity": "string",
"businessState": "string",
"businessCountry": "string",
"businessContactFirstName": "string",
"businessContactLastName": "string",
"businessContactEmail": "string",
"businessContactPhone": "string",
"corporateWebsite": "string",
"messageVolume": "10",
"useCase": "string",
"useCaseSummary": "string",
"productionMessageContent": "string",
"optInWorkflowDescription": "string",
"optInWorkflowImageUrLs": [
"string"
],
"additionalInformation": "string",
"isvReseller": "string"
},
"status": "submitted",
"statusMessage": {
"StatusCode": "string",
"DeclineReasonDescription": "string",
"ResubmitAllowed": "string",
"Message": "string"
},
"testMode": true,
"createdAt": "2023-10-12T13:13:15.161Z",
"updatedAt": "2023-10-12T13:13:15.161Z"
}
404 Not Found:
Copy {
"code": "string",
"message": "string"
}
Verification status Message
If verification is rejected, some information will be provided in the DeclineReasonDescription if is in Progress, and any additional details have been required by the reviewing authority, you can find details in the Message
field
Copy "statusMessage": {
"StatusCode": "string",
"DeclineReasonDescription": "string",
"ResubmitAllowed": "string",
"Message": "string"
}
Update toll-free number verification submission
You can update verification submission with new information in two cases:
Authority has requested to add additional information. Your input is required.
Deadline for resubmission is 7 days from the moment of receiving notification from the verification authority. Always check the ResubmissionAllow filed in the StatusMessage before using this method
Provide more accurate verification information without request of an authority.
Request
Copy {
"businessName": "string",
"businessAddr1": "string",
"businessAddr2": "string",
"businessZip": "string",
"businessCity": "string",
"businessState": "string",
"businessCountry": "string",
"businessContactFirstName": "string",
"businessContactLastName": "string",
"businessContactEmail": "string",
"businessContactPhone": "string",
"corporateWebsite": "string",
"messageVolume": "10",
"useCase": "string",
"useCaseSummary": "string",
"productionMessageContent": "string",
"optInWorkflowDescription": "string",
"optInWorkflowImageUrLs": [
"string"
],
"additionalInformation": "string",
"isvReseller": "string",
"organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"testMode": true
}
Responses
200 OK:
Copy {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"organizationId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"workspaceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"verificationRequestId": "string",
"phoneNumbers": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
],
"verificationRequestData": {
"businessName": "string",
"businessAddr1": "string",
"businessAddr2": "string",
"businessZip": "string",
"businessCity": "string",
"businessState": "string",
"businessCountry": "string",
"businessContactFirstName": "string",
"businessContactLastName": "string",
"businessContactEmail": "string",
"businessContactPhone": "string",
"corporateWebsite": "string",
"messageVolume": "10",
"useCase": "string",
"useCaseSummary": "string",
"productionMessageContent": "string",
"optInWorkflowDescription": "string",
"optInWorkflowImageUrLs": [
"string"
],
"additionalInformation": "string",
"isvReseller": "string"
},
"status": "submitted",
"statusMessage": {
"StatusCode": "string",
"DeclineReasonDescription": "string",
"ResubmitAllowed": "string",
"Message": "string"
},
"testMode": true,
"createdAt": "2023-10-12T13:44:03.004Z",
"updatedAt": "2023-10-12T13:44:03.004Z"
}
```
#### 400: Bad request
Error processing the request
```json
{
"code": "string",
"message": "string"
}
404 Not Found:
Copy {
"code": "string",
"message": "string"
}
422: Unprocessable Entity
Copy {
"code": "string",
"message": "string",
"details": {
"additionalProp1": [
"string"
],
"additionalProp2": [
"string"
],
"additionalProp3": [
"string"
]
}
}
Retrieve all Verification of a Workspaces
A TFN may have multiple verifications (example the firs submission was rejected by the reviewing authority ) but only one of them can be active