# Events

Most 10DLC status changes are asynchronous; you can create a webhook subscription to listen to status change events (see API details [here](https://docs.messagebird.com/api/notifications-api/api-reference/webhooks/create-a-webhook-subscription))&#x20;

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).

```
  "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 for`REJECTED` brand status it is possible to fetch the rejection reason [by getting the brand object](https://docs.bird.com/api/numbers-api/api-reference/10dlc-compliance/brands-workspace/get-a-brand). Rejection reasons are not always available for all brand rejections.&#x20;

```
  "rejection": {
    "description": "text"
  }
```

{% hint style="info" %}
Rejection descriptions are part of the brand objects but NOT the brand status events
{% endhint %}

### 10dlc.campaign

This event refers to the campaign status changes (you can read more about campaign status [here](https://app.gitbook.com/s/U9kiDiTGVD8kkbnKKyEn/channels/channels/supported-channels/sms/concepts/united-states-sms-registration/sms-10dlc/campaign-registration#campaign-status) )  .

```
  "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](https://docs.bird.com/api/numbers-api/api-reference/10dlc-compliance/campaigns/get-a-campaign)&#x20;

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](https://docs.bird.com/applications/enable-channels/sms/sms-10dlc/campaign-registration#campaign-decline-reasons));&#x20;

```
  "rejection": {
    "description": "text"
  }
```

{% hint style="info" %}
Rejection descriptions are part of the campaign objects but NOT of the campaign status events
{% endhint %}

### 10dlc.vetting

This event refers to brand vetting status changes (you can read more about vetting status [here](https://app.gitbook.com/s/U9kiDiTGVD8kkbnKKyEn/channels/channels/supported-channels/sms/concepts/united-states-sms-registration/sms-10dlc/brand-registration#vetting-status) )  .

```
{
  "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 for`REJECTED` vetting status it is possible to fetch the rejection reason [by listing all vetting](https://docs.bird.com/api/numbers-api/api-reference/10dlc-compliance/brands-workspace/list-brand-vettings) for a given brand

```
  "rejection": {
    "description": "text"
  }
```

{% hint style="info" %}
Rejection descriptions are part of the Vetting objects but NOT of the rejection events
{% endhint %}
