Sole Proprietor registration enables individuals and small businesses without a federal Tax ID (EIN) to register for 10DLC messaging. This guide covers the API workflow for creating Sole Proprietor brands, completing OTP verification, and managing campaigns programmatically.
Overview
Sole Proprietor brands have specific constraints compared to standard business brands:
| Constraint | Limit |
|---|
| Campaigns per brand | 1 |
| Phone numbers per campaign | 1 |
| Mobile phone reuse | Max 3 SP brands per mobile number |
| Throughput | Low-volume (varies by carrier) |
Sole Proprietor registration requires identity verification via SMS OTP before campaigns can be created.
Prerequisites
- Telnyx account with API access
- At least one US 10DLC phone number
- Valid US/CA mobile phone number for OTP verification
- Personal information: name, address, date of birth
Registration Flow
Step 1: Create a Sole Proprietor Brand
Create a brand with entityType set to SOLE_PROPRIETOR:
Valid vertical values include: PROFESSIONAL, REAL_ESTATE, HEALTHCARE, RETAIL, ENTERTAINMENT, EDUCATION, NONPROFIT, GOVERNMENT, and others. See the Brand API Reference for the full list.
curl -X POST https://api.telnyx.com/v2/10dlc/brand \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"entityType": "SOLE_PROPRIETOR",
"firstName": "Jane",
"lastName": "Smith",
"displayName": "Jane Smith Consulting",
"email": "[email protected]",
"phone": "+12025551234",
"mobilePhone": "+12025559876",
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"postalCode": "78701",
"country": "US",
"vertical": "PROFESSIONAL"
}'
Response
{
"brandId": "f5586561-8ff0-4291-a0ac-84fe544797bd",
"entityType": "SOLE_PROPRIETOR",
"displayName": "Jane Smith Consulting",
"firstName": "Jane",
"lastName": "Smith",
"identityStatus": "PENDING",
"mobilePhone": "+12025559876",
"createdAt": "2026-02-03T12:00:00Z"
}
The brand will remain in PENDING identity status until OTP verification is completed. You cannot create campaigns until the brand is VERIFIED.
Step 2: Trigger OTP Verification
Send an OTP PIN to the mobile phone associated with the brand:
curl -X POST https://api.telnyx.com/v2/10dlc/brand/{brand_id}/smsOtp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"pinSms": "Your Telnyx verification code is @OTP_PIN@. This code expires in 24 hours.",
"successSms": "Your Telnyx 10DLC brand has been verified successfully."
}'
Request Parameters
| Parameter | Type | Required | Description |
|---|
pinSms | string | Yes | SMS message containing @OTP_PIN@ placeholder (max 500 chars) |
successSms | string | Yes | Confirmation SMS sent after successful verification (max 500 chars) |
Response
{
"brandId": "f5586561-8ff0-4291-a0ac-84fe544797bd",
"referenceId": "OTP8A3B2C"
}
The @OTP_PIN@ placeholder in pinSms will be replaced with the actual 6-digit PIN when the SMS is sent.
Step 3: Check OTP Status
Poll the OTP status to confirm delivery:
curl -X GET https://api.telnyx.com/v2/10dlc/brand/{brand_id}/smsOtp \
-H "Authorization: Bearer YOUR_API_KEY"
Response
{
"brandId": "f5586561-8ff0-4291-a0ac-84fe544797bd",
"referenceId": "OTP8A3B2C",
"mobilePhone": "+12025559876",
"requestDate": "2026-02-03T12:05:00Z",
"verifyDate": null,
"deliveryStatus": "DELIVERED_HANDSET",
"deliveryStatusDate": "2026-02-03T12:05:02Z",
"deliveryStatusDetails": "Delivered to handset"
}
Delivery Status Values
| Status | Description |
|---|
PENDING | OTP request submitted, awaiting delivery |
DELIVERED_HANDSET | SMS delivered to the mobile device |
DELIVERY_FAILED | SMS delivery failed |
VERIFIED | OTP PIN successfully verified |
EXPIRED | OTP PIN expired (24-hour window) |
Step 4: Verify OTP PIN
After the user receives and provides the PIN, verify it:
curl -X POST https://api.telnyx.com/v2/10dlc/brand/{brand_id}/smsOtp/verify \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"otpPin": "123456"
}'
Upon successful verification:
- The brand
identityStatus changes to VERIFIED
- The
successSms message is sent to the mobile phone
- The brand registration fee is charged
- You can now create campaigns
Step 5: Create a Sole Proprietor Campaign
With a verified brand, create a campaign using the SOLE_PROPRIETOR usecase:
Sample messages (sample1, sample2) are required for campaign approval. Include realistic examples of messages you’ll send.
curl -X POST https://api.telnyx.com/v2/10dlc/campaignBuilder \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"brandId": "f5586561-8ff0-4291-a0ac-84fe544797bd",
"usecase": "SOLE_PROPRIETOR",
"description": "Customer appointment reminders and booking confirmations for consulting services.",
"messageFlow": "Customers opt-in via web form when booking appointments. They receive confirmation and reminder messages.",
"helpMessage": "Reply HELP for assistance. Contact [email protected]",
"optoutMessage": "Reply STOP to unsubscribe from messages.",
"sample1": "Hi Jane, this is a reminder of your appointment tomorrow at 2pm.",
"sample2": "Your booking for March 15th has been confirmed. Reply STOP to opt out.",
"termsAndConditions": true
}'
Response
{
"campaignId": "c5e5e598-95b3-4076-bfe2-c7d2c58ec57f",
"brandId": "f5586561-8ff0-4291-a0ac-84fe544797bd",
"usecase": "SOLE_PROPRIETOR",
"status": "ACTIVE",
"description": "Customer appointment reminders and booking confirmations for consulting services.",
"createdAt": "2026-02-03T12:30:00Z"
}
Sole Proprietor campaigns are typically auto-approved and become ACTIVE immediately. Standard campaigns may require carrier review.
Step 6: Assign a Phone Number
Assign your 10DLC number to the campaign:
curl -X POST https://api.telnyx.com/v2/10dlc/phone_number_campaigns \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"phoneNumber": "+12025551234",
"campaignId": "campaign_id_here"
}'
Sole Proprietor campaigns can only have one phone number assigned. Attempting to assign additional numbers will return an error.
Error Handling
Common Errors
| Error | Cause | Solution |
|---|
Sole Proprietor brands can only have one active campaign | Attempting to create a second campaign | Delete or deactivate existing campaign first |
Sole Proprietor campaigns can only have one phone number assigned | Attempting to assign multiple numbers | Use only one number per SP campaign |
Cannot associate campaign with brand in pending or failed status | Brand not verified | Complete OTP verification first |
OTP PIN expired | 24-hour verification window exceeded | Trigger a new OTP with POST /10dlc/brand/{id}/smsOtp |
Retrying OTP
If the OTP expires or the user needs a new PIN, simply call the trigger endpoint again:
curl -X POST https://api.telnyx.com/v2/10dlc/brand/{brand_id}/smsOtp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"pinSms": "Your new Telnyx verification code is @OTP_PIN@. This code expires in 24 hours.",
"successSms": "Your Telnyx 10DLC brand has been verified successfully."
}'
Fees
| Item | Amount | Frequency |
|---|
| Brand Registration | $4.00 | One-time (charged after verification) |
| Campaign Vetting | $15.00 | Per submission |
| Monthly Maintenance | $2.00 | Monthly |
Webhooks
Subscribe to brand and campaign status updates via webhooks. See 10DLC Event Notifications for details on:
10dlc.brand.update — Brand status and identity verification changes
10dlc.campaign.update — Campaign approval/rejection
10dlc.phone_number.update — Phone number assignment status
Next Steps