A2P 10DLC - Standard and Low-Volume Standard Brand Onboarding Guide for ISVs
This is a step-by-step walkthrough for Independent Software Vendors (ISVs) who wish to use Twilio's REST API to register a customer for a Standard Brand or Low-Volume Brand for A2P 10DLC.
If you plan to use one of the Helper Libraries for this registration process, be sure you're using the latest version.
Create a Primary Business Profile for your parent Twilio Account
Before onboarding your customers, you must have a Primary Business Profile with a Twilio Approved status.
Create your Primary Business Profile in the Trust Hub in the Consolee. Select ISV Reseller or Partner as your Business Type.
Make note of your Primary Business Profile SID. You need it in later steps in this guide.
Use the correct Account SID
When making the API requests in this guide, use the Twilio Account SID and Auth Token for the Account your customer will use for A2P 10DLC messaging.
Provide Twilio with your customer's business information
The API requests in this section use the TrustHub API to create a Secondary Customer Profile. This is a collection of contact details and business information about your customer's business, similar to the Primary Business Profile you created earlier.
In Step 1.1 below, you create a CustomerProfile resource (this is the "Secondary Customer Profile").
In Steps 1.2-1.7 below, you create additional resources that contain business information, and then you attach these resources to the CustomeProfile resource.
After attaching all required information to the CustomerProfile, you can check and submit the Secondary Customer Profile for review (Steps 1.9 and 1.10, respectively).
1.1. Create a Secondary Customer Profile
This step creates a CustomerProfile resource for your customer's business.
(information)
Info
If you've already registered customers within TrustHub for SHAKEN/STIR, Branded Calls, or CNAM, your customer may already have a Secondary Customer Profile.
Save the
sid
in the response to this request. This is the SID of the Secondary Customer Profile that you need in subsequent steps.
Do not change the
policy_sid
in the API request below. This is the
Policy
(rule set) that defines which information is required for a CustomerProfile.
The
friendly_name
is an internal identifier for this Customer Profile. Use a descriptive name that you understand, e.g., "Acme, Inc. Secondary Customer Profile".
The
email
parameter is the email address that will receive updates when the CustomerProfile resource's
status
changes.
This should not be your customer's email address.
This is an email address that you (as the ISV) own, since you need to monitor this CustomerProfile resource's
status
as part of the onboarding process.
The
status_callback
parameter is optional. This is the URL to which Twilio sends updates regarding this CustomerProfile's
status
.
Create a Secondary Customer Profile
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_15
// Download the helper library from https://www.twilio.com/docs/node/install
_15
// Find your Account SID and Auth Token at twilio.com/console
_15
// and set the environment variables. See http://twil.io/secure
1.4. Create an EndUser resource of type: authorized_representative_1
This step provides required information about an authorized representative for your customer's business.
The
type
parameter has a value of
"authorized_representative_1"
.
The
friendly_name
is an internal name for identifying this EndUser resource. Use a descriptive name, e.g., "Acme, Inc. Authorized Rep 1".
The authorized representative's contact information is provided via the attributes parameter. The attributes object contains the following parameters and the corresponding values that you collected from your customer earlier:
business_title
email
first_name
job_position
last_name
phone_number
Create EndUser of type authorized_representative_1
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_21
// Download the helper library from https://www.twilio.com/docs/node/install
_21
// Find your Account SID and Auth Token at twilio.com/console
_21
// and set the environment variables. See http://twil.io/secure
You may provide a second authorized representative by repeating this request, but use authorized_representative_2 for the type parameter instead. You must also complete the next step again, but with the SID associated with the authorized_representative_2 EndUser.
1.5. Attach the EndUser resource to the Secondary Customer Profile
The
sid
in the path of this request is the SID of the Secondary Customer Profile from Step 1.1.
The
object_sid
is the EndUser resource SID from Step 1.4.
Attach the EndUser resource to the Secondary Customer Profile
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_11
// Download the helper library from https://www.twilio.com/docs/node/install
_11
// Find your Account SID and Auth Token at twilio.com/console
_11
// and set the environment variables. See http://twil.io/secure
This API request runs an automated evaluation on the Secondary Customer Profile. The response from Twilio indicates whether or not all required information (as per the Policy) is present in the Secondary Customer Profile.
If there are no errors, the response contains a status of compliant. Otherwise, the status is noncompliant and the results property contains information about invalid or missing information.
The
customer_profile_sid
is the SID of the Secondary Customer Profile.
The
policy_sid
is
RNdfbf3fae0e1107f8aded0e7cead80bf5
.
Evaluate the Secondary Customer Profile
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_11
// Download the helper library from https://www.twilio.com/docs/node/install
_11
// Find your Account SID and Auth Token at twilio.com/console
_11
// and set the environment variables. See http://twil.io/secure
"failure_reason": "A Business End-User is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22214,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Business Name",
_160
"object_field": "business_name",
_160
"failure_reason": "The Business Name is missing. Please enter in a Business Name on the Business information.",
_160
"error_code": 22215
_160
},
_160
{
_160
"friendly_name": "Business Registration Number",
_160
"object_field": "business_registration_number",
_160
"failure_reason": "The Business Registration Number is missing. Please enter in a Business Registration Number on the Business information.",
_160
"error_code": 22215
_160
},
_160
{
_160
"friendly_name": "First Name",
_160
"object_field": "first_name",
_160
"failure_reason": "The First Name is missing. Please enter in a First Name on the Business information.",
_160
"error_code": 22215
_160
},
_160
{
_160
"friendly_name": "Last Name",
_160
"object_field": "last_name",
_160
"failure_reason": "The Last Name is missing. Please enter in a Last Name on the Business information.",
_160
"error_code": 22215
_160
}
_160
],
_160
"requirement_friendly_name": "Business",
_160
"requirement_name": "business_info"
_160
},
_160
{
_160
"friendly_name": "Excerpt from the commercial register (Extrait K-bis) showing name of Authorized Representative",
_160
"object_type": "commercial_registrar_excerpt",
_160
"passed": false,
_160
"failure_reason": "An Excerpt from the commercial register (Extrait K-bis) showing name of Authorized Representative is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Business Name",
_160
"object_field": "business_name",
_160
"failure_reason": "The Business Name is missing. Or, it does not match the Business Name you entered within Business information. Please enter in the Business Name shown on the Excerpt from the commercial register (Extrait K-bis) showing name of Authorized Representative or make sure both Business Name fields use the same exact inputs.",
_160
"error_code": 22217
_160
}
_160
],
_160
"requirement_friendly_name": "Business Name",
_160
"requirement_name": "business_name_info"
_160
},
_160
{
_160
"friendly_name": "Excerpt from the commercial register showing French address",
_160
"object_type": "commercial_registrar_excerpt",
_160
"passed": false,
_160
"failure_reason": "An Excerpt from the commercial register showing French address is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Address sid(s)",
_160
"object_field": "address_sids",
_160
"failure_reason": "The Address is missing. Please enter in the address shown on the Excerpt from the commercial register showing French address.",
_160
"error_code": 22219
_160
}
_160
],
_160
"requirement_friendly_name": "Business Address (Proof of Address)",
_160
"requirement_name": "business_address_proof_info"
_160
},
_160
{
_160
"friendly_name": "Excerpt from the commercial register (Extrait K-bis)",
_160
"object_type": "commercial_registrar_excerpt",
_160
"passed": false,
_160
"failure_reason": "An Excerpt from the commercial register (Extrait K-bis) is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Document Number",
_160
"object_field": "document_number",
_160
"failure_reason": "The Document Number is missing. Please enter in the Document Number shown on the Excerpt from the commercial register (Extrait K-bis).",
"failure_reason": "A Government-issued ID is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "First Name",
_160
"object_field": "first_name",
_160
"failure_reason": "The First Name is missing. Or, it does not match the First Name you entered within Business information. Please enter in the First Name shown on the Government-issued ID or make sure both First Name fields use the same exact inputs.",
_160
"error_code": 22217
_160
},
_160
{
_160
"friendly_name": "Last Name",
_160
"object_field": "last_name",
_160
"failure_reason": "The Last Name is missing. Or, it does not match the Last Name you entered within Business information. Please enter in the Last Name shown on the Government-issued ID or make sure both Last Name fields use the same exact inputs.",
_160
"error_code": 22217
_160
}
_160
],
_160
"requirement_friendly_name": "Name of Authorized Representative",
_160
"requirement_name": "name_of_auth_rep_info"
_160
},
_160
{
_160
"friendly_name": "Executed Copy of Power of Attorney",
_160
"object_type": "power_of_attorney",
_160
"passed": false,
_160
"failure_reason": "An Executed Copy of Power of Attorney is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [],
_160
"requirement_friendly_name": "Power of Attorney",
_160
"requirement_name": "power_of_attorney_info"
_160
},
_160
{
_160
"friendly_name": "Government-issued ID",
_160
"object_type": "government_issued_document",
_160
"passed": false,
_160
"failure_reason": "A Government-issued ID is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "First Name",
_160
"object_field": "first_name",
_160
"failure_reason": "The First Name is missing on the Governnment-Issued ID.",
_160
"error_code": 22217
_160
},
_160
{
_160
"friendly_name": "Last Name",
_160
"object_field": "last_name",
_160
"failure_reason": "The Last Name is missing on the Government-issued ID",
_160
"error_code": 22217
_160
}
_160
],
_160
"requirement_friendly_name": "Name of Person granted the Power of Attorney",
This section of the onboarding guide covers creating and submitting a TrustProduct resource via the TrustHub API. This TrustProduct is a "container" for some additional business information that TCR requires.
In Step 2.1 below, you create the TrustProduct resource. Next, you provide the additional business information in an EndUser resource (Step 2.2) and then attach the EndUser resource to the TrustProuduct in Step 2.3. In Step 2.4, you attach the CustomerProfile resource to the TrustProduct resource. Finally, you check and submit the TrustProduct for review in Steps 2.5 and 2.6.
2.1. Create a TrustProduct resource
This step creates a TrustProduct resource, which is a "container" for some additional business information that TCR requires.
The
friendly_name
is an internal name. Use something descriptive, e.g., "Acme, Inc. A2P Trust Product".
The
email
is the email address to which Twilio sends updates when the TrustProduct's
status
changes. This should be your (the ISV's) email address,
not the customer's
. You need to monitor this email address for changes in the TrustProduct's
status
.
The
policy_sid
must be
RNb0d4771c2c98518d916a3d4cd70a8f8b
The
status_callback
is the URL to which Twilio sends status updates about the TrustProduct. This is optional, but recommended.
Save the
sid
returned by this request. You need it in later steps.
Create an empty A2P Trust Bundle
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_14
// Download the helper library from https://www.twilio.com/docs/node/install
_14
// Find your Account SID and Auth Token at twilio.com/console
_14
// and set the environment variables. See http://twil.io/secure
This API request runs an automated evaluation on the TrustProduct. The response from Twilio indicates whether or not all required information (as per the Policy) is present in the TrustProduct.
If there are no errors, the response contains a status of compliant. Otherwise, the status is noncompliant and the results property contains information about invalid or missing information.
The
trust_product_sid
is the SID of the TrustProduct.
The
policy_sid
must be
RNb0d4771c2c98518d916a3d4cd70a8f8b
.
Evaluate the TrustProduct
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_11
// Download the helper library from https://www.twilio.com/docs/node/install
_11
// Find your Account SID and Auth Token at twilio.com/console
_11
// and set the environment variables. See http://twil.io/secure
"failure_reason": "A Business End-User is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22214,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Business Name",
_160
"object_field": "business_name",
_160
"failure_reason": "The Business Name is missing. Please enter in a Business Name on the Business information.",
_160
"error_code": 22215
_160
},
_160
{
_160
"friendly_name": "Business Registration Number",
_160
"object_field": "business_registration_number",
_160
"failure_reason": "The Business Registration Number is missing. Please enter in a Business Registration Number on the Business information.",
_160
"error_code": 22215
_160
},
_160
{
_160
"friendly_name": "First Name",
_160
"object_field": "first_name",
_160
"failure_reason": "The First Name is missing. Please enter in a First Name on the Business information.",
_160
"error_code": 22215
_160
},
_160
{
_160
"friendly_name": "Last Name",
_160
"object_field": "last_name",
_160
"failure_reason": "The Last Name is missing. Please enter in a Last Name on the Business information.",
_160
"error_code": 22215
_160
}
_160
],
_160
"requirement_friendly_name": "Business",
_160
"requirement_name": "business_info"
_160
},
_160
{
_160
"friendly_name": "Excerpt from the commercial register (Extrait K-bis) showing name of Authorized Representative",
_160
"object_type": "commercial_registrar_excerpt",
_160
"passed": false,
_160
"failure_reason": "An Excerpt from the commercial register (Extrait K-bis) showing name of Authorized Representative is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Business Name",
_160
"object_field": "business_name",
_160
"failure_reason": "The Business Name is missing. Or, it does not match the Business Name you entered within Business information. Please enter in the Business Name shown on the Excerpt from the commercial register (Extrait K-bis) showing name of Authorized Representative or make sure both Business Name fields use the same exact inputs.",
_160
"error_code": 22217
_160
}
_160
],
_160
"requirement_friendly_name": "Business Name",
_160
"requirement_name": "business_name_info"
_160
},
_160
{
_160
"friendly_name": "Excerpt from the commercial register showing French address",
_160
"object_type": "commercial_registrar_excerpt",
_160
"passed": false,
_160
"failure_reason": "An Excerpt from the commercial register showing French address is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Address sid(s)",
_160
"object_field": "address_sids",
_160
"failure_reason": "The Address is missing. Please enter in the address shown on the Excerpt from the commercial register showing French address.",
_160
"error_code": 22219
_160
}
_160
],
_160
"requirement_friendly_name": "Business Address (Proof of Address)",
_160
"requirement_name": "business_address_proof_info"
_160
},
_160
{
_160
"friendly_name": "Excerpt from the commercial register (Extrait K-bis)",
_160
"object_type": "commercial_registrar_excerpt",
_160
"passed": false,
_160
"failure_reason": "An Excerpt from the commercial register (Extrait K-bis) is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "Document Number",
_160
"object_field": "document_number",
_160
"failure_reason": "The Document Number is missing. Please enter in the Document Number shown on the Excerpt from the commercial register (Extrait K-bis).",
"failure_reason": "A Government-issued ID is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "First Name",
_160
"object_field": "first_name",
_160
"failure_reason": "The First Name is missing. Or, it does not match the First Name you entered within Business information. Please enter in the First Name shown on the Government-issued ID or make sure both First Name fields use the same exact inputs.",
_160
"error_code": 22217
_160
},
_160
{
_160
"friendly_name": "Last Name",
_160
"object_field": "last_name",
_160
"failure_reason": "The Last Name is missing. Or, it does not match the Last Name you entered within Business information. Please enter in the Last Name shown on the Government-issued ID or make sure both Last Name fields use the same exact inputs.",
_160
"error_code": 22217
_160
}
_160
],
_160
"requirement_friendly_name": "Name of Authorized Representative",
_160
"requirement_name": "name_of_auth_rep_info"
_160
},
_160
{
_160
"friendly_name": "Executed Copy of Power of Attorney",
_160
"object_type": "power_of_attorney",
_160
"passed": false,
_160
"failure_reason": "An Executed Copy of Power of Attorney is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [],
_160
"requirement_friendly_name": "Power of Attorney",
_160
"requirement_name": "power_of_attorney_info"
_160
},
_160
{
_160
"friendly_name": "Government-issued ID",
_160
"object_type": "government_issued_document",
_160
"passed": false,
_160
"failure_reason": "A Government-issued ID is missing. Please add one to the regulatory bundle.",
_160
"error_code": 22216,
_160
"valid": [],
_160
"invalid": [
_160
{
_160
"friendly_name": "First Name",
_160
"object_field": "first_name",
_160
"failure_reason": "The First Name is missing on the Governnment-Issued ID.",
_160
"error_code": 22217
_160
},
_160
{
_160
"friendly_name": "Last Name",
_160
"object_field": "last_name",
_160
"failure_reason": "The Last Name is missing on the Government-issued ID",
_160
"error_code": 22217
_160
}
_160
],
_160
"requirement_friendly_name": "Name of Person granted the Power of Attorney",
Continue to the next step. You don't need to wait for this TrustProduct's status to be approved.
3. Create a BrandRegistration
(warning)
Warning
Please rate limit all API requests for Brand and Campaign registration to one request per second.
This API request screates a BrandRegistration resource, which represents your customer's Brand. Creating the BrandRegistration resource submits all of the Brand-related information for vetting by TCR.
The
customer_profile_bundle_sid
is the SID of your customer's Secondary Customer Profile.
The
a2p_profile_bundle_sid
is the SID of the TrustProduct created in Step 2.1.
skip_automatic_sec_vet
is an optional Boolean. You should omit this parameter unless you know the Brand should skip secondary vetting. Read the
A2P 10DLC - Gather Business Information page
for more details.
Create a BrandRegistration resource
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_13
// Download the helper library from https://www.twilio.com/docs/node/install
_13
// Find your Account SID and Auth Token at twilio.com/console
_13
// and set the environment variables. See http://twil.io/secure
Your customer needs a Messaging Service through which it handles its A2P 10DLC messaging.
This section covers the creation of a new Messaging Service. You should create a new Messaging Service for A2P 10DLC rather than reuse an existing one.
Create a new Messaging Service
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_14
// Download the helper library from https://www.twilio.com/docs/node/install
_14
// Find your Account SID and Auth Token at twilio.com/console
_14
// and set the environment variables. See http://twil.io/secure
Save the SID returned by this request; you need it in a later step. You can also find Messaging Service SIDs in the Console or by using the Read multiple Service resources API request.
This request creates an unconfigured Messaging Service. Read the Messaging Service docs to learn more about how to configure a Messaging Service.
(error)
Danger
Do not continue to the next step until the BrandRegistration's status is APPROVED.
5. Create an A2P Campaign
This section covers the creation of a UsAppToPerson resource, which contains the information about the business' messaging Campaign and Use Case.
(error)
Danger
Do not complete this section until the BrandRegistration's status is APPROVED.
5.1 Fetch possible A2P Campaign Use Cases
Once a BrandRegistration's status is approved, you can find out which Use Cases are available for your customer. The API request below returns all of the possible A2P Use Cases that your customer's Brand can use for an A2P Campaign.
The
messaging_service_sid
is the SID of the Messaging Service from Step 4 above.
The
brand_registration_sid
is the SID of the BrandRegistration resource you created in Step 3.
Fetch possible A2P Campaign Use cases
Node.js
Python
C#
Java
Go
PHP
Ruby
twilio-cli
curl
_11
// Download the helper library from https://www.twilio.com/docs/node/install
_11
// Find your Account SID and Auth Token at twilio.com/console
_11
// and set the environment variables. See http://twil.io/secure
"description": "Two-Factor authentication, one-time use password, password reset",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "ACCOUNT_NOTIFICATION",
_126
"name": "Account Notification",
_126
"description": "All reminders, alerts, and notifications. (Examples include: flight delayed, hotel booked, appointment reminders.)",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "AGENTS_FRANCHISES",
_126
"name": "Agents and Franchises",
_126
"description": "For brands that have multiple agents, franchises or offices in the same brand vertical, but require individual localised numbers per agent/location/office.",
_126
"post_approval_required": true
_126
},
_126
{
_126
"code": "CHARITY",
_126
"name": "Charity",
_126
"description": "Includes: 5013C Charity
_126
Does not include: Religious organizations",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "PROXY",
_126
"name": "Proxy",
_126
"description": "Peer-to-peer app-based group messaging with proxy/pooled numbers (For example: GroupMe)
_126
Supporting personalized services and non-exposure of personal numbers for enterprise or A2P communications. (Examples include: Uber and AirBnb.)",
_126
"post_approval_required": true
_126
},
_126
{
_126
"code": "CUSTOMER_CARE",
_126
"name": "Customer Care",
_126
"description": "All customer care messaging, including account management and support",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "DELIVERY_NOTIFICATION",
_126
"name": "Delivery Notification",
_126
"description": "Information about the status of the delivery of a product or service",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "EMERGENCY",
_126
"name": "Emergency",
_126
"description": "Notification services designed to support public safety / health during natural disasters, armed conflicts, pandemics and other national or regional emergencies",
_126
"post_approval_required": true
_126
},
_126
{
_126
"code": "FRAUD_ALERT",
_126
"name": "Fraud Alert Messaging",
_126
"description": "Fraud alert notification",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "HIGHER_EDUCATION",
_126
"name": "Higher Education",
_126
"description": "For campaigns created on behalf of Colleges or Universities and will also include School Districts etc that fall outside of any \"free to the consumer\" messaging model",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "K12_EDUCATION",
_126
"name": "K-12 Education",
_126
"description": "Campaigns created for messaging platforms that support schools from grades K-12 and distance learning centers. This is not for Post-Secondary schools.",
_126
"post_approval_required": true
_126
},
_126
{
_126
"code": "LOW_VOLUME",
_126
"name": "Low Volume Mixed",
_126
"description": "Low throughput, any combination of use-cases. Examples include: test, demo accounts",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "MARKETING",
_126
"name": "Marketing",
_126
"description": "Any communication with marketing and/or promotional content",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "MIXED",
_126
"name": "Mixed",
_126
"description": "Mixed messaging reserved for specific consumer service industry",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "POLITICAL",
_126
"name": "Political",
_126
"description": "Part of organized effort to influence decision making of specific group. All campaigns to be verified",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "POLLING_VOTING",
_126
"name": "Polling and voting",
_126
"description": "Polling and voting",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "PUBLIC_SERVICE_ANNOUNCEMENT",
_126
"name": "Public Service Announcement",
_126
"description": "An informational message that is meant to raise the audience awareness about an important issue",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "SECURITY_ALERT",
_126
"name": "Security Alert",
_126
"description": "A notification that the security of a system, either software or hardware, has been compromised in some way and there is an action you need to take",
_126
"post_approval_required": false
_126
},
_126
{
_126
"code": "SOCIAL",
_126
"name": "Social",
_126
"description": "Communication within or between closed communities (For example: influencers alerts)",
_126
"post_approval_required": true
_126
},
_126
{
_126
"code": "SWEEPSTAKE",
_126
"name": "Sweepstake",
_126
"description": "Sweepstake",
_126
"post_approval_required": true
_126
}
_126
]
_126
}
Choose the Use Case that best aligns with your customer's business needs. This is used in the next step.
5.2 Create A2P Campaign
This step creates the UsAppToPerson resource. When you create this resource, you provide details about your customer's Campaign, such as how message recipients opt in and out, ask for help, and what the messages typically contain.
(warning)
Warning
Do not complete this step until the BrandRegistration's status is APPROVED.
Businesses managing their own opt-out, opt-in, and help keywords need to provide additional information when registering a Campaign. Check out the UsAppToPerson resource doc for an example.
description: 'Send marketing messages about sales and offers',
_19
messageFlow: 'End users opt in by visiting www.example.com, creating a new user account, consenting to receive marketing messages via text, and providing a valid mobile phone number.',
"description": "Send marketing messages about sales and offers",
_53
"message_samples": [
_53
"Message Sample 1",
_53
"Message Sample 2"
_53
],
_53
"us_app_to_person_usecase": "MARKETING",
_53
"has_embedded_links": true,
_53
"has_embedded_phone": true,
_53
"subscriber_opt_in": true,
_53
"age_gated": false,
_53
"direct_lending": false,
_53
"campaign_status": "PENDING",
_53
"campaign_id": "CFOOBAR",
_53
"is_externally_registered": false,
_53
"rate_limits": {
_53
"att": {
_53
"mps": 600,
_53
"msg_class": "A"
_53
},
_53
"tmobile": {
_53
"brand_tier": "TOP"
_53
}
_53
},
_53
"message_flow": "End users opt in by visiting www.example.com, creating a new user account, consenting to receive marketing messages via text, and providing a valid mobile phone number.",
_53
"opt_in_message": "Acme Corporation: You are now opted-in. For help, reply HELP. To opt-out, reply STOP",
_53
"opt_out_message": "You have successfully been unsubscribed. You will not receive any more messages from this number. Reply START to resubscribe.",
_53
"help_message": "Reply STOP to unsubscribe. Msg&Data Rates May Apply.",
You can create up to five Campaigns per Brand, unless a clear and valid business reason is provided for exceeding this limit.
6. Add a phone number to the A2P 10DLC Messaging Service
Before your customer can begin sending A2P 10DLC messages, a 10DLC number must be added to the Messaging Service. Read the Messaging Service PhoneNumber resource doc for more information.
Additional resources
Fetch a Campaign - Use this API request to check a Campaign's registration status.