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 the following webhook types:
- 10dlc.brand
- 10dlc.campaign
- 10dlc.vetting
10dlc.brand
This event refers to changes in brand status (you can read more about brand status here).
Esempio di codice
"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": "example@example.com",
"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.
Esempio di codice
"rejection": {
"description": "text"
}
Rejection descriptions are part of the brand objects but NOT the brand status events
10dlc.campaign
This event refers to the campaign status changes (you can read more about campaign status here ) .
Esempio di codice
"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 example@example.com. 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);
Esempio di codice
"rejection": {
"description": "text"
}
Rejection descriptions are part of the campaign objects but NOT of the campaign status events
10dlc.vetting
This event refers to brand vetting status changes (you can read more about vetting status here ) .
Esempio di codice
{
"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
Esempio di codice
"rejection": {
"description": "text"
}
Rejection descriptions are part of the Vetting objects but NOT of the rejection events