Register A2P 10DLC Campaign

Register your messaging campaign for A2P 10DLC compliance after brand approval with CloudContactAI.

Register your messaging campaign after brand approval to define your SMS use case and message flow.

Overview

Campaign registration is the second step in A2P 10DLC compliance. After your brand is approved, you must register each messaging campaign to describe how you intend to use SMS. This tells carriers what type of messages you will send, how customers opt in, and what your messages look like.

Prerequisites

  • An approved brand registration (see Register Brand)
  • Your brand ID from the brand registration response
  • 2 to 5 sample messages that represent your campaign's content
  • A defined opt-in flow describing how contacts consent to receive messages

Register Your Campaign

Base URL: https://compliance.cloudcontactai.com/api

Endpoint:

POST /v1/campaigns

JavaScript (SDK):

const campaign = await ccai.campaigns.create({
  brandId: 123,
  useCase: "MARKETING",
  description: "Promotional messages for opted-in customers",
  messageFlow: "Customers opt-in via web form and receive promotional SMS",
  hasEmbeddedLinks: true,
  hasEmbeddedPhone: false,
  isAgeGated: false,
  isDirectLending: false,
  optInKeywords: ["START", "YES"],
  optInMessage: "You are now subscribed to updates from Your Company. Reply STOP to unsubscribe, HELP for help.",
  optInProofUrl: "https://www.yourcompany.com/sms-opt-in",
  helpKeywords: ["HELP", "INFO"],
  helpMessage: "Reply HELP for assistance. Contact [email protected] or call 1-800-555-0123.",
  optOutKeywords: ["STOP", "CANCEL", "UNSUBSCRIBE"],
  optOutMessage: "You have been unsubscribed and will no longer receive messages. Reply START to re-subscribe.",
  sampleMessages: [
    "Hi Jane, check out our latest deals at https://example.com. Reply STOP to opt out.",
    "Your order #12345 has shipped! Track it here: https://example.com/track. Reply HELP for help."
  ]
});

console.log(`Campaign ID: ${campaign.id}`);

cURL:

curl -X POST https://compliance.cloudcontactai.com/api/v1/campaigns \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "brandId": 123,
    "useCase": "MARKETING",
    "description": "Promotional messages for opted-in customers",
    "messageFlow": "Customers opt-in via web form and receive promotional SMS",
    "hasEmbeddedLinks": true,
    "hasEmbeddedPhone": false,
    "isAgeGated": false,
    "isDirectLending": false,
    "optInKeywords": ["START", "YES"],
    "optInMessage": "You are now subscribed to updates from Your Company. Reply STOP to unsubscribe, HELP for help.",
    "optInProofUrl": "https://www.yourcompany.com/sms-opt-in",
    "helpKeywords": ["HELP", "INFO"],
    "helpMessage": "Reply HELP for assistance. Contact [email protected] or call 1-800-555-0123.",
    "optOutKeywords": ["STOP", "CANCEL", "UNSUBSCRIBE"],
    "optOutMessage": "You have been unsubscribed and will no longer receive messages. Reply START to re-subscribe.",
    "sampleMessages": [
      "Hi Jane, check out our latest deals at https://example.com. Reply STOP to opt out.",
      "Your order #12345 has shipped! Track it here: https://example.com/track. Reply HELP for help."
    ]
  }'

Request Parameters

FieldTypeRequiredDescription
brandIdintegerYesThe brand ID from your approved brand registration
useCasestringYesThe campaign use case type (see options below)
descriptionstringYesA clear description of what your campaign does
messageFlowstringYesHow contacts opt in and what messages they receive
hasEmbeddedLinksbooleanYesWhether messages contain URLs
hasEmbeddedPhonebooleanYesWhether messages contain phone numbers
isAgeGatedbooleanYesWhether content is age-restricted
isDirectLendingbooleanYesWhether campaign involves direct lending
optInKeywordsarrayYesKeywords that trigger opt-in (e.g., ["START", "YES"])
optInMessagestringYesMessage sent when a contact opts in
optInProofUrlstringYesURL showing your opt-in mechanism (must start with http:// or https://)
helpKeywordsarrayYesKeywords that trigger help (e.g., ["HELP", "INFO"])
helpMessagestringYesMessage sent when a contact replies with a help keyword
optOutKeywordsarrayYesKeywords that trigger opt-out (e.g., ["STOP", "CANCEL"])
optOutMessagestringYesMessage sent when a contact opts out (must contain "STOP" or one of your optOutKeywords)
sampleMessagesarrayYes2 to 5 sample messages representative of your campaign
subUseCasesarrayConditionalRequired for MIXED/LOW_VOLUME_MIXED (2-3 sub use cases)
termsLinkstringNoURL to your terms of service
privacyLinkstringNoURL to your privacy policy

Supported Use Cases

  • TWO_FACTOR_AUTHENTICATION
  • ACCOUNT_NOTIFICATION
  • CUSTOMER_CARE
  • DELIVERY_NOTIFICATION
  • FRAUD_ALERT
  • HIGHER_EDUCATION
  • LOW_VOLUME_MIXED
  • MARKETING
  • MIXED
  • POLLING_VOTING
  • PUBLIC_SERVICE_ANNOUNCEMENT
  • SECURITY_ALERT

Supported Sub Use Cases (for MIXED/LOW_VOLUME_MIXED)

  • TWO_FACTOR_AUTHENTICATION
  • ACCOUNT_NOTIFICATION
  • CUSTOMER_CARE
  • DELIVERY_NOTIFICATION
  • FRAUD_ALERT
  • MARKETING
  • POLLING_VOTING

Response

{
  "id": 789,
  "accountId": 456,
  "brandId": 123,
  "useCase": "MARKETING",
  "description": "Promotional messages for opted-in customers",
  "messageFlow": "Customers opt-in via web form and receive promotional SMS",
  "monthlyFee": 10.00,
  "createdAt": "2026-08-10T15:30:00Z",
  "updatedAt": "2026-08-10T15:30:00Z"
}

Other Campaign Endpoints

OperationMethodEndpoint
List campaignsGET/v1/campaigns
Get campaignGET/v1/campaigns/{id}
Update campaignPATCH/v1/campaigns/{id}
Delete campaignDELETE/v1/campaigns/{id}

Validation Rules

  • sampleMessages must contain 2 to 5 items
  • At least one sample message must contain "Reply STOP" or "Reply {optOutKeyword}"
  • At least one sample message must contain "Reply HELP" or "Reply {helpKeyword}"
  • optOutMessage must contain "STOP" or one of your optOutKeywords
  • helpMessage must contain "HELP" or one of your helpKeywords
  • optInProofUrl, termsLink, and privacyLink must start with http:// or https://
  • MIXED and LOW_VOLUME_MIXED use cases require 2 to 3 subUseCases

What Happens Next

After submitting your campaign registration:

  1. Your campaign is created and stored
  2. Review typically takes 1 to 5 business days
  3. Once approved, your campaign is active and messages will benefit from improved throughput
  4. If rejected, review the rejection reason and resubmit with corrections

Use the Check Registration Status endpoint to monitor your campaign approval.


Did this page help you?