Check Registration Status
Monitor the status of your A2P 10DLC brand and campaign registrations with CloudContactAI.
Monitor your brand and campaign registration status to track your A2P 10DLC submissions.
Overview
After submitting brand and campaign registrations, you can programmatically retrieve their details and check their status. This is useful for automating your onboarding flow or building dashboards that track compliance readiness.
Base URL: https://compliance.cloudcontactai.com/api
Check Brand Status
Retrieve the details of a specific brand registration.
Endpoint:
GET /v1/brands/{id}
JavaScript (SDK):
const brand = await ccai.brands.get(123);
console.log(`Brand: ${brand.legalCompanyName}`);
console.log(`Created: ${brand.createdAt}`);
console.log(`Updated: ${brand.updatedAt}`);cURL:
curl -X GET https://compliance.cloudcontactai.com/api/v1/brands/123 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"Response:
{
"id": 123,
"accountId": 456,
"legalCompanyName": "Your Company LLC",
"entityType": "PRIVATE_PROFIT",
"taxId": "123456789",
"taxIdCountry": "US",
"country": "US",
"verticalType": "TECHNOLOGY",
"websiteUrl": "https://www.yourcompany.com",
"websiteMatchScore": null,
"street": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"contactFirstName": "Jane",
"contactLastName": "Smith",
"contactEmail": "[email protected]",
"contactPhone": "+14155551234",
"createdAt": "2026-08-10T15:00:00Z",
"updatedAt": "2026-08-12T10:00:00Z"
}List All Brands
Retrieve all brand registrations for your account.
Endpoint:
GET /v1/brands
JavaScript (SDK):
const brands = await ccai.brands.list();
brands.forEach(brand => {
console.log(`${brand.id}: ${brand.legalCompanyName}`);
});cURL:
curl -X GET https://compliance.cloudcontactai.com/api/v1/brands \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"Check Campaign Status
Retrieve the details of a specific campaign registration.
Endpoint:
GET /v1/campaigns/{id}
JavaScript (SDK):
const campaign = await ccai.campaigns.get(789);
console.log(`Campaign: ${campaign.useCase}`);
console.log(`Brand ID: ${campaign.brandId}`);
console.log(`Monthly Fee: $${campaign.monthlyFee}`);
console.log(`Created: ${campaign.createdAt}`);cURL:
curl -X GET https://compliance.cloudcontactai.com/api/v1/campaigns/789 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"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",
"hasEmbeddedLinks": true,
"hasEmbeddedPhone": false,
"isAgeGated": false,
"isDirectLending": false,
"optInKeywords": ["START", "YES"],
"optInMessage": "You are now subscribed. Reply STOP to unsubscribe.",
"optInProofUrl": "https://www.yourcompany.com/sms-opt-in",
"helpKeywords": ["HELP", "INFO"],
"helpMessage": "Reply HELP for assistance. Contact [email protected].",
"optOutKeywords": ["STOP", "CANCEL", "UNSUBSCRIBE"],
"optOutMessage": "You have been unsubscribed. 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! Reply HELP for help."
],
"monthlyFee": 10.00,
"createdAt": "2026-08-10T15:30:00Z",
"updatedAt": "2026-08-10T15:30:00Z"
}List All Campaigns
Retrieve all campaign registrations for your account.
Endpoint:
GET /v1/campaigns
JavaScript (SDK):
const campaigns = await ccai.campaigns.list();
campaigns.forEach(campaign => {
console.log(`${campaign.id}: ${campaign.useCase} (Brand: ${campaign.brandId})`);
});cURL:
curl -X GET https://compliance.cloudcontactai.com/api/v1/campaigns \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"Polling for Status Changes
If you need to monitor registrations for status changes, you can poll the endpoints at regular intervals.
JavaScript:
async function pollBrandStatus(brandId, intervalMs = 30000) {
let previousUpdatedAt = null;
while (true) {
const brand = await ccai.brands.get(brandId);
if (brand.updatedAt !== previousUpdatedAt) {
console.log(`Brand ${brand.id} updated at: ${brand.updatedAt}`);
previousUpdatedAt = brand.updatedAt;
}
console.log('Checking again in 30s...');
await new Promise(resolve => setTimeout(resolve, intervalMs));
}
}Python:
import time
import requests
def poll_brand(brand_id, api_key, interval=30):
previous_updated = None
while True:
response = requests.get(
f'https://compliance.cloudcontactai.com/api/v1/brands/{brand_id}',
headers={
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
)
brand = response.json()
if brand['updatedAt'] != previous_updated:
print(f"Brand {brand['id']} updated at: {brand['updatedAt']}")
previous_updated = brand['updatedAt']
print('Checking again in 30s...')
time.sleep(interval)Recommended Polling Intervals
- During testing: Every 30 to 60 seconds
- In production: Every 1 to 4 hours
Carrier review timelines vary. Brand reviews typically take 1 to 7 business days, and campaign reviews take 1 to 5 business days.
Updated 3 days ago

