Marketplace
- OpenAPI Version:
3.1.1 - API Version:
2
The Marketplace APIs allow developers to access data related to their app and its usage in the marketplace.
Servers
- URL:
https://api.zoom.us/v2
Operations
Send app notifications
- Method:
POST - Path:
/app/notifications - Tags: App
Send app notifications to the Zoom Activity Center. (Note: This API endpoint only supports OAuth 2.0.)
Scopes: app:notification:read,app:notification:write
Granular Scopes: marketplace:write:notifications
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
messageobject— Message object, including text field-
textstring— App notification content.
-
-
notification_idstring— App-generated identifier. -
user_idstring— The user's unique identifier.
Example:
{
"notification_id": "0HTc4gWHRSCef82_KlfCOQ",
"message": {
"text": "hello, world!"
},
"user_id": "uGjCIsQsQ_KKW20xAkiHyw"
}
Responses
Status: 202 Success
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `400` <br> Invalid parameter: message <br> **Error Code:** `400` <br> Invalid parameter: text <br> **Error Code:** `400` <br> Invalid parameter: user_id <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `403` <br> Authenticated user has not permitted access to the targeted resource. <br> **Error Code:** `403` <br> App does not support notification feature. <br> **Error Code:** `403` <br> Account does not support notification feature. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Status: 500 **HTTP Status Code:** `500` <br> Internal Server Error **Error Code:** `500` <br> Notification request sending failed. <br>
Get user's custom field values
- Method:
GET - Path:
/marketplace/app/custom_fields - Tags: App
Get custom field values for user.
Scopes: marketplace_custom_fields:read,marketplace_custom_fields:read:admin
Granular Scopes: marketplace:read:custom_fields:admin,marketplace:read:custom_fields
Rate Limit Label: HEAVY
Responses
Status: 200 Returns app-level custom field values configured by the user. Does not return any user-configured passwords.
Content-Type: application/json
Array of:
-
field_idstring— Field ID: The values of this field are used as dynamic variables -
typestring, possible values:"plain_text_input", "radio_buttons", "checkboxes", "select", "fields_group", "datepicker"— Type of values -
valuestring— User defined custom field values
Example:
[
{
"field_id": "city_name",
"type": "plain_text_input",
"value": "San Jose"
}
]
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1001` <br> Invalid user <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `1500` <br> Invalid token <br>
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1601` <br> Authorization Error <br> **Error Code:** `1403` <br> Insufficient permissions <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> app is not found <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get user or account event subscription
- Method:
GET - Path:
/marketplace/app/event_subscription - Tags: App
Returns event subscriptions for users or accounts.
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` User's event subscriptions for application returned.
Content-Type: application/json
All of:
-
next_page_tokenstring— The next page token paginates through a large set of results. The API returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizenumber— The number of records returned with a single API call.
-
event_subscriptionsarrayItems:
-
created_sourcestring, possible values:"default", "openapi"— The app's created source: * `default` — The app event subscriptions created in build flow. * `openapi` — The app event subscriptions created in open API. -
custom_headerobject— Custom header configuration for event subscription webhook. This allows you to configure authentication headers that will be sent with webhook requests.-
custom_header_type(required)integer, format:int8, possible values:0, 1, 2, 3— The type of custom header to use for authentication. * `0` - Default (no custom header) * `1` - Basic Authentication (requires username and password) * `2` - OAuth2 Token Authentication (requires client_id, client_secret, and token_url) * `3` - Custom Key-Value Header (requires custom_header_key and custom_header_value) -
client_authenticationstring, possible values:"header", "body", default:"header"— The client authentication method for OAuth2 token requests. Only valid when `custom_header_type` is `2` (OAuth). * `header` - Send client credentials as Basic Auth header (default) * `body` - Send client credentials in request body -
client_idstring— The OAuth2 client ID. Required when `custom_header_type` is `2` (OAuth). -
client_secretstring— The OAuth2 client secret. Required when `custom_header_type` is `2` (OAuth). -
custom_header_keystring— The custom header key name. Required when `custom_header_type` is `3` (Custom Key-Value). Can only contain letters, numbers, and hyphens. Cannot contain spaces or line feeds. -
custom_header_valuestring— The custom header value. Required when `custom_header_type` is `3` (Custom Key-Value). Cannot contain line feeds. -
passwordstring— The password for Basic Authentication. Required when `custom_header_type` is `1` (Basic Auth). -
scopestring— The OAuth2 scope parameter for limiting access token permissions. Optional, only valid when `custom_header_type` is `2` (OAuth). -
statestring— The OAuth2 state parameter for CSRF protection and request tracking. Optional, only valid when `custom_header_type` is `2` (OAuth). -
token_urlstring, format:uri— The OAuth2 token endpoint URL. Required when `custom_header_type` is `2` (OAuth). Must be a valid HTTPS URL. -
usernamestring— The username for Basic Authentication. Required when `custom_header_type` is `1` (Basic Auth).
-
-
event_subscription_idstring— The app event subscription's ID. -
event_subscription_namestring— The app event subscription's name. -
event_webhook_urlstring— The event notification endpoint URL. -
eventsarray— The list of the subscribed event subscriptions.Items:
string— The event's name. -
subscriber_idstring— The subscriber's ID. -
subscription_scopestring, possible values:"user", "account", "master_account", "team"— The app event subscription's scope * `user` — The app event subscription is for specific users. * `account` — The app event subscription is for all users in the account. * `master_account` — The app event subscription is for all users in the master account. * `team` — The app event subscription is for team in the account.
-
Example:
{
"next_page_token": "eer587w4eiyfsudgf",
"page_size": 30,
"event_subscriptions": [
{
"event_subscription_id": "sFrBezKES3-UdcfMPXFA0A",
"events": [
"meeting.deleted"
],
"event_subscription_name": "Example Event Subscription",
"event_webhook_url": "https://www.example.com",
"subscription_scope": "user",
"created_source": "default",
"subscriber_id": "5AATFjiUS0yEnELIMzQO4g",
"custom_header": {
"custom_header_type": 2,
"username": "my_username",
"password": "my_password",
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"token_url": "https://auth.example.com/oauth/token",
"scope": "read:org write:user",
"state": "request-123",
"client_authentication": "body",
"custom_header_key": "x-api-key",
"custom_header_value": "your_api_key_value"
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1500` <br> The subscription scope is invalid. <br> **Error Code:** `1500` <br> Team does not exist or does not belong to this account: {$teamId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist or does not belong to this account. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create an event subscription
- Method:
POST - Path:
/marketplace/app/event_subscription - Tags: App
Programmatically create event subscriptions for an authorized application.
Prerequisites
- An existing, authorized application.
- A valid access token obtained using the
client_credentialsauthorizationgrant_type. See documentation for details.
Note These endpoints use app-specific scopes that won't appear in your Marketplace build flow, but will be included in the access token payload.
Rate Limit Label: HEAVY
Request Body
Content-Type: application/json
-
event_webhook_url(required)string— The event notification endpoint URL. -
events(required)arrayItems:
string— The event's name. -
subscription_scope(required)string, possible values:"user", "account", "master_account", "team"— The app event subscription's scope * `user` — The app event subscription is for specific users. * `account` — The app event subscription is for all users in the account. * `master_account` — The app event subscription is for all users in the master account. * `team` — The app event subscription is for team in the account, and only events from the contact center are supported. -
account_idstring— The account's ID. -
custom_headerobject— Custom header configuration for event subscription webhook. This allows you to configure authentication headers that will be sent with webhook requests.-
custom_header_type(required)integer, format:int8, possible values:0, 1, 2, 3, default:0— The type of custom header to use for authentication. * `0` - Default (no custom header) * `1` - Basic Authentication (requires username and password) * `2` - OAuth2 Token Authentication (requires client_id, client_secret, and token_url) * `3` - Custom Key-Value Header (requires custom_header_key and custom_header_value) -
client_authenticationstring, possible values:"header", "body", default:"header"— The client authentication method for OAuth2 token requests. Only valid when `custom_header_type` is `2` (OAuth). * `header` - Send client credentials as Basic Auth header (default) * `body` - Send client credentials in request body -
client_idstring— The OAuth2 client ID. Required when `custom_header_type` is `2` (OAuth). -
client_secretstring— The OAuth2 client secret. Required when `custom_header_type` is `2` (OAuth). -
custom_header_keystring— The custom header key name. Required when `custom_header_type` is `3` (Custom Key-Value). Can only contain letters, numbers, and hyphens. Cannot contain spaces or line feeds. -
custom_header_valuestring— The custom header value. Required when `custom_header_type` is `3` (Custom Key-Value). Cannot contain line feeds. -
passwordstring— The password for Basic Authentication. Required when `custom_header_type` is `1` (Basic Auth). -
scopestring— The OAuth2 scope parameter for limiting access token permissions. Optional, only valid when `custom_header_type` is `2` (OAuth). -
statestring— The OAuth2 state parameter for CSRF protection and request tracking. Optional, only valid when `custom_header_type` is `2` (OAuth). -
token_urlstring, format:uri— The OAuth2 token endpoint URL. Required when `custom_header_type` is `2` (OAuth). Must be a valid HTTPS URL. -
usernamestring— The username for Basic Authentication. Required when `custom_header_type` is `1` (Basic Auth).
-
-
event_subscription_namestring— The app event subscription's name. -
team_idsarray— The team ID list.Items:
string— The team's ID. -
user_idsarrayItems:
string— The user's user ID list.
Example:
{
"events": [
"meeting.created"
],
"event_subscription_name": "Example Event Subscription",
"event_webhook_url": "https://www.example.com",
"user_ids": [
"_8KG7DeoRU2xIsDSY9ed2Q,90KG7DeoRU2xIsDSY9edwe"
],
"subscription_scope": "user",
"account_id": "pvg3UAgpRlyTDW-9sIpKcw",
"custom_header": {
"custom_header_type": 0,
"username": "my_username",
"password": "my_password",
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"token_url": "https://auth.example.com/oauth/token",
"scope": "read:org write:user",
"state": "request-123",
"client_authentication": "body",
"custom_header_key": "x-api-key",
"custom_header_value": "your_api_key_value"
},
"team_ids": [
"JvOmav04Qf-BALiTESBQXw"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` user create event subscription successfully.
Content-Type: application/json
-
event_subscription_idstring— The app event subscription's ID.
Example:
{
"event_subscription_id": "0ZAaJY4dQ52BbwI9PArBLQ"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1003` <br> The user {$userId} missed permission to subscribe application events: {$eventName} <br> **Error Code:** `1300` <br> The user don't authorize the app: {$userId}. <br> **Error Code:** `1602` <br> The event is not allowed for the app: {$eventName} <br> **Error Code:** `1500` <br> The events list is empty. <br> **Error Code:** `1500` <br> The event webhook url is empty. <br> **Error Code:** `1500 ` <br> The subscription scope is invalid. <br> **Error Code:** `1500` <br> The username is required. <br> **Error Code:** `1500` <br> The length of username exceeds the limit of 256 <br> **Error Code:** `1500` <br> The input value can't contain line feed. <br> **Error Code:** `1500` <br> The password is required. <br> **Error Code:** `1500` <br> The length of password exceeds the limit of 256 <br> **Error Code:** `1500` <br> The client id is required. <br> **Error Code:** `1500` <br> The length of client id exceeds the limit of 256. <br> **Error Code:** `1500` <br> The client secret is required. <br> **Error Code:** `1500` <br> The length of client secret exceeds the limit of 256. <br> **Error Code:** `1500` <br> The token url is required. <br> **Error Code:** `1500` <br> The length of token url exceeds the limit of 1000. <br> **Error Code:** `1500` <br> The length of scope exceeds the limit of 255. <br> **Error Code:** `1500` <br> The length of state exceeds the limit of 255. <br> **Error Code:** `1500` <br> Client authentication must be 'header' or 'body'. <br> **Error Code:** `1500` <br> The custom header key is required. <br> **Error Code:** `1500` <br> The length of header key exceeds the limit of 256. <br> **Error Code:** `1500` <br> The input value can't contain space. <br> **Error Code:** `1500` <br> The custom header key can only contain letters, numbers, and -. <br> **Error Code:** `1500` <br> The custom header key is reserved by Zoom. <br> **Error Code:** `1500` <br> The custom header value is required. <br> **Error Code:** `1500` <br> The length of header value exceeds the limit of 256 <br> **Error Code:** `1500` <br> Team does not exist or does not belong to this account. <br> **Error Code:** `1500` <br> The size of team_ids exceed maximum. <br> **Error Code:** `1500` <br> Team does not exist or does not belong to this account: {$teamId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist or does not belong to this account: {$userId}. <br> **Error Code:** `1601` <br> App event not exists: {$eventName} <br> **Error Code:** `1701` <br> The event webhook url validate failed: {eventWebhookUrl}. <br> **Error Code:** `1801` <br> The custom header type validate failed: {customHeaderType}. <br> **Error Code:** `1702` <br> The Oauth token url validate failed: {oauthTokenUrl}. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Unsubscribe to an app event subscription
- Method:
DELETE - Path:
/marketplace/app/event_subscription - Tags: App
Use this API endpoint to unsubscribe an event subscription.
Prerequisites
- An existing, authorized application.
- A valid access token obtained using the
client_credentialsauthorizationgrant_type. See documentation for details.
Note These endpoints use app-specific scopes that won't appear in your Marketplace build flow, but will be included in the access token payload.
Rate Limit Label: MEDIUM
Responses
Status: 204 **HTTP Status Code:** `204` User unsubscribed from the event subscription successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1500` <br> The size of team_ids exceed maximum. <br> **Error Code:** `1500` <br> Team does not exist or does not belong to this account: {$teamId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist or does not belong to this account: {$userId}. <br> **Error Code:** `1601` <br> App event subscription is invalid: {$eventSubscriptionId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update an event subscription
- Method:
PATCH - Path:
/marketplace/app/event_subscription - Tags: App
Update an event subscription.
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
event_subscription_id(required)string— The app event subscription's ID. -
custom_headerobject— Custom header configuration for event subscription webhook. This allows you to configure authentication headers that will be sent with webhook requests.-
custom_header_type(required)integer, format:int8, possible values:0, 1, 2, 3, default:0— The type of custom header to use for authentication. * `0` - Default (no custom header) * `1` - Basic Authentication (requires username and password) * `2` - OAuth2 Token Authentication (requires client_id, client_secret, and token_url) * `3` - Custom Key-Value Header (requires custom_header_key and custom_header_value) -
client_authenticationstring, possible values:"header", "body", default:"header"— The client authentication method for OAuth2 token requests. Only valid when `custom_header_type` is `2` (OAuth). * `header` - Send client credentials as Basic Auth header (default) * `body` - Send client credentials in request body -
client_idstring— The OAuth2 client ID. Required when `custom_header_type` is `2` (OAuth). -
client_secretstring— The OAuth2 client secret. Required when `custom_header_type` is `2` (OAuth). -
custom_header_keystring— The custom header key name. Required when `custom_header_type` is `3` (Custom Key-Value). Can only contain letters, numbers, and hyphens. Cannot contain spaces or line feeds. -
custom_header_valuestring— The custom header value. Required when `custom_header_type` is `3` (Custom Key-Value). Cannot contain line feeds. -
passwordstring— The password for Basic Authentication. Required when `custom_header_type` is `1` (Basic Auth). -
scopestring— The OAuth2 scope parameter for limiting access token permissions. Optional, only valid when `custom_header_type` is `2` (OAuth). -
statestring— The OAuth2 state parameter for CSRF protection and request tracking. Optional, only valid when `custom_header_type` is `2` (OAuth). -
token_urlstring, format:uri— The OAuth2 token endpoint URL. Required when `custom_header_type` is `2` (OAuth). Must be a valid HTTPS URL. -
usernamestring— The username for Basic Authentication. Required when `custom_header_type` is `1` (Basic Auth).
-
-
event_subscription_namestring— The app event subscription's name. -
event_webhook_urlstring— The event notification endpoint URL. -
eventsarray— The webhook events.Items:
string— The event's name.
Example:
{
"events": [
"meeting.created"
],
"event_subscription_name": "Example Event Subscription",
"event_webhook_url": "https://www.example.com",
"custom_header": {
"custom_header_type": 0,
"username": "my_username",
"password": "my_password",
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"token_url": "https://auth.example.com/oauth/token",
"scope": "read:org write:user",
"state": "request-123",
"client_authentication": "body",
"custom_header_key": "x-api-key",
"custom_header_value": "your_api_key_value"
},
"event_subscription_id": "0ZAaJY4dQ52BbwI9PArBLQ"
}
Responses
Status: 204 **HTTP Status Code:** `204` user update event subscription successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1602` <br> The event is not allowed for the app: {$eventName} <br> **Error Code:** `1500` <br> The events list is empty. <br> **Error Code:** `1500` <br> The event webhook url is empty. <br> **Error Code:** `1500` <br> The username is required. <br> **Error Code:** `1500` <br> The length of username exceeds the limit of 256 <br> **Error Code:** `1500` <br> The input value can't contain line feed. <br> **Error Code:** `1500` <br> The password is required. <br> **Error Code:** `1500` <br> The length of password exceeds the limit of 256 <br> **Error Code:** `1500` <br> The client id is required. <br> **Error Code:** `1500` <br> The length of client id exceeds the limit of 256. <br> **Error Code:** `1500` <br> The client secret is required. <br> **Error Code:** `1500` <br> The length of client secret exceeds the limit of 256. <br> **Error Code:** `1500` <br> The token url is required. <br> **Error Code:** `1500` <br> The length of token url exceeds the limit of 1000. <br> **Error Code:** `1500` <br> The length of scope exceeds the limit of 255. <br> **Error Code:** `1500` <br> The length of state exceeds the limit of 255. <br> **Error Code:** `1500` <br> Client authentication must be 'header' or 'body'. <br> **Error Code:** `1500` <br> The custom header key is required. <br> **Error Code:** `1500` <br> The length of header key exceeds the limit of 256. <br> **Error Code:** `1500` <br> The input value can't contain space. <br> **Error Code:** `1500` <br> The custom header key can only contain letters, numbers, and -. <br> **Error Code:** `1500` <br> The custom header key is reserved by Zoom. <br> **Error Code:** `1500` <br> The custom header value is required. <br> **Error Code:** `1500` <br> The length of header value exceeds the limit of 256 <br> **Error Code:** `1500` <br> The event subscription ID is required. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1601` <br> App event not exists: {$eventName} <br> **Error Code:** `1701` <br> The event webhook url validate failed: {eventWebhookUrl}. <br> **Error Code:** `1801` <br> The custom header type validate failed: {customHeaderType}. <br> **Error Code:** `1702` <br> The Oauth token url validate failed: {oauthTokenUrl}. <br> **Error Code:** `1601` <br> App event subscription is invalid: {$eventSubscriptionId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Delete an event subscription
- Method:
DELETE - Path:
/marketplace/app/event_subscription/{eventSubscriptionId} - Tags: App
Delete an event subscription.
Prerequisites
- An existing, authorized application.
- A valid access token obtained using the client_credentials authorization grant_type. See documentation for details.
Note: These endpoints use app-specific scopes that won't appear in your Marketplace build flow, but will be included in the access token payload.
Rate Limit Label: MEDIUM
Responses
Status: 204 **HTTP Status Code:** `204` delete event subscription successfully.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1601` <br> App event subscription is invalid: {$eventSubscriptionId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Subscribe to an event subscription
- Method:
PATCH - Path:
/marketplace/app/event_subscription/{eventSubscriptionId} - Tags: App
Subscribe to an event subscription.
Prerequisites
- An existing, authorized application.
- A valid access token obtained using the
client_credentialsauthorizationgrant_type. See documentation for details.
Note These endpoints use app-specific scopes that won't appear in your Marketplace build flow, but will be included in the access token payload.
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
account_id(required)string— The account's ID. -
team_idsarray— The team ID list.Items:
string— The team's ID. -
user_idsarrayItems:
string— The user ID list for the user.
Example:
{
"user_ids": [
"_8KG7DeoRU2xIsDSY9ed2Q,90KG7DeoRU2xIsDSY9edwe"
],
"account_id": "5AATFjiUS0yEnELIMzQO4g",
"team_ids": "The team ID list."
}
Responses
Status: 204 **HTTP Status Code:** `204` user subscribe event subscription successfully.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1003` <br> The user: {$userId} missed permission to subscribe event subscriptions: {$eventSubscriptionId} <br> **Error Code:** `1002` <br> The user don't authorize the app: {$userId}. <br> **Error Code:** `1500` <br> The size of team_ids exceed maximum. <br> **Error Code:** `1500` <br> Team does not exist or does not belong to this account: {$teamId}. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist or does not belong to this account: {$userId} . <br> **Error Code:** `1601` <br> App event subscription is invalid: {$eventSubscriptionId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
List apps
- Method:
GET - Path:
/marketplace/apps - Tags: App
List all active and past app requests, or list all approved public and private apps.
Scopes: marketplace_app:read:admin
Granular Scopes: marketplace:read:list_apps:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` App requests returned.
Content-Type: application/json
All of:
-
next_page_tokenstring— The next page token is used to paginate through large result sets. The API returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizeinteger, default:30— The number of records returned with a single API call.
-
appsarray— Information about the app's user requests.Items:
-
app_descriptionstring— The app's short description -
app_developer_typestring, possible values:"THIRD_PARTY", "ZOOM", "INTERNAL"— The developer type of app: * `THIRD_PARTY` — app created by the third party. * `ZOOM` — app created by ZOOM. * `INTERNAL` — app created by your account members. -
app_directory_urlstring— The app's detail page -
app_help_urlstring— The app's support url -
app_iconstring— The app's icon -
app_idstring— The app's ID. -
app_namestring— The app's name. -
app_privacy_policy_urlstring— The app's privacy policy url -
app_statusstring, possible values:"PUBLISHED", "UNPUBLISHED", "SHARABLE", default:"PUBLISHED"— The app's publication status: * `PUBLISHED` — The app is published. * `UNPUBLISHED` — The app is not published. * `SHARABLE` — The app is sharable. -
app_typestring, possible values:"ZoomApp", "ChatBotApp", "OAuthApp", "GeneralApp", default:"OAuthApp"— The type of app: * `ZoomApp` — A Zoom app. * `ChatBotApp` — A ChatBot app. * `OAuthApp` — A OAuth app. * `GeneralApp` — A General app. -
app_usageinteger, possible values:1, 2, default:1— The app's usage categorization: * `1` — The app is under admin management. * `2` — Users have access to the app. -
approval_infoobject— app pre-approval info-
app_approval_closedboolean— The app approval closed : * true — The app does not require admin approval for authorization. * false — The app requires admin approval for authorization. -
approved_timestring— The time when the application was approved. -
approved_typestring, possible values:"forAllUser", "forSpecificUser"— The approved type of app: * `forAllUser` — all user unber account are approved to authorize the app. * `forSpecificUser` — specific user or group are approved to authorize or use the app. -
approver_idstring— The user's ID who approved the app.
-
-
latest_request_date_timestring, format:date-time— The latest app request's creation date and time. This field only returns when the `type` value is 'active'. -
request_approved_numberinteger— The total number of approved app requests. This field only returns when the `type` value is `past`. -
request_declined_numberinteger— The total number of declined app requests. This field only returns when the `type` value is `past`. -
request_idstring— The app request ID. -
request_pending_numberinteger— The total number of pending app requests. -
request_total_numberinteger— The total number of app requests. -
restricted_timestring— The time when the application was resticted. -
review_date_timestring, format:date-time— The time at which the user reviewed the app request. This field only returns when the `type` value is `past`. -
reviewer_namestring— The user who reviewed the app request. This field only returns when the `type` value is `past`. -
scopesarray— Information about the app scopes.Items:
-
scope_descriptionstring— The scope's description. -
scope_namestring— The scope's name.
-
-
Example:
{
"next_page_token": "w7587w4eiyfsudgf",
"page_size": 30,
"apps": [
{
"app_id": "nqSreNVsQ2eGzUMGnA8AHA",
"app_name": "Example App",
"app_type": "ZoomApp",
"app_usage": 1,
"app_status": "PUBLISHED",
"request_id": "zZLSQoL6S0OB6asaZ3zAOQ",
"request_total_number": 8,
"request_pending_number": 3,
"request_approved_number": 2,
"request_declined_number": 2,
"latest_request_date_time": "2021-07-21T17:32:28Z",
"reviewer_name": "Jill Chill",
"review_date_time": "2021-07-21T17:32:28Z",
"app_developer_type": "THIRD_PARTY",
"app_description": "information about the app.",
"app_icon": "https://marketplacecontent.zoom.us//oE98TDy1QymZ3nZs_uILrw/RxGA0jOvQU6aKxttLwQ2-A/app/B67xzmliS9-noBDwsGun1Q/KRUURXa-T6iQz7-S9bEO6A.png",
"scopes": [
{
"scope_name": "View all users' team chat messages",
"scope_description": "This app will gain access to the team chat channels. Please review its privacy policy first."
}
],
"app_privacy_policy_url": "https://www.example.com/privacy/policy",
"app_directory_url": "https://marketplace.zoom.us/apps/{appId}",
"app_help_url": "https://www.example.com/support",
"restricted_time": "2024-03-21T17:32:28Z",
"approval_info": {
"approved_type": "forSpecificUser",
"approver_id": "1gAKvx8fSUeTg-mHgmYTRA",
"approved_time": "2024-03-21T14:32:28Z",
"app_approval_closed": true
}
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1505` <br> Internal server error, please try again. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Create apps
- Method:
POST - Path:
/marketplace/apps - Tags: App
Create Server to Server OAuth, Meeting SDK or General apps in the Zoom Marketplace.
Scopes: marketplace_app:write,marketplace_app:write:admin
Granular Scopes: marketplace:write:app,marketplace:write:app:admin
Rate Limit Label: HEAVY
Request Body
Content-Type: application/json
-
app_name(required)string— The app's name. -
app_type(required)string, possible values:"s2s_oauth", "meeting_sdk", "general"— The app's type: * `s2s_oauth` — Server to Server OAuth app. * `meeting_sdk` — Meeting SDK app. * `general`— UBF General app. -
company_name(required)string— The company's name. -
contact_email(required)string, format:email— The developer's email. -
contact_name(required)string— The developer's name. -
activeboolean, default:false— Only valid for s2s_oauth app, whether to activate automatically: * `true` — Automatically activate the app after creation. It is required that at least one scope should be included in the input parameter. * `false` — Do not activate the app after creation. -
manifestobject— An app manifest object. It should meet the valid manifest schema. If the app_type equals general, you need to pass this param. Manifest resources: https://developers.zoom.us/docs/build-flow/manifests/ -
publishboolean, default:false— Only valid for meeting_sdk app, whether to publish the app to the Marketplace: * `true` — The app contains development credentials and production credentials. * `false` — The app contains only development credentials. -
scopesarray— The scopes of the created app: * `s2s_oauth` — If `active` field is true, there must be at least one scope. * `meeting_sdk` — Will automatically include `user_zak:read` scope.Items:
string
Example:
{
"app_type": "s2s_oauth",
"app_name": "My App",
"scopes": [
"meeting:read"
],
"contact_name": "ZOOM",
"contact_email": "example@example.com",
"company_name": "ZOOM",
"active": false,
"publish": false,
"manifest": {}
}
Responses
Status: 201 **HTTP Status Code:** `201` App created successfully.
Content-Type: application/json
-
app_idstring— The app's id. -
app_namestring— The app's name. -
app_typestring, possible values:"s2s_oauth", "meeting_sdk"— The app's type: * `s2s_oauth` — Server to Server OAuth app. * `meeting_sdk` — Meeting SDK app. -
created_atstring, format:date-time— Date and time this app was created. -
development_credentialsobject— Only when the type is `meeting_sdk` and the `publish` field is true, there will be `production_credentials`-
client_idstring— The app's client id. -
client_secretstring— The app's client secret.
-
-
production_credentialsobject— Only when the type is `meeting_sdk` and the `publish` field is true, there will be `production_credentials`-
client_idstring— The app's client id. -
client_secretstring— The app's client secret.
-
-
scopesarray— The app's scopes.Items:
string
Example:
{
"created_at": "2023-02-16T17:32:28Z",
"app_id": "Bwpq5zXvQr-4PKhtYOD23g",
"app_name": "My App",
"app_type": "s2s_oauth",
"scopes": [
"meeting:read"
],
"production_credentials": {
"client_id": "2J5nVOGXQXCvXoRWyGQDow",
"client_secret": "BzFOrwgq1Gw6KCsyeYnmETU5e4zakGwQ"
},
"development_credentials": {
"client_id": "2J5nVOGXQXCvXoRWyGQDow",
"client_secret": "BzFOrwgq1Gw6KCsyeYnmETU5e4zakGwQ"
}
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> * Validation Failed. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `201` <br> * Invalid access token. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1500` <br> * The request body is missing required fields. For more information, see the API documentation. * Only `Server to Server OAuth` and `Meeting SDK` apps can be created. * Can't get account owner info. * Only account's owner can use this API. * Can't get account info. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get information about an app
- Method:
GET - Path:
/marketplace/apps/{appId} - Tags: App
Use this API to get app information.
Scopes: marketplace_app:read:admin,marketplace_app:read
Granular Scopes: marketplace:read:app,marketplace:read:app:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` App information returned.
Content-Type: application/json
-
app_descriptionstring— The app's description. -
app_idstring— The app's ID. -
app_linksobject-
documentation_urlstring— The app's documentation link. -
privacy_policy_urlstring— The app's privacy policy link. -
support_urlstring— The app's support link. -
terms_of_use_urlstring— The app's terms of use link.
-
-
app_namestring— The app's name. -
app_permissionsarray— The app's permissions.Items:
-
groupstring— The app's permission group. -
group_messagestring— The app's permission group message. -
permissionsarrayItems:
-
namestring— The group payload's name.
-
-
titlestring— The app's group title.
-
-
app_requirementsobject— The app requirements.-
account_eligibilityobject— Eligibility requirements for app.-
account_typesarray— The account types.Items:
string— The account type name. -
premium_eventsarray— The premium events.Items:
-
eventstring— The premium event ID. -
event_namestring— The premium event name.
-
-
-
min_client_versionstring— The minimum client version required for the app. -
user_rolestring, possible values:"admin", "user"— The user roles required to authorize or add the app: * `admin` — The user needs to have the ADMIN_MANAGEMENT role. * `user` — Every user can add this app.
-
-
app_scopesarray— The app scopes.Items:
string— The app scope. -
app_statusstring, possible values:"PUBLISHED", "UNPUBLISHED", default:"PUBLISHED"— The app's publication status: * `PUBLISHED` — The app is published. * `UNPUBLISHED` — The app is not published. -
app_typestring, possible values:"ZoomApp", "ChatBotApp", "OAuthApp", default:"OAuthApp"— The type of app: * `ZoomApp` — A Zoom app. * `ChatBotApp` — A ChatBot app. * `OAuthApp` — A OAuth app. -
app_usageinteger, possible values:1, 2, default:1— The app's usage categorization: * `1` — The app is under admin management. * `2` — Users have access to the app.
Example:
{
"app_id": "nqSreNVsQ2eGzUMGnA8AHA",
"app_name": "Example App",
"app_description": "Example App description",
"app_type": "ZoomApp",
"app_usage": 1,
"app_status": "PUBLISHED",
"app_links": {
"documentation_url": "https://xxxx",
"privacy_policy_url": "https://xxxx",
"support_url": "https://xxxx",
"terms_of_use_url": "https://xxxx"
},
"app_permissions": [
{
"group": "View",
"group_message": "App can view information",
"title": "Associated with you",
"permissions": [
{
"name": "Devices"
}
]
}
],
"app_requirements": {
"user_role": "admin",
"min_client_version": "5.7.3",
"account_eligibility": {
"account_types": [
"Free"
],
"premium_events": [
{
"event_name": "Meeting participant data",
"event": "meeting.participant_qos_summary"
}
]
}
},
"app_scopes": [
"meeting:read"
]
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> APP ID does not exist: {$appId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Deletes an app
- Method:
DELETE - Path:
/marketplace/apps/{appId} - Tags: App
Permanently delete an app on behalf of a user.
Scopes: marketplace_app:write,marketplace_app:write:admin
Granular Scopes: marketplace:write:app,marketplace:write:app:admin
Rate Limit Label: HEAVY
Responses
Status: 204 **HTTP Status Code:** `204` Application delete success
Status: 403 **HTTP Status Code:** `403` <br> Forbidden User not have permission to delete app
Status: 404 **HTTP Status Code:** `404` <br> Not Found App not found
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get API call logs
- Method:
GET - Path:
/marketplace/apps/{appId}/api_call_logs - Tags: App
Get log of app's API calls.
Granular Scopes: marketplace:read:list_api_logs:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Api call logs result returned.
Content-Type: application/json
-
call_logsarray— The call log itemsItems:
-
http_statusinteger, possible values:200, 201, 202, 203, 204, 205, 300, 301, 302, 303, 304, 305, 306, 307, 308, 400, 401, 403, 404, 405, 406, 408, 409, 429, 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511— Http status of the call -
methodstring, possible values:"GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH"— Http method -
timestring— Unixtimestamp -
trace_idstring— The unique identifier for a request. -
url_patternstring— Url pattern of the api call
-
-
next_page_tokenstring— The API uses the next page token to paginate through large result sets. It returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizeinteger— The page size of the result
Example:
{
"next_page_token": "b43YBRLJFg3V4vsSpxvGdKIGtNbxn9h9If2",
"page_size": 30,
"call_logs": [
{
"url_pattern": "https://zoom.us/v2/users/_DkLL5iMRW-p_6yhPocD4Q/assistants",
"time": "1737704112808",
"http_status": 200,
"method": "GET",
"trace_id": "v=2.0;clid=aw1;rid=ZTP_10094594754_scenario_10000000934_aw1_20250124T073509485Z"
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `301` <br> Next page token is not valid <br> **Error Code:** `300` <br> Page size is not valid <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized The token used has expired or is invalid
Status: 403 **HTTP Status Code:** `403` <br> Forbidden The token used does not have sufficient permissions to access the API
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> App id not exist <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Generate Zoom App Deeplink
- Method:
POST - Path:
/marketplace/apps/{appId}/deeplink - Tags: App
Create a Zoom App Deeplink.
Scopes: marketplace_app:write:admin
Granular Scopes: marketplace:write:app_deeplink:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
action(required)string— The action of the deeplink, it's a user-defined string. Default length 2000, max length 9000. -
target(required)string, possible values:"meeting", "panel", "modal"— The target of the deeplink. -
type(required)integer, possible values:1, 2, default:1— The type of deeplink. This value defaults to `1`. `1` - Generate a deeplink that opens Zoom App in-meeting if the meeting is in progress, if not opens Zoom App in Apps Tab. `2` - Generate a deeplink that refreshes Chat App Webview.
Example:
{
"type": 1,
"target": "meeting",
"action": "openPageX"
}
Responses
Status: 201 Return deeplink.
Content-Type: application/json
-
deeplink(required)string— Zoom App Deeplink
Example:
{
"deeplink": "https://zoom.us/launch/chatapp/Zx_cSBEZUWRUMIf454A3sRpEzRp8kVmFINKvSBMok37i5bNRqtLbUxy681Qh_wVhFyW2AhyyF2LbtqSz9pFckUUupHg.wEt88YlHQpzp635x"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `300` <br> Invalid action. Exceeded the maximum length of the value. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `124` <br> Invalid access token. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> App ID does not exist: $appId. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Update app pre approval setting
- Method:
POST - Path:
/marketplace/apps/{appId}/preApprove - Tags: App
This API supports modifying the pre approval configuration of the app, including turning on the setting to the account, to specified users, to specified user groups, and turning off the pre approval.
Scopes: marketplace_app:write:admin
Granular Scopes: marketplace:write:app_pre_approve:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
actionstring, possible values:"approve_all", "approve_user", "disapprove_user", "approve_group", "disapprove_group", "disapprove_all", default:"null"— The action with which to take with the app: * approve_all — Turn on app pre-approval and set it as the account. * approve_user — Add users to approved list and set it as the specific user/group. * disapprove_user — Remove users from approved list and set it as the specific user/group. * approve_group — Add groups to approved list and set it as the specific user/group. * disapprove_group — Remove groups from approved list and set it as the specific user/group. * disapprove_all — Turn off app pre-approval. -
group_idsarray— If the action value is approve_group or disapprove_group, the group IDs to add or remove.Maximum limit of 20.Items:
string— Zoom user group id -
user_idsarray— If the action value is approve_user or disapprove_user, the user IDs to add or remove.Maximum limit of 20.Items:
string— Zoom user Id
Example:
{
"action": "approve_all",
"user_ids": [
"xurCXOI_Ty2RRNMv648OPw"
],
"group_ids": [
"JJcuSipRRS2JqYmk8mfBbA"
]
}
Responses
Status: 201 HTTP Status Code: 201 App pre-approval updated successfully.
Content-Type: application/json
-
executed_atstring— Date and time this request was executed. -
group_idsarray— If the action value is approve_group or disapprove_group, the group IDs to add or remove.Maximum limit of 20.Items:
string— Zoom user group id -
user_idsarray— If the action value is approve_user or disapprove_user, the user IDs to add or remove.Maximum limit of 20.Items:
string— Zoom user Id
Example:
{
"executed_at": "2021-07-21T17:32:28Z",
"user_ids": [
"xurCXOI_Ty2RRNMv648OPw"
],
"group_ids": [
"JJcuSipRRS2JqYmk8mfBbA"
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1500` <br> User can not pre approve this app <br> **Error Code:** `1404` <br> application_pre_approved_status_off <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> App ID does not exist: {$appId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get an app's user requests
- Method:
GET - Path:
/marketplace/apps/{appId}/requests - Tags: App
Use this API to get an app's user requests and the status of their approval.
Scopes: marketplace_app:read:admin
Granular Scopes: marketplace:read:app_request:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` App user requests returned.
Content-Type: application/json
All of:
-
next_page_tokenstring— The next page token is used to paginate through large result sets. The API returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizeinteger, default:30— The number of records returned with a single API call.
-
requestsarray— Information about the users who have applied for app approval.Items:
-
reasonstring— The reason for the app request. -
request_date_timestring, format:date-time— The app request's creation date and time. -
request_user_departmentstring, format:email— The user's department. -
request_user_emailstring, format:email— The user's email address. -
request_user_idstring— The user's ID. -
request_user_namestring— The user's name. -
statusstring, possible values:"pending", "approved", "rejected", default:"pending"— The status of the user's app request: * `pending` — The request is pending approval. * `approved` - The request is approved. * `rejected` - The request is rejected.
-
Example:
{
"next_page_token": "w7587w4eiyfsudgf",
"page_size": 30,
"requests": [
{
"request_user_id": "f1sTWCMaTmOIZxLMlmHvEQ",
"request_user_name": "Jill Chill",
"request_user_email": "jchill@example.com",
"request_user_department": "department",
"request_date_time": "2021-07-21T17:32:28Z",
"reason": "I want to use this app.",
"status": "pending"
}
]
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> App ID does not exist: {$appId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Add app allow requests for users
- Method:
POST - Path:
/marketplace/apps/{appId}/requests - Tags: App
Use this API to add app allow requests for all users, groups of users, or specific users.
Scopes: marketplace_app:write:admin
Granular Scopes: marketplace:write:app_request:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
action(required)string, possible values:"add_all", "add_user", "add_group"— The action with which to take with the app: * `add_all` — Add all user for the app. * `add_user` — Add specified user for the app. * `add_group` — Add specified group of user for the app. -
group_idsarray— If the `action` value is `add_group`, the group IDs to addItems:
string -
user_idsarray— If the `action` value is `add_user`, the user IDs to addItems:
string
Example:
{
"action": "add_all",
"user_ids": [
"f1sTWCMaTmOIZxLMlmHvEQ"
],
"group_ids": [
"t-_-d56CSWG-7BF15LLrOw"
]
}
Responses
Status: 201 **HTTP Status Code:** `201` App added successfully.
Content-Type: application/json
-
added_atstring, format:date-time— Date and time this app was added. -
group_idsarray— If the `action` value is `add_group`, the group IDs to add.Items:
string -
user_idsarray— If the `action` value is `add_user`, the user IDs to add.Items:
string
Example:
{
"added_at": "2021-07-21T17:32:28Z",
"user_ids": [
"f1sTWCMaTmOIZxLMlmHvEQ"
],
"group_ids": [
"t-_-d56CSWG-7BF15LLrOw"
]
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> App ID does not exist: {$appId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update app's request status
- Method:
PATCH - Path:
/marketplace/apps/{appId}/requests - Tags: App
Use this API to update an app's request status or update app status. Administrators can only agree to user-level apps.
Scopes: marketplace_app:write:admin
Granular Scopes: marketplace:update:app_request:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
action(required)string, possible values:"approve_all", "approve", "decline_all", "decline", "cancel"— The app's action: * `approve_all` — Approve all user requests for the app. * `approve` — Partially approve user requests the app. * `decline_all` — Reject all user requests for the app, users who have been approved will also be declined and the installed apps will be disabled. * `decline` — Partially reject user requests for app. * `cancel` — Cancel partially user requests for app. -
request_user_idsarray— If the `action` value is `approve`, the user's request will be approved. If the `action` value is `decline`, the user's request will be rejected. If the `action` value is `cancel`, the user's request will be canceled.Items:
string
Example:
{
"action": "approve_all",
"request_user_ids": [
"f1sTWCMaTmOIZxLMlmHvEQ"
]
}
Responses
Status: 204 **HTTP Status Code:** `204` App request status updated.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> App ID does not exist: {$appId} <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Rotate client secret
- Method:
POST - Path:
/marketplace/apps/{appId}/rotate_client_secret - Tags: App
Create or update a marketplace application's client secret rotating schedule. To call this API, users need to use an OAuth token. The token's grant_type should be client_credentials. Users can only change client secret rotate schedule 3 times in 15 minutes.
Granular Scopes: marketplace:update:client_secret
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
action(required)string, possible values:"new", "update"— `new` - Create a new client secret rotate schedule. `update` - Update `revoke_old_secret_time` of an existing client secret rotate schedule. -
revoke_old_secret_time(required)string, format:date-time— Old and new secret will both work until the old secret is revoked. To revoke the old secret immediately, set this value to `now`. To set a time to revoke the old secret, this value should be in UTC time format, `yyyy-MM-dd'T'HH:mm:ss'Z'`. When action = `new`, this time cannot exceed more than 30 days. When action = `update`, this time cannot exceed more than 30 days starting from the initial new request.
Example:
{
"action": "update",
"revoke_old_secret_time": "2025-03-14T12:34:56Z"
}
Responses
Status: 201 Rotate client secret successfully.
Content-Type: application/json
One of:
-
new_secret(required)string— The new client secret. -
revoke_old_secret_time(required)string, format:date-time— The UTC time when the secret will be rotated. Can be 'now' or a specific time in UTC. -
secret_id(required)string— The secret ID of new client secret.
-
revoke_old_secret_time(required)string, format:date-time— The UTC time when the secret will be rotated. The UTC time when the secret will be rotated. Can be 'now' or a specific time in UTC. -
secret_id(required)string— The secret ID of new client secret.
Example:
{
"secret_id": "0dSHIBbdSYWCzlE8d9DKFw",
"new_secret": "hjdgsuiuyer3956294832hjfgsjxf",
"revoke_old_secret_time": "2025-03-15T12:34:56Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Request validation failed. **Error Code:** `1500` <br> Invalid format of request param `revoke_old_secret_time`. Should be in format `yyyy-MM-dd'T'HH:mm:ss'Z'` for example `2025-03-14T12:34:56Z`. <br> **Error Code:** `1500` <br> Invalid request parameter `action`. Can be `new` or `update`. <br> **Error Code:** `2000` <br> Working on processing your request. Can only change client secret rotate schedule 3 times in 15 minutes. <br> **Error Code:** `1500` <br> Missing request parameters. <br> **Error Code:** `2001` <br> Invalid value of request param `revoke_old_secret_time`. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Unauthorized **Error Code:** `201` <br> Invalid access token, does not contain scopes:[marketplace:update:client_secret]. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Not found. **Error Code:** `1401` <br> App ID does not exist. <br> **Error Code:** `1401` <br> Secret ID does not exist. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get webhook logs
- Method:
GET - Path:
/marketplace/apps/{appId}/webhook_logs - Tags: App
Get users' webhook call logs and query records from the past 7 days.
Scopes: marketplace_app:read,marketplace_app:read:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` Webhook logs info returned.
Content-Type: application/json
-
next_page_tokenstring— The API uses the next page token to paginate through large result sets. It returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizeinteger— The page size of the result -
webhook_logsarray— A list of webhook logs that match the specified query conditions.Items:
-
date_timestring— The recorded time of the log. -
endpointstring— The webhook callback url. -
eventstring— The event's name. -
failed_reason_typeinteger, possible values:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16— The reason type for connection error messages: * `1` — read time out. * `2` — connection refused. * `3` — hystrix fallback. * `4` — hystrix timeout. * `5` — async error. * `6` — DNS forbidden. * `7` — remote error. * `8` — in delegate white list. * `9` — cert error. * `10` — need instant retry. * `11` — host name verify failed. * `12` — TLS verify failed. * `13` — DNS resolve time out. * `14` — no client. * `15` — resource not found. * `16` — too many requests. -
request_bodystring— The request body -
request_headersstring— The request header. -
request_idstring— The unique identifier for a webhook request, which remains unchanged across retry attempts. -
response_bodystring— The response body. -
response_headersstring— The response headers. -
retry_numinteger, possible values:0, 1, 2, 3— The number of retry attempts for this webhook request. A value of 0 signifies that the request is the initial send and not a retry. -
statusinteger— The http code returned from the endpoint. If the webhook is not sent to the endpoint due to an internal error, the status is `-1` -
subscription_idstring— The subscription's unique id. -
trace_idstring— A distributed tracing identifier used in this webhook request context, commonly used for troubleshooting. When multiple webhook events are triggered within the same context, they may share the same `trace_id`. -
user_idstring— The user's unique id.
-
Example:
{
"next_page_token": "b43YBRLJFg3V4vsSpxvGdKIGtNbxn9h9If2",
"page_size": 30,
"webhook_logs": [
{
"event": "meeting.deleted",
"status": 429,
"failed_reason_type": 1,
"user_id": "IYHrdpjrS3ubOf7rPkkg8w",
"endpoint": "https://example.com",
"subscription_id": "9qwt8mkBEW2O6fPuxBpXpA",
"request_headers": "N/A",
"request_body": "{\"event\":\"meeting.created\",\"payload\":{\"account_id\":\"oFPqQAp3Q0u3yLXXrWuQuy\",\"event_ts\":1663654515392}",
"response_headers": "{\\\"Server\\\":\\\"nginx\\\",\\\"Content-Type\\\":\\\"text/html; charset=UTF-8\\\"}",
"response_body": "Timeout connecting to server.",
"date_time": "2022-09-09T08:11:387Z",
"trace_id": "WEB_5f1752ba04e4ffeccde2f2a923c106f9",
"request_id": "e8ca3e3c_0196_4dc8_9f9e_81217d9000e6",
"retry_num": 0
}
]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1506` <br> The 'retry_num' value must be an integer within the range of 0 to 3. <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `201` <br> You do not have permission to access the targeted resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1401` <br> APP ID does not exist: {$appId}. <br> **Error Code:** `1501` <br> The 'to' date must be after the 'from' date. <br> **Error Code:** `1502` <br> The date range must be within the last seven days. <br> **Error Code:** `1503` <br> The dates must follow the format: `yyyy-MM-dd'T'HH:mm:ss'Z'`. <br> **Error Code:** `1504` <br> The 'from' date must be before the current date(UTC). <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get app user entitlements
- Method:
GET - Path:
/marketplace/monetization/entitlements - Tags: App
Get the app user's entitlements information.
Scopes: marketplace_entitlement:read:admin,marketplace_entitlement:read
Granular Scopes: marketplace:read:list_user_entitlements,marketplace:read:list_user_entitlements:admin
Rate Limit Label: HEAVY
Responses
Status: 200 **HTTP Status Code:** `200` Entitlement information returned.
Content-Type: application/json
Array of:
-
idstring— The entitlement ID. -
plan_idstring— The UUID of the plan name. -
plan_namestring— The name of the plan of the user with entitlements.
Example:
[
{
"id": "123e4567-e89b-12d3-a456-426655440000",
"plan_name": "PRO",
"plan_id": "f3318144-b66c-4c1e-a987-ebc224e2b706"
}
]
Status: 403 **HTTP Status Code:** `403` <br> Forbidden **Error Code:** `1505` <br> Missing app permissions. Make sure marketplace_entitlement:read:admin scope is assigned. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1002` <br> No entitlements assigned to the user for the app. <br> **Error Code:** `1402` <br> app is not monetized <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Get a user's app requests
- Method:
GET - Path:
/marketplace/users/{userId}/apps - Tags: App
Use this API to get all of a user's app requests.
Scopes: marketplace_app:read:admin,marketplace_app:read
Granular Scopes: marketplace:read:list_user_app_requests:admin,marketplace:read:list_user_app_requests
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` User app requests returned.
Content-Type: application/json
All of:
-
next_page_tokenstring— The next page token is used to paginate through large result sets. The API returns a next page token whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes. -
page_sizeinteger, default:30— The number of records returned with a single API call.
-
appsarrayItems:
-
app_idstring— The app's ID. -
app_namestring— The app's name. -
app_statusstring, possible values:"PUBLISHED", "UNPUBLISHED", default:"PUBLISHED"— The app's publication status: * `PUBLISHED` — The app is published. * `UNPUBLISHED` — The app is not published. -
app_typestring, possible values:"ZoomApp", "ChatBotApp", "OAuthApp", default:"OAuthApp"— The type of app: * `ZoomApp` — A Zoom app. * `ChatBotApp` — A ChatBot app. * `OAuthApp` — A OAuth app. -
app_usageinteger, possible values:1, 2, default:1— The app's usage categorization: * `1` — The app is under admin management. * `2` — Users have access to the app. -
request_date_timestring, format:date-time— The app request's creation date and time. This field only returns when the `type` value is 'active'. -
request_idstring— The app request ID. -
request_statusstring, possible values:"pending", "approved", "rejected", default:"pending"— The status of the user's app request: * `pending` — The request is pending approval. * `approved` - The request is approved. * `rejected` - The request is rejected.
-
Example:
{
"next_page_token": "w7587w4eiyfsudgf",
"page_size": 30,
"apps": [
{
"app_id": "nqSreNVsQ2eGzUMGnA8AHA",
"app_name": "Example App",
"app_type": "ZoomApp",
"app_usage": 1,
"app_status": "PUBLISHED",
"request_id": "zZLSQoL6S0OB6asaZ3zAOQ",
"request_date_time": "2021-07-21T17:32:28Z",
"request_status": "pending"
}
]
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist or does not belong to this account. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Enable or disable user app subscription
- Method:
PATCH - Path:
/marketplace/users/{userId}/apps/{appId}/subscription - Tags: App
Enable or disable a user's app subscription.
Scopes: marketplace_app:write:admin
Granular Scopes: marketplace:write:app:admin
Rate Limit Label: LIGHT
Request Body
Content-Type: application/json
-
action(required)string, possible values:"enable", "disable"— Enable or disable a user's app subscription.
Example:
{
"action": "enable"
}
Responses
Status: 204 **HTTP Status Code:** `204` App subscription status updated.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist or does not belong to this account. <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).
Get a user's entitlements
- Method:
GET - Path:
/marketplace/users/{userId}/entitlements - Tags: App
Get a user's entitlements.
Prerequisites
- An existing, authorized application.
- A valid access token obtained using the client_credentials authorization grant_type. See documentation for details.
Note These endpoints use app-specific scopes that won't appear in your Marketplace build flow, but will be included in the access token payload.
Scopes: marketplace_entitlement:read,marketplace_entitlement:read:admin
Granular Scopes: marketplace:read:list_user_entitlements,marketplace:read:list_user_entitlements:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 **HTTP Status Code:** `200` User entitlements returned.
Content-Type: application/json
-
entitlementsarray— The entitlements.Items:
-
entitlement_idinteger, format:int64— The entitlement ID.
-
Example:
{
"entitlements": [
{
"entitlement_id": 1
}
]
}
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized **Error Code:** `201` <br> This API only supports OAuth2 for authorization. <br> Unauthenticated users are not permitted access to the targeted resource. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1002` <br> No entitlements assigned to the user for the app <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `1402` <br> App is not monetized <br>
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Generate an app deeplink
- Method:
POST - Path:
/zoomapp/deeplink - Tags: Apps
Create an app deeplink.
Scopes: app:deeplink:write,app:deeplink:write:admin
Rate Limit Label: Medium
Request Body
Content-Type: application/json
-
actionstring— The action of the deeplink, it's a user-defined string. -
typeinteger, possible values:1, 2— The type of deeplink. * `1` — Generate a deeplink that opens Zoom App in-meeting if the meeting is in progress, if not opens Zoom App in Apps Tab. \n* `2` — Generate a deeplink that refreshes Chat App Webview. This value defaults to `1`. -
user_idstring— The 'userId' property of the app deeplink. This field only applies to account level OAuth token.
Example:
{
"type": 1,
"user_id": "D40dy5L7SJiSTayIvRV9Lw",
"action": "openPageX"
}
Responses
Status: 200 **Status Code:** `200`
Content-Type: application/json
-
deeplinkstring— The app deeplink.
Example:
{
"deeplink": "https://zoom.us/launch/chatapp/Zx_cSBEZUWRUMIf454A3sRpEzRp8kVmFINKvSBMok37i5bNRqtLbUxy681Qh_wVhFyW2AhyyF2LbtqSz9pFckUUupHg.wEt88YlHQpzp635x"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `124` <br> Invalid access token. **Error Code:** `300` <br> Invalid action. The maximum length of the value is 256.
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> User does not exist: $userId.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Validate an app manifest
- Method:
POST - Path:
/marketplace/apps/manifest/validate - Tags: Manifest
Validates an app manifest.
Scopes: marketplace_app:read,marketplace_app:read:admin
Granular Scopes: marketplace:read:app,marketplace:read:app:admin
Rate Limit Label: MEDIUM
Request Body
Content-Type: application/json
-
manifest(required)object— The manifest to be validated. It's validated according to the manifest schema -
app_idstring— The ID of the app whose configuration you want to validate.
Example:
{
"manifest": {},
"app_id": "Zvga6CFZTn6XwMUVbdxCZg"
}
Responses
Status: 200 The typical success response.
Content-Type: application/json
-
errorstring— This field returns an rrror code. -
errorsarray— The error list.Items:
-
message(required)string— The error message. -
setting(required)string— Indicator to error field.
-
-
okboolean— Whether the check is successful.
Example:
{
"ok": false,
"error": "invalid_manifest",
"errors": [
{
"message": "Event Subscription requires either Request URL or Socket Mode Enabled",
"setting": "/settings/event_subscriptions"
}
]
}
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Export an app manifest from an existing app
- Method:
GET - Path:
/marketplace/apps/{appId}/manifest - Tags: Manifest
Exports an app's manifest file.
Scopes: marketplace_app:read,marketplace_app:read:admin
Granular Scopes: marketplace:read:app,marketplace:read:app:admin
Rate Limit Label: MEDIUM
Responses
Status: 200 Get app's manifest
Content-Type: application/json
-
manifestobject— The manifest data of the app.
Example:
{
"manifest": {}
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found App not exists
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rest/rate-limits/).
Update an app by manifest
- Method:
PUT - Path:
/marketplace/apps/{appId}/manifest - Tags: Manifest
Updates an app from an app manifest
Scopes: marketplace_app:write,marketplace_app:write:admin
Granular Scopes: marketplace:write:app,marketplace:write:app:admin
Rate Limit Label: HEAVY
Request Body
Content-Type: application/json
-
manifest(required)object— An app manifest object. It should meet valid manifest schema. This API replaces the entire previous configuration. As a result, the manifest needs to contain all modified and unmodified fields.
Example:
{
"manifest": {}
}