10DLC is a system in the United States that allows businesses to send Application-to-Person (A2P) messaging via 10-digit-long-codes (10DLC). It uses a dedicated 10-digit telephone number allocated within the North American Numbering Plan (NANP).
In order to register for a 10DLC campaign, you need to have a 10DLC enabled brand. Create a 10DLC enabled brand before you start, see Brand Registrations for more info.
Before you launch your 10DLC message program, Sinch must review your campaign. We make sure your message program aligns with carrier and industry requirements. Principally we look for alignment with the CTIA 2023 Messaging Principals & Best Practices. If your campaign does not meet these requirements, we will reject it. If we do reject it, you will need to make changes to the campaign and resubmit it for Sinch to review again.
It's important to understand 10DLC compliance requirements as well as other best practices. You should also know the most common reasons why Sinch may reject your campaign . We want to help you get your campaigns approved the first time. Then you can get your message program up and running right away!
Create a 10DLC campaign at TCR (The Campaign Registry).
Campaign fees and carrier requirements are determined by the brand and use-case being used. To check the campaign requirements, use the campaign:qualify API.
projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
brandId required | string <= 8 characters The brand is the company or entity represented in the campaign. The brand ID is an alphanumeric identifier that always begins with a "B". When registering a brand in The Campaign Registry (TCR), TCR returns a brand ID value, example: BESINCH. For more info, see Brand Registrations. |
useCase required | string (Campaign Usecase Type) Select a use case that is the primary use case that is most applicable to the service that messages are providing to subscribers. Standard use cases are immediately available for all qualified registered brands, whereas special use cases require vetting or pre/post approval by mobile network operators (MNOs). Special use cases are sensitive or critical in nature and may require vetting or pre/post registration approval by mobile network operators (MNOs). Requirements may vary according to each MNO. For more information on standard use case versus special use case campaigns, see 10DLC Use Cases - Standard Use Cases vs Special Use Cases. |
campaignName required | string <= 128 characters This is an optional name to help track and view your campaign within Sinch's platform. Use a name that is easily recognizable, this will help you identify your campaign later within the Sinch customer dashboard. This name is not part of the campaign registration in TCR. |
description required | string [ 40 .. 4096 ] characters Describe in detail the service the message program is providing to the end user and the purpose of the brand's messages (i.e. appointment reminders, OTP alerts, etc.). The description should match the selected use case and identify who is sending the messages, who is receiving the messages, and why messages are being sent. |
sample1 required | string [ 20 .. 1024 ] characters Provide sample production message content. Include the Brand name and opt out instructions (e.g. Reply STOP to stop) in every message. If you have selected Mixed use case, please provide examples of each sub use case selected. |
sample2 required | string <= 1024 characters Message sample. Some campaign tiers require 2 or more message samples, depending on sub-usecases. |
sample3 required | string <= 1024 characters Message sample. Some campaign tiers require 3 or more message samples, depending on sub-usecases. |
stopMessage required | string [ 20 .. 255 ] characters Message sent in response to a STOP keyword. It must confirm that the end user has unsubscribed from the message program and will not receive any further messages. Include the brand name. You can also include customer care contact information (e.g. support email or phone number). |
optInMessage required | string [ 20 .. 255 ] characters Initial message that is sent confirming the end user's subscription. Include the brand name, opt-out instructions (reply STOP to stop), customer care instructions (reply HELP for help), message frequency (#msgs/mo, msg frequency varies, recurring messages, etc.) and the "message and data rates may apply" disclosure (Msg & Data rates may apply). |
helpMessage required | string [ 20 .. 255 ] characters Message sent in response to HELP. Include the brand name and additional customer care contact information (e.g. support email or phone number). |
autoRenewal required | boolean Default: true Will your campaign automatically renew? If "Yes", a monthly recurring fee will be charged to the account. If "No", only the initial setup fee will be charged, and the campaign will expire after three months unless it is reviewed manually. |
embeddedLink required | boolean Default: false Will your message content include a URL? Note that public URL shorteners are not allowed. |
embeddedPhone required | boolean Default: false Will your message content include embedded phone numbers? |
numberPool required | boolean Default: false Will your campaign support a number pool (more than 50 numbers)? If yes, your use case should clearly support the need for a number pool. For more info, see When should I use a number pool for my 10DLC campaign. |
ageGated required | boolean Default: false Will your traffic include any content related to age-restricted goods or services? If yes, you must implement an age gate verification process. |
directLending required | boolean Default: false Are you a financial institution engaged in direct, first-party lending to your customers? If yes, note that your campaign description should clearly indicate direct lending, even if your use case is not related to your lending services (e.g. OTP). |
subscriberOptIn required | boolean Default: true Will your campaign collect and process end user opt-ins? This is mandatory for all use cases, except for Machine-to-Machine. |
subscriberOptOut required | boolean Default: true Message sent in response to a STOP keyword. It must confirm that the end user has unsubscribed from the message program and will not receive any further messages. Include the brand name. You can also include customer care contact information (e.g. support email or phone number). |
subscriberHelp required | boolean Default: true Message sent in response to HELP. Include the brand name and additional customer care contact information (e.g. support email or phone number). |
optinKeywords required | string <= 255 characters If subscribers can opt-in via a keyword, enter keyword(s) here (alphanumeric comma separated values, no blank spaces). |
optoutKeywords required | string <= 255 characters Subscriber opt-out keywords. Default values are STOP, QUIT, END, CANCEL and UNSUBSCRIBE. If you accept additional opt-out keywords, you can enter them here (alphanumeric comma separated values, no blank spaces). |
helpKeywords required | string <= 255 characters Subscriber help keywords. Default value is HELP. If you accept additional help keywords, you can enter them here. (alphanumeric comma separated values, no blank spaces). |
messageFlow required | string [ 40 .. 2048 ] characters Provide instructions for how end users opt-in to receive messages. A compliant opt-in is critical to the approval of your campaign. Include all opt-in mechanisms (e.g. keyword/text-to-join, online form, point-of-sale (POS) system, verbal consent, interactive voice response (IVR) system, paper form) and a clear program description. The Call-to-Action should include opt-out instructions (reply STOP to stop), customer care instructions (reply HELP for help), message frequency (#msgs/mo, msg frequency varies, recurring messages, etc.) and message and data rates disclosure (Msg & Data rates may apply). |
vertical | string (Campaign Vertical Type) Deprecated This field has been deprecated and is no longer being captured. |
sample4 | string <= 1024 characters Message sample. Some campaign tiers require 4 or more message samples, depending on sub-usecases. |
subUseCases | Array of strings (v1alpha1CampaignSubUseCaseType) If you have selected a mixed use case, select all sub use cases that apply to your message program. Choose between 2 and 5 sub use cases for this campaign. The input(s) should be one of the accepted enum values. |
A successful response.
INVALID_ARGUMENT: If the input parameters are not valid
Over limit
INTERNAL: Internal server error. Typically, a server bug.
{- "brandId": "string",
- "useCase": "2FA",
- "campaignName": "string",
- "description": "stringstringstringstringstringstringstri",
- "sample1": "{Brand name}: We are contacting you today to let you know your order is ready for pickup. Reply STOP to stop.",
- "sample2": "{Brand name}: Your confirmation code is SINCH1234. Please enter it on the authentication website. Reply STOP to stop.",
- "sample3": "{Brand name}: Shop at www.example.com for all your retail needs! From clothing to home goods, we've got you covered. Visit us today and save! Reply STOP to stop. ",
- "stopMessage": "You have been unsubscribed and will not receive any more messages from {Brand name}. For more information call {phone number} or email {email address}.",
- "optInMessage": "You have opted in to receive messages from {Brand name}! Msg freq varies. Msg & data rates may apply. Reply HELP for help. Reply STOP to stop.",
- "helpMessage": "{Brand name}: For help call {phone number} or email {email address} Reply STOP to stop.",
- "autoRenewal": true,
- "embeddedLink": false,
- "embeddedPhone": false,
- "numberPool": false,
- "ageGated": false,
- "directLending": false,
- "subscriberOptIn": true,
- "subscriberOptOut": true,
- "subscriberHelp": true,
- "optinKeywords": "Join,Subscribe,Agree",
- "optoutKeywords": "Stop,Quit,Cancel",
- "helpKeywords": "Help,Info",
- "messageFlow": "Users will opt-in to receive messages from {Brand name} via {opt-in mechanism}"
}
{- "campaignRegistrationId": "string"
}
Returns the details of the specified campaign by its registration ID.
projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
campaignRegistrationId required | string Campaign Registration Id returned by the create campaign API. |
A successful response.
INVALID_ARGUMENT: If the input parameters are not valid
The campaign could not be found
Over limit
INTERNAL: Internal server error. Typically, a server bug.
{- "campaignId": "string",
- "campaignName": "string",
- "campaignRegistrationId": "string",
- "createDate": "2019-08-24T14:15:22Z",
- "modifiedDate": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "modifiedBy": "string",
- "autoRenewal": true,
- "billedDate": "2019-08-24T14:15:22Z",
- "brandId": "string",
- "vertical": "string",
- "useCase": "string",
- "subUseCases": [
- "string"
], - "description": "string",
- "embeddedLink": true,
- "embeddedPhone": true,
- "affiliateMarketing": true,
- "numberPool": true,
- "ageGated": true,
- "directLending": true,
- "subscriberOptIn": true,
- "subscriberOptOut": true,
- "subscriberHelp": true,
- "sample1": "string",
- "sample2": "string",
- "sample3": "string",
- "sample4": "string",
- "stopMessage": "string",
- "optInMessage": "string",
- "helpMessage": "string",
- "monthlyFee": 0.1,
- "setupFee": 0.1,
- "status": "string",
- "mnoMetadata": {
- "property1": {
- "mno": "string",
- "status": "string",
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}, - "property2": {
- "mno": "string",
- "status": "string",
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}
}, - "mock": true,
- "lastActionStatus": "string",
- "optinKeywords": "string",
- "optoutKeywords": "string",
- "helpKeywords": "string",
- "messageFlow": "string",
- "nextRenewalOrExpirationDate": "string"
}
Returns the specified campaign by its TCR Campaign ID.
projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
A successful response.
INVALID_ARGUMENT: If the input parameters are not valid
The campaign could not be found
Over limit
INTERNAL: Internal server error. Typically, a server bug.
{- "campaignId": "string",
- "campaignName": "string",
- "campaignRegistrationId": "string",
- "createDate": "2019-08-24T14:15:22Z",
- "modifiedDate": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "modifiedBy": "string",
- "autoRenewal": true,
- "billedDate": "2019-08-24T14:15:22Z",
- "brandId": "string",
- "vertical": "string",
- "useCase": "string",
- "subUseCases": [
- "string"
], - "description": "string",
- "embeddedLink": true,
- "embeddedPhone": true,
- "affiliateMarketing": true,
- "numberPool": true,
- "ageGated": true,
- "directLending": true,
- "subscriberOptIn": true,
- "subscriberOptOut": true,
- "subscriberHelp": true,
- "sample1": "string",
- "sample2": "string",
- "sample3": "string",
- "sample4": "string",
- "stopMessage": "string",
- "optInMessage": "string",
- "helpMessage": "string",
- "monthlyFee": 0.1,
- "setupFee": 0.1,
- "status": "string",
- "mnoMetadata": {
- "property1": {
- "mno": "string",
- "status": "string",
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}, - "property2": {
- "mno": "string",
- "status": "string",
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}
}, - "mock": true,
- "lastActionStatus": "string",
- "optinKeywords": "string",
- "optoutKeywords": "string",
- "helpKeywords": "string",
- "messageFlow": "string",
- "nextRenewalOrExpirationDate": "string"
}
Before submitting a campaign, this API will provide some important feedback about how the resulting campaign will be treated. You can verify that the campaign will be supported by all operators, the AT&T message class and TPM, the T-Mobile brand daily bucket that will be applied and more.
It is suggested to validate that the operator restrictions will meet your needs prior to submitting the campaign request. Brand revettings do not automatically adjust operator restrictions, and in some cases a new campaign may have to be resubmitted to receive the adjusted MNO values.
projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
A successful response.
Invalid Brand ID
Over limit
INTERNAL: Internal server error. Typically, a server bug.
{- "useCase": "string",
- "monthlyFee": 0.1,
- "setupFee": 0.1,
- "minSubUseCases": 0,
- "maxSubUseCases": 0,
- "mnoMetadata": {
- "property1": {
- "mno": "string",
- "mnoSupport": true,
- "mnoReview": true,
- "qualify": true,
- "minMsgSamples": "string",
- "reqSubscriberOptIn": true,
- "reqSubscriberOptOut": true,
- "reqSubscriberHelp": true,
- "noEmbeddedLink": true,
- "noEmbeddedPhone": true,
- "surcharge": 0.1,
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}, - "property2": {
- "mno": "string",
- "mnoSupport": true,
- "mnoReview": true,
- "qualify": true,
- "minMsgSamples": "string",
- "reqSubscriberOptIn": true,
- "reqSubscriberOptOut": true,
- "reqSubscriberHelp": true,
- "noEmbeddedLink": true,
- "noEmbeddedPhone": true,
- "surcharge": 0.1,
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}
}
}
Deactivate a campaign by removing the campaign from TCR and OSR. A campaign cannot be restored once it is deactivated. New campaign status is EXPIRED.
projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
campaignRegistrationId required | string Campaign Registration Id returned by the create campaign API. |
A successful response.
INVALID_ARGUMENT: If the input parameters are not valid
The campaign could not be found
Over limit
INTERNAL: Internal server error. Typically, a server bug.
{ }
Lists all campaign registrations per project.
projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
{- "campaignRegistrations": [
- {
- "campaignId": "string",
- "campaignName": "string",
- "campaignRegistrationId": "string",
- "createDate": "2019-08-24T14:15:22Z",
- "modifiedDate": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "modifiedBy": "string",
- "autoRenewal": true,
- "billedDate": "2019-08-24T14:15:22Z",
- "brandId": "string",
- "vertical": "string",
- "useCase": "string",
- "subUseCases": [
- "string"
], - "description": "string",
- "embeddedLink": true,
- "embeddedPhone": true,
- "affiliateMarketing": true,
- "numberPool": true,
- "ageGated": true,
- "directLending": true,
- "subscriberOptIn": true,
- "subscriberOptOut": true,
- "subscriberHelp": true,
- "sample1": "string",
- "sample2": "string",
- "sample3": "string",
- "sample4": "string",
- "stopMessage": "string",
- "optInMessage": "string",
- "helpMessage": "string",
- "monthlyFee": 0.1,
- "setupFee": 0.1,
- "status": "string",
- "mnoMetadata": {
- "property1": {
- "mno": "string",
- "status": "string",
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}, - "property2": {
- "mno": "string",
- "status": "string",
- "msgClass": "string",
- "tpm": "string",
- "tpmScope": "string",
- "brandTier": "string",
- "brandDailyCap": "string"
}
}, - "mock": true,
- "lastActionStatus": "string",
- "optinKeywords": "string",
- "optoutKeywords": "string",
- "helpKeywords": "string",
- "messageFlow": "string",
- "nextRenewalOrExpirationDate": "string"
}
], - "nextPageToken": "string",
- "totalSize": 0
}
Returns feedback information for campaign registrations that were rejected. Campaign registrations could be rejected due to TCR error or any other internal error.
projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
campaignRegistrationId required | string Campaign Registration Id returned by the create campaign API. |
A successful response.
INVALID_ARGUMENT: If the input parameters are not valid
The campaign could not be found or if the requested campaign does not belong to the given project
Over limit
INTERNAL: Internal server error. Typically, a server bug.
{- "campaignRegistrationId": "string",
- "campaignId": "string",
- "status": "string",
- "tcrErrorResponse": [
- {
- "code": "string",
- "field": "string",
- "description": "string"
}
], - "internalErrorResponse": [
- {
- "code": "string",
- "description": "string"
}
]
}
"Resubmit a campaign to:
Please note that running this endpoint could potentially downgrade campaign business terms.
After hitting this endpoint, call the Get Campaign Registration API to to check lastActionStatus:
RESUBMIT_IN_PROGRESS, mno metadata not updated
, poll again.RESUBMIT_SUCCESSFUL
, get updated MNO metadata.RESUBMIT_FAILED
, call the Campaign Feedback API to know the reason for failure.projectId required | string Sinch uses projects to group resources such as contacts and apps together to manage and connect a unique set of keys and secret IDs for all your Sinch API products. To identify a project, it is given a unique alphanumeric identifier that ties it to your account. Your project ID can be found in the Customer Dashboard. |
campaignRegistrationId required | string Campaign Registration Id returned by the create campaign API. |
List of MNOs (ATT, TMO, USC, VZW) to resubmit a campaign in TCR. Default value for empty list: ALL, i.e. all MNOs.
A successful response.
INVALID_ARGUMENT: If the input parameters are not valid
The campaign could not be found or if the requested campaign does not belong to the given project
Over limit
INTERNAL: Internal server error. Typically, a server bug.
{ }
{ }