PreCheck - 10DLC
Rapid checks for SMS 10DLC Brand and Message Campaign Compliance
Introduction and Use Cases
Use the 10DLC PreCheck API to run KYC/KYB and compliance analyses on brand and 10DLC messaging campaign information. The API returns results within minutes so you can find compliance issues before formal review. Treat PreCheck results as guidance, not a guarantee of approval or rejection, because carriers, aggregators, and verification authorities each run their own review processes.
Different entities can use these APIs at different points in the Campaign Launch lifecycle:
-
CSPs / Texting Platforms
-
Catch potential launch issues before submitting to aggregators for onboarding
-
Reduce time to launch and internal review overhead
-
-
Aggregators
-
Run pre-flight checks before submitting to DCAs (if applicable), verification authorities, and carriers
-
Automate carrier-expected campaign compliance checks
-
API Workflow
At a high level, the workflow for a single PreCheck looks like this:
1. Client sends a PreCheck request
-
POSTwith JSON body containing brand, agent, and messaging details -
Specify which
analysisStepsto run -
Include a
callbackUrlwhere results should be delivered
Example 10DLC Request Payload
This example utilizes standard 10DLC parameters, featuring a retail marketing use case scenario complete with an EIN, 10DLC vertical declaration, and sub-use cases.
{
"externalProjectId": "crm-10dlc-acme-retail",
"callbackUrl": "https://api.yourplatform.com/v1/webhooks/texter-precheck",
"analysisSteps": [
"brand_background_check",
"brand_online_presence_check",
"poc_email_domain_check",
"privacy_policy_check",
"terms_of_service_check",
"opt_in_method_check",
"opt_in_message_check",
"opt_out_message_check",
"help_message_check",
"campaign_description_check",
"sample_messages_check",
"use_case_consistency_check",
"shaft_content_check",
"prohibited_use_case_check"
],
"legalName": "Acme Retail Group LLC",
"dbaName": "Acme Boutique",
"businessIdentifier": "98-7654321",
"registeredBusinessAddress": "789 Broadway St, New York, NY 10003",
"businessWebsiteUrl": "https://www.acme-boutique-example.com",
"brandPocEmail": "[email protected]",
"brandVerticalType": "RETAIL",
"privacyPolicyUrl": "https://www.acme-boutique-example.com/privacy",
"termsOfServiceUrl": "https://www.acme-boutique-example.com/terms",
"ageGated": false,
"optInMethods": [
"WEB_FORM"
],
"optInMethodURLs": [
"https://www.acme-boutique-example.com/join-club"
],
"optInDescription": "Customers explicitly opt-in via a standalone checkbox on our checkout and loyalty club enrollment web forms.",
"optInKeywords": [
"START"
],
"optInMessage": "Acme Boutique: Thank you for joining! Reply YES to opt in for exclusive style drops & sales. Freq max 4/mo. Msg&Data rates may apply. Reply STOP to cancel, HELP for help.",
"optOutKeywords": [
"STOP"
],
"optOutMessage": "Acme Boutique: You have been successfully opted out. You will no longer receive marketing text messages from us.",
"helpKeywords": [
"HELP"
],
"helpMessage": "Acme Boutique: For customer support, reply to this thread, email [email protected], or call 1-800-555-0144. Freq varies. Msg&Data rates may apply.",
"campaignDescription": "This campaign sends personalized promotional alerts, weekly discount codes, and invitations to exclusive shopping events to our opted-in loyalty club members.",
"useCase": "MARKETING",
"subUseCases": [
"PROMOTIONAL_ALERTS"
],
"directLending": false,
"affiliateMarketing": false,
"embeddedLink": "https://acme-boutique-example.com/discount",
"embeddedPhone": "+18005550144",
"sampleMessages": [
{
"content": "Acme Boutique: VIP Alert! Use code STYLE20 for 20% off your next online order. Shop now at https://acme-boutique-example.com/discount. Reply STOP to unsubscribe.",
"useCase": "PROMOTIONAL_ALERTS"
}
]
}2. Synchronous validation
-
The API validates the request immediately.
-
On success, the API returns:
-
projectId(TexterID project ID. Each PreCheck API call creates a newprojectId.) -
projectUrl(TexterID dashboard link. Open this page to view analysis results in real time.) -
analysisId(Specific ID for the analysis run.)
-
-
If synchronous validation fails, the API returns a
4xxwith issue details.
Example 200 OK Synchronous Success Response
Returned instantly when the 10DLC structural validations pass and the payload is successfully queued for parallel compliance processing.
{
"projectId": "proj_10dlc_7f9a2b4c",
"projectUrl": "https://dashboard.texterid.com/projects/proj_10dlc_7f9a2b4c",
"analysisId": "analysis_10dlc_8d3e2f1a"
}Potential validation issues include:
Invalid analysis steps provided or missing prerequisites
Missing required fields for an analysis step.
Example 400 Bad Request Synchronous Failure Response
Returned immediately if mandatory fields required for your selected 10DLC processing steps are missing or there is an issue with the request.
{
"errorCode": "VALIDATION_FAILED",
"errorMessage": "Synchronous payload check failed. Missing mandatory context fields required for your requested 10DLC analysis steps.",
"details": [
{
"issue": "The field 'businessIdentifier' (EIN) is required and must be formatted as XX-XXXXXXX when running 'brand_background_check'."
},
{
"issue": "The field 'brandVerticalType' must be populated with a valid 10DLC vertical registration classification when running 'prohibited_use_case_check'."
}
]
}3. Asynchronous analysis
-
The API runs the requested
analysisStepsin parallel after any prerequisite steps complete. -
The API sends a webhook request with the analysis results to the
callbackUrl.
Testing Callbacks
To test the results callback, you can use a service like Webhook.site — https://webhook.site
The callback URL must use HTTPS.
Analysis Steps
The analysisSteps array lets you choose which checks to run for a given PreCheck request.
Each step ID below can be included in the analysisSteps array:
Step ID | Description | Required Fields | Optional Fields | Depends on Steps |
|---|---|---|---|---|
| Submits the organization name, EIN, and address to a third-party verification service and returns the result. Feedback includes specific reasons for any failure, such as EIN mismatch, invalid EIN, or unresolvable address. |
| _` | — |
| Crawls the submitted website to produce a structured summary of the organization's commercial activities — primary products or services, industry, and market scope. Also verifies that the site resolves publicly and plausibly belongs to the submitting organization. |
| — | — |
| Verifies that the POC email address uses a domain consistent with the submitting organization's website. |
| _ |
|
| Verifies that the privacy policy URL is accessible, belongs to the submitting organization, and contains substantive privacy content. The policy must not be a template, placeholder or another company's policy. Checks for an explicit clause stating that the organization does not share SMS opt-in data or consent with third parties. If the URL is valid but the step cannot retrieve content, the step returns SKIPPED. |
|
| |
| Verifies that the TOS URL is accessible and contains substantive terms that belong to the submitting organization Checks for the required SMS elements: brand or program name, "message and data rates may apply", message frequency disclosure, STOP opt-out instructions, and HELP or support contact information. Checks that the TOS contains or links to a prohibition on sharing subscriber data with third parties for marketing purposes. Also checks that the TOS links to the privacy policy. If the URL is valid but the step retrieve content, the step returns SKIPPED. If |
|
| |
| Validates that the opt-in mechanism includes all required opt in disclosures: brand name, message type description, frequency disclosure, MDRA, HELP instructions, and STOP instructions. For For For |
| ||
| Checks that the opt-in confirmation message contains all five CTIA-required disclosure elements. Verifies that the message clearly identifies the brand using either the legal name or DBA name. Checks that the message tells the subscriber how to get help (HELP keyword or equivalent), how to opt out (STOP keyword or equivalent) and how often to expect messages. Also checks that the message includes the "message and data rates may apply" disclosure. |
| ||
| Checks that the STOP response message contains the brand name and confirms that the user has been unsubscribed. The message must also state that the user receives no further messages. Validates that |
| ||
| Evaluates whether the HELP response contains appropriate brand identification and a meaningful support contact. Validates that at least |
|
| |
| Checks that the campaign description clearly identifies the brand, explains the messaging program purpose, specifies who sends and who receives messages, and and is consistent with the declared use cases. |
| ||
| Checks each sample message for the following: brand or display name present; opt-out language in at least one message; public URL shorteners; and If Evaluates |
| ||
| Cross-checks the declared use case against the campaign description, sample messages, and website content to detect mismatches. Evaluates the messaging purpose implied by each input and compares against the declared use case. |
| ||
| Screens website content and sample messages for signals across SHAFT categories: Sex, Hate, Alcohol, Firearms, Tobacco/Vape, and Cannabis/CBD. Checks alcohol and tobacco content for age-gated requirements. |
| ||
| Checks website content and campaign description for prohibited use case signals: payday and short-term lending, cryptocurrency trading, MLM and pyramid schemes, debt relief services, third-party debt collection, high-risk financial content, affiliate marketing or lead generation, and third-party job board references. Also checks for an NMLS license number. Uses |
|
Scoring and Results
The callback provides an overall analysisResult value: PASS, FAIL or ERROR
PASS: the PreCheck passed analysis. The callback includes ananalysisScorefrom 0-100 andanalysisIssuesisnull. Currently, anyanalysisScoreabove 80 produces aPASS.FAIL: the PreCheck failed analysis. The callback includes ananalysisScorefrom 0-100 is provided, andanalysisIssuescontains one or more issues.ERROR: an error prevented the analysis from completing, possibly due to an internal issue. The callback includes anerrorCodeanderrorMessage. Treat this as an analysis error, not a compliance failure. Re-run PreCheck after the error is resolved.
External Project IDs
You can append an externalProjectId to a PreCheck API call. Use this field to reference your own internal project IDs for a brand or launch project. The API also attaches this externalProjectId to the callback when the analysis results are ready.
Authentication
-
Inbound Requests:Authenticate all requests to the PreCheck endpoint (see Request Authentication).
-
Outbound Callbacks: The callback to your system will be signed using the same shared secret (your API key) for HMAC verification. See Webhook Authentication for details.
Updated 3 days ago