Events
Most 10DLC status changes are asynchronous, you can create a webhook subscription to listen to status change events (see API details here)
10dlc supports three status change event webhook types
10dlc.brand
10dlc.campaign
10dlc.vetting
10dlc.brand
This event refers to the brand status changes (you can read more about brand status here ) .
"brand": {
"service": "numbers",
"event": "10dlc.brand",
"payload": {
"id": "example-brand-id",
"organizationId": "example-org-id",
"workspaceId": [
"example-workspace-id"
],
"status": "PENDING",
"entityType": "PRIVATE_PROFIT",
"firstName": "Example",
"lastName": "User",
"displayName": "Example SMS Brand",
"companyName": "Example Company",
"ein": "123456789",
"einIssuingCountry": "XX",
"phone": "+15551234567",
"street": "Example Street 123",
"city": "Example City",
"state": "Example State",
"postalCode": "12345",
"country": "XX",
"email": "[email protected]",
"website": "http://www.example.com",
"vertical": "TECHNOLOGY",
"altBusinessId": "",
"altBusinessIdType": "NONE",
"stockExchange": "NONE",
"stockSymbol": "",
"createdAt": "2025-03-27T08:39:48.091Z",
"updatedAt": "2025-03-27T08:39:48.091Z"
}
}
To get more information about the reason forREJECTED
brand status it is possible to fetch the rejection reason by getting the brand object. Rejection reasons are not always available for all brand rejections.
"rejection": {
"description": "text"
}
10dlc.campaign
This event refers to the campaign status changes (you can read more about campaign status here ) .
"campaign": {
"service": "numbers",
"event": "10dlc.campaign",
"payload": {
"id": "example-campaign-id",
"organizationId": "example-org-id",
"workspaceId": "example-workspace-id",
"name": "Example SMS Campaign",
"status": "PENDING",
"usecase": "LOW_VOLUME",
"subUsecases": [
"2FA",
"ACCOUNT_NOTIFICATION"
],
"description": "This is an example campaign description.",
"embeddedLink": false,
"embeddedPhone": false,
"numberPool": false,
"ageGated": false,
"directLending": false,
"subscriberOptin": true,
"subscriberOptout": true,
"subscriberHelp": true,
"samples": [
"Example: your OTP is 123456. Send STOP to unsubscribe",
"Example: your wallet needs to be topped up. Send STOP to unsubscribe"
],
"messageFlow": "Users can share their number as part of the notification setting. Only transactional events generate SMS notifications. See example terms: https://www.example.com/terms",
"helpMessage": "Example: For help write to [email protected]. Reply STOP to opt out of SMS, START to subscribe. Msg&data rates may apply",
"optoutKeywords": "STOP",
"helpKeywords": "HELP",
"optinKeywords": "START",
"optinMessage": "Example: You opted in to receive SMS. Reply HELP for help; STOP to opt-out. Msg&Data rates may apply",
"optoutMessage": "Example: You have OPTED-OUT from SMS. Send START to OPT-IN. Msg&data rates may apply.",
"termsAndConditions": true,
"brandId": "example-brand-id",
"createdAt": "2025-03-27T09:01:30.716Z",
"updatedAt": "2025-03-27T09:01:30.716Z"
}
}
}
To get more information about the reason for DECLINED
the campaign status it is possible to fetch the rejection reason by getting the campaign object
For rejected campaigns only campaigns with DECLINED
status are eligible to be resubmitted. All other campaign rejections will require a new campaign to be created.
Campaign rejections are always accompanied by a reason (the full list of reasons can be found here);
"rejection": {
"description": "text"
}
10dlc.vetting
This event refers to brand vetting status changes (you can read more about vetting status here ) .
{
"brandVetting": {
"service": "numbers",
"event": "10dlc.brandVetting",
"payload": {
"ID": "example-brand-vetting-id",
"OrganizationID": "example-org-id",
"BrandID": "example-brand-id",
"ExternalID": "",
"Status": "PENDING",
"VettingProviderID": "",
"Token": "",
"Score": "",
"Class": "STANDARD",
"Reasons": null,
"createdAt": "2025-03-27T08:39:48.942Z",
"updatedAt": "2025-03-27T08:39:48.942Z"
}
}
To get more information about the reason forREJECTED
vetting status it is possible to fetch the rejection reason by listing all vetting for a given brand
"rejection": {
"description": "text"
}
Last updated
Was this helpful?