# Event subscriptions
## Event subscription
The information in the `event_subscription` section of the manifest JSON represents the values on the **Access** > **Event Subscriptions** page of the app build flow.
This feature allows you to subscribe to interested events and receive Webhook notifications.
For more information, refer to the [webhooks](/docs/api/webhooks/) documentation for the specific product.
> **Challenge-response**
>
> Zoom App Marketplace uses Challenge-response check to confirm the ownership and the security of the event notification endpoint URLs. For more information, see [Validating your webhook endpoint](/docs/api/webhooks/#validate-your-webhook-endpoint/) about building response to the challenge to validate your URLs.
## Manifest JSON
```json
{
"features": {
// ......
"event_subscription": {
"enable": true,
"events": [
{
"subscription_name": "subscription_name",
"event_types": ["meeting.started", "meeting.ended"],
"development_webhook_url": "",
"production_webhook_url": "",
"development_event_custom_header": {
"custom_header_type": 0, // 0-DEFAULT, 1-BASE_AUTH, 2-OAUTH, 3-CUSTOM_kEY_VALUE
"username": "",
"password": "",
"client_id": "",
"client_secret": "",
"token_url": "",
"custom_header_key": "",
"custom_header_value": ""
},
"production_event_custom_header": {
"custom_header_type": 0, // 0-DEFAULT, 1-BASE_AUTH, 2-OAUTH, 3-CUSTOM_kEY_VALUE
"username": "",
"password": "",
"client_id": "",
"client_secret": "",
"token_url": "",
"custom_header_key": "",
"custom_header_value": ""
}
}
]
}
// ......
}
}
```
## Field Description
| Field | Description | Required |
| :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- |
| `enable` | This feature allows you to subscribe to interested events and receive Webhook notifications. | No |
| `events[].subscription_id` | The primary key of subscription | Yes (when updating subscription) |
| `events[].subscription_name` | Name this particular event subscription. | Yes (if `enable` = true) |
| `events[].development_webhook_url` | Provide a URL to receive subscribed event notifications. This is for testing in your local environment. | Yes (if `enable` = true) |
| `events[].production_webhook_url` | Provide a URL to receive subscribed event notifications. This is for testing in your local environment. | No |
| `events[].event_types` | Add events for your app to subscribe. Any corresponding scopes related to specific events will be automatically selected. | Yes (if `enable` = true) |
| `events[].event_usage` | Event notification receiver
This feature is only available for account level apps. | No |
| `events[].communicate_type` | Event communicate type: `WEB_HOOK`, `WEB_SOCKET` | No
`WEB_HOOK` by default |
| `events[].developmentEventCustomHeader.custom_header_type` | Use the custom authentication header method to validate Zoom webhook notifications.
0-DEFAULT, 1-BASE_AUTH, 2-OAUTH, 3-CUSTOM_KEY_VALUE | No |
| `events[].developmentEventCustomHeader.username` | Basic Authentication
It can be used when customHeaderType is 1-BASE_AUTH | No
Required when customHeaderType = 1 |
| `events[].developmentEventCustomHeader.password` | Basic Authentication
It can be used when customHeaderType is 1-BASE_AUTH | No
Required when customHeaderType = 1 |
| `events[].developmentEventCustomHeader.client_id` | Token Authentication
It can be used when customHeaderType is 2-OAUTH | No
Required when customHeaderType = 2 |
| `events[].developmentEventCustomHeader.client_secret` | Token Authentication
It can be used when customHeaderType is 1-BASE_AUTH | No
Required when customHeaderType = 2 |
| `events[].developmentEventCustomHeader.custom_header_key` | Custom Header
It can be used when customHeaderType is 3-CUSTOM_KEY_VALUE | No
Required when customHeaderType = 3 |
|