Virtual Agent

  • OpenAPI Version: 3.1.1
  • API Version: 2

Zoom Virtual Agent APIs enable you to build artificial intelligence (AI) and chatbot solutions for your website.

Your website users can expect immediate responses to their queries at any time. As a result, Zoom Virtual Agent deploys support to your users faster and reduces the workload for your live agents.

All endpoints are available through https at api.zoom.us/v2/.

Servers

  • URL: https://api.zoom.us/v2

Operations

Get articles

  • Method: GET
  • Path: /km/kbs/{kbId}/articles
  • Tags: Knowledge Management

Returns multiple knowledge base articles.

Scopes: zva:read:km_kbs

Granular Scopes: zva:read:list_km_articles,zva:read:list_km_articles:admin

Rate Limit Label: LIGHT

Responses

Status: 200 The list of the returned articles.
Content-Type: application/json
  • articles

    array — The list or articles from the knowledge base

    Items:

    • category

      string | null — The category of the article.

    • content

      string — The content of the article.

    • created_at

      string, format: date-time — The date and time the article was created.

    • exclude

      boolean, default: false — Whether the article is excluded from being presented as a solution to queries.

    • external_id

      string | null — The external ID of the article.

    • id

      string — The ID of the article.

    • kb_id

      string — The ID of the knowledge base.

    • language

      string, possible values: "zh-CN", "zh-TW", "en-US", "en-GB", "en-AU", "en-NZ", "fr-FR", "fr-CA", "pt-PT", "pt-BR", "es-ES", "es-US", "es-MX", "da-DK", "nl-NL", "nl-BE", "en-CA", "fr-BE", "fr-LU", "de-DE", "de-AT", "de-CH", "it-IT", "ja-JP", "ko-KR", "no-NO", "pl-PL", "ro-RO", "ru-RU", "sv-SE", "tr-TR" — The language of the article.

    • title

      string — The title of the article.

    • updated_at

      string, format: date-time — The date and time the article was last updated.

    • url

      string | null, format: uri — The URL of the article.

  • next_page_token

    string | null — The next page token paginates through a large set of results. A next page token returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.

  • page_size

    number, default: 30 — The number of records returned within a single API call.

  • total_records

    number — The total number of all the records available across pages.

Example:

{
  "next_page_token": "e9je7r6yxfqlaklt7zz4wzh9",
  "page_size": 30,
  "total_records": 100,
  "articles": [
    {
      "id": "e9je7r6yxfqlaklt7zz4wzh9",
      "external_id": "871b707a-7756-46b6-bfba-36a297ba1e85",
      "kb_id": "whelb0q6qe1bpqg6jrw3ismo",
      "category": "Foo",
      "title": "Article One",
      "url": "https://example.com/foo/article1",
      "content": "<p>article 1 content with <b>some</b> <i>html</i></p>",
      "created_at": "2023-05-12T16:31:22.265Z",
      "updated_at": "2023-05-12T21:01:14.07Z",
      "exclude": false,
      "language": "en-US"
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `33001` <br> Specified KB is not type Custom API. <br> **Error Code:** `33005` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `33000` <br> The knowledge base was 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/rest/rate-limits/).

Create article

  • Method: POST
  • Path: /km/kbs/{kbId}/articles
  • Tags: Knowledge Management

Creates a knowledge base article.

Scopes: zva:write:km_kbs

Granular Scopes: zva:write:km_article,zva:write:km_article:admin

Rate Limit Label: LIGHT

Request Body

Content-Type: application/json
  • content (required)

    string — The article's content.

  • exclude (required)

    boolean — This field excludes the article from being presented as a solution to queries.

  • title (required)

    string — The article's title.

  • category

    string — The article's category.

  • external_id

    string — The article's external ID.

  • language

    string, possible values: "zh-CN", "zh-TW", "en-US", "en-GB", "en-AU", "en-NZ", "fr-FR", "fr-CA", "pt-PT", "pt-BR", "es-ES", "es-US", "es-MX", "da-DK", "nl-NL", "nl-BE", "en-CA", "fr-BE", "fr-LU", "de-DE", "de-AT", "de-CH", "it-IT", "ja-JP", "ko-KR", "no-NO", "pl-PL", "ro-RO", "ru-RU", "sv-SE", "tr-TR" — The article's language.

  • url

    string — The article's URL.

Example:

{
  "category": "Foo",
  "title": "My Article 1",
  "url": "https://example.com/foo/article1",
  "content": "&lt;p&gt;article 1 content with &lt;b&gt;some&lt;/b&gt; &lt;i&gt;html&lt;/i&gt;&lt;/p&gt;",
  "exclude": false,
  "language": "en-US",
  "external_id": "871b707a-7756-46b6-bfba-36a297ba1e85"
}

Responses

Status: 201 Article has been created successfully.
Content-Type: application/json
  • category

    string — The category of the article.

  • content

    string — The article's content.

  • created_at

    string, format: date-time — The date and time the article was created.

  • exclude

    boolean — This field excludes the article from being presented as a solution to queries.

  • external_id

    string — The article's external ID.

  • id

    string — The article's ID.

  • kb_id

    string — The knowledge base's ID.

  • language

    string, possible values: "zh-CN", "zh-TW", "en-US", "en-GB", "en-AU", "en-NZ", "fr-FR", "fr-CA", "pt-PT", "pt-BR", "es-ES", "es-US", "es-MX", "da-DK", "nl-NL", "nl-BE", "en-CA", "fr-BE", "fr-LU", "de-DE", "de-AT", "de-CH", "it-IT", "ja-JP", "ko-KR", "no-NO", "pl-PL", "ro-RO", "ru-RU", "sv-SE", "tr-TR" — The article's language.

  • title

    string — The title of the article.

  • updated_at

    string, format: date-time — The date and time the article was last updated.

  • url

    string — The article's URL.

Example:

{
  "id": "c6o8l4m5xxyyaz0kxiqec6v6",
  "kb_id": "whelb0q6qe1bpqg6jrw3ismo",
  "category": "Foo",
  "title": "Article One",
  "url": "https://example.com/foo/article1",
  "created_at": "2023-03-21T20:21:30.659Z",
  "updated_at": "2023-03-21T20:21:30.659Z",
  "exclude": false,
  "language": "en-US",
  "external_id": "871b707a-7756-46b6-bfba-36a297ba1e85",
  "content": "<p>article 1 content with <b>some</b> <i>html</i></p>"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `33001` <br> Specified KB is not type Custom API. <br> **Error Code:** `33002` <br> Too many articles for KB (limit is 5000). <br> **Error Code:** `33005` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `33000` <br> The knowledge base was not found. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `33003` <br> An article for this KB already exists with external ID "871b707a-7756-46b6-bfba-36a297ba1e85" and language "en". <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 article

  • Method: GET
  • Path: /km/kbs/{kbId}/articles/{articleId}
  • Tags: Knowledge Management

Returns a knowledge base article.

Scopes: zva:read:km_kbs

Granular Scopes: zva:read:km_article,zva:read:km_article:admin

Rate Limit Label: LIGHT

Responses

Status: 200 The returned article.
Content-Type: application/json
  • category

    string — The category of the article.

  • content

    string — The content of the article.

  • created_at

    string, format: date-time — The date and time the article was created.

  • exclude

    boolean — This field excludes the article from being presented as a solution to queries.

  • external_id

    string — The external ID of the article.

  • id

    string — The ID of the article.

  • kb_id

    string — The ID of the knowledge base.

  • language

    string, possible values: "zh-CN", "zh-TW", "en-US", "en-GB", "en-AU", "en-NZ", "fr-FR", "fr-CA", "pt-PT", "pt-BR", "es-ES", "es-US", "es-MX", "da-DK", "nl-NL", "nl-BE", "en-CA", "fr-BE", "fr-LU", "de-DE", "de-AT", "de-CH", "it-IT", "ja-JP", "ko-KR", "no-NO", "pl-PL", "ro-RO", "ru-RU", "sv-SE", "tr-TR" — The language of the article.

  • title

    string — The title of the article.

  • updated_at

    string, format: date-time — The date and time the article was last updated.

  • url

    string — The URL of the article's URL.

Example:

{
  "id": "c6o8l4m5xxyyaz0kxiqec6v6",
  "kb_id": "whelb0q6qe1bpqg6jrw3ismo",
  "category": "Foo",
  "title": "Article One",
  "url": "https://example.com/foo/article1",
  "created_at": "2023-03-21T20:21:30.659Z",
  "updated_at": "2023-03-21T20:21:30.659Z",
  "exclude": false,
  "language": "en-US",
  "external_id": "871b707a-7756-46b6-bfba-36a297ba1e85",
  "content": "<p>article 1 content with <b>some</b> <i>html</i></p>"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `33001` <br> Specified KB is not type Custom API. <br> **Error Code:** `33005` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `33000` <br> The knowledge base was not found. <br> **Error Code:** `33004` <br> The article was 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/rest/rate-limits/).

Update article

  • Method: PUT
  • Path: /km/kbs/{kbId}/articles/{articleId}
  • Tags: Knowledge Management

Updates a knowledge base article.

Scopes: zva:write:km_kbs

Granular Scopes: zva:update:km_article,zva:update:km_article:admin

Rate Limit Label: LIGHT

Request Body

Content-Type: application/json
  • content (required)

    string — The content of the article.

  • exclude (required)

    boolean, default: false — This field excludes the article from being presented as a solution to queries.

  • title (required)

    string — The title of the article.

  • category

    string — The category of the article.

  • external_id

    string — The external ID of the article.

  • language

    string, possible values: "zh-CN", "zh-TW", "en-US", "en-GB", "en-AU", "en-NZ", "fr-FR", "fr-CA", "pt-PT", "pt-BR", "es-ES", "es-US", "es-MX", "da-DK", "nl-NL", "nl-BE", "en-CA", "fr-BE", "fr-LU", "de-DE", "de-AT", "de-CH", "it-IT", "ja-JP", "ko-KR", "no-NO", "pl-PL", "ro-RO", "ru-RU", "sv-SE", "tr-TR" — The language article.

  • url

    string — The URL of the article.

Example:

{
  "category": "Foo",
  "title": "My Article 1",
  "url": "https://example.com/foo/article1",
  "content": "&lt;p&gt;article 1 content with &lt;b&gt;some&lt;/b&gt; &lt;i&gt;html&lt;/i&gt;&lt;/p&gt;",
  "exclude": false,
  "language": "en-US",
  "external_id": "871b707a-7756-46b6-bfba-36a297ba1e85"
}

Responses

Status: 200 The updated article.
Content-Type: application/json
  • category

    string — The category of the article.

  • content

    string — The content of the article.

  • created_at

    string, format: date-time — The date and time the article was created.

  • exclude

    boolean — This field excludes the article from being presented as a solution to queries.

  • external_id

    string — The external ID of the article.

  • id

    string — The ID of the article.

  • kb_id

    string — The ID of the knowledge base.

  • language

    string, possible values: "zh-CN", "zh-TW", "en-US", "en-GB", "en-AU", "en-NZ", "fr-FR", "fr-CA", "pt-PT", "pt-BR", "es-ES", "es-US", "es-MX", "da-DK", "nl-NL", "nl-BE", "en-CA", "fr-BE", "fr-LU", "de-DE", "de-AT", "de-CH", "it-IT", "ja-JP", "ko-KR", "no-NO", "pl-PL", "ro-RO", "ru-RU", "sv-SE", "tr-TR" — The language of the article.

  • title

    string — The title of the article.

  • updated_at

    string, format: date-time — The date and time the article was last updated.

  • url

    string — The URL of the article.

Example:

{
  "id": "c6o8l4m5xxyyaz0kxiqec6v6",
  "kb_id": "whelb0q6qe1bpqg6jrw3ismo",
  "category": "Foo",
  "title": "Article One",
  "url": "https://example.com/foo/article1",
  "created_at": "2023-03-21T20:21:30.659Z",
  "updated_at": "2023-03-21T20:21:30.659Z",
  "exclude": false,
  "language": "en-US",
  "external_id": "871b707a-7756-46b6-bfba-36a297ba1e85",
  "content": "<p>article 1 content with <b>some</b> <i>html</i></p>"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `33001` <br> Specified KB is not type Custom API. <br> **Error Code:** `33005` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `33000` <br> The knowledge base was not found. <br> **Error Code:** `33004` <br> The article was not found. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict **Error Code:** `33003` <br> An article for this KB already exists with external ID "871b707a-7756-46b6-bfba-36a297ba1e85" and language "en". <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/).

Delete article

  • Method: DELETE
  • Path: /km/kbs/{kbId}/articles/{articleId}
  • Tags: Knowledge Management

Deletes a knowledge base article.

Scopes: zva:write:km_kbs

Granular Scopes: zva:delete:km_article,zva:delete:km_article:admin

Rate Limit Label: LIGHT

Responses

Status: 204 The article is deleted.
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `33001` <br> Specified KB is not type Custom API. <br> **Error Code:** `33005` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `33000` <br> The knowledge base was not found. <br> **Error Code:** `33004` <br> The article was 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/rest/rate-limits/).

Create sync request

  • Method: POST
  • Path: /km/kbs/{kbId}/sync
  • Tags: Knowledge Management

Creates a sync request for the specified knowledge base

Scopes: zva:write:km_kbs

Granular Scopes: zva:update:km_kb:admin

Rate Limit Label: LIGHT

Responses

Status: 201 Default Response
Content-Type: application/json
  • error_code (required)

    integer | null, possible values: 33009, 33008, 33010, 33007 — The numerical error code of reason why sync failed (otherwise null).

  • error_message (required)

    string | null — The error message of the reason why a sync failed (otherwise null).

  • progress_percent (required)

    integer | null — The percent progress of the sync.

  • started_at (required)

    string | null, format: date-time — The time the sync started (in ISO 8601 format).

  • sync_status (required)

    string, possible values: "QUEUED", "PENDING", "IN_PROGRESS", "COMPLETED", "FAILED", "ABORTING", "ABORTED" — The status of the sync.

  • created_at

    string, format: date-time — The time the sync request was created (in ISO 8601 format).

  • kb_id

    string — The knowledge base's ID.

  • sync_id

    string — The sync ID.

  • updated_at

    string, format: date-time — The type the sync progress or status was last updated (in ISO 8601 format).

Example:

{
  "sync_id": "a6w6izgus3qlxz6di0vsrv8s",
  "kb_id": "whelb0q6qe1bpqg6jrw3ismo",
  "sync_status": "IN_PROGRESS",
  "progress_percent": 50,
  "error_code": 33009,
  "error_message": "The sync failed because no articles had any content.",
  "created_at": "2025-01-08T13:00:00Z",
  "updated_at": "2025-01-08T13:00:00Z",
  "started_at": "2025-01-10T13:00:00Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Bad Request **Error Code:** `33001` <br> Specified KB is not type Custom API. <br> **Error Code:** `33013` <br> The knowledge base is not enabled <br> **Error Code:** `33005` <br> Validation failed. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found Not Found **Error Code:** `33000` <br> The knowledge base was not found. <br>
Status: 409 **HTTP Status Code:** `409` <br> Conflict Conflict **Error Code:** `33011` <br> A sync is already in progress <br> **Error Code:** `33012` <br> A sync has completed too recently <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 sync

  • Method: GET
  • Path: /km/kbs/{kbId}/sync/{syncId}
  • Tags: Knowledge Management

Returns the details of a knowledge base sync.

Scopes: zva:read:km_kbs

Granular Scopes: zva:read:km_kb:admin

Rate Limit Label: LIGHT

Responses

Status: 200 Default Response
Content-Type: application/json
  • error_code (required)

    integer | null, possible values: 33009, 33008, 33010, 33007 — The numerical error code of reason why sync failed (otherwise null).

  • error_message (required)

    string | null — The error message of reason why sync failed (otherwise null).

  • progress_percent (required)

    integer | null — The percent progress of the sync.

  • started_at (required)

    string | null, format: date-time — The time the sync started (in ISO 8601 format).

  • sync_status (required)

    string, possible values: "QUEUED", "PENDING", "IN_PROGRESS", "COMPLETED", "FAILED", "ABORTING", "ABORTED" — The status of the sync.

  • created_at

    string, format: date-time — The time the sync request was created (in ISO 8601 format).

  • kb_id

    string — The knowledge base's ID.

  • sync_id

    string — The sync ID.

  • updated_at

    string, format: date-time — The type the sync progress or status was last updated (in ISO 8601 format).

Example:

{
  "sync_id": "a6w6izgus3qlxz6di0vsrv8s",
  "kb_id": "whelb0q6qe1bpqg6jrw3ismo",
  "sync_status": "IN_PROGRESS",
  "progress_percent": 50,
  "error_code": 33009,
  "error_message": "The sync failed because no articles had any content",
  "created_at": "2025-01-10T13:00:00Z",
  "updated_at": "2025-01-10T13:00:00Z",
  "started_at": "2025-01-12T15:00:00Z"
}
Status: 404 **HTTP Status Code:** `404` <br> Not Found Default Response **Error Code:** `33014` <br> The knowledge base or sync request was not found <br>

Get ZVA engagements

  • Method: GET
  • Path: /virtual_agent/report/engagements
  • Tags: Report

Generates a list of ZVA engagements.

Scopes: zva_report:read,zva_report:read:admin

Granular Scopes: zva:read:list_engagements:admin

Rate Limit Label: HEAVY

Responses

Status: 200 **HTTP Status Code:** `200` <br> ZVA engagements successfully returned.
Content-Type: application/json
  • engagements

    array — The information about the engagements.

    Items:

    • agent_messages_sent

      integer — Number of messages sent by the Virtual Agent during the conversation.

    • agents

      array — This list of agents involved in this engagement

      Items:

      • agent_id

        string — The internal ID of the agent.

      • agent_name

        string — The agent name entered by the user.

      • agent_type

        string, possible values: "AI_VOICE", "AI_CHAT", "CHAT" — The type of the agent used in the engagement.

      • agent_version_id

        string — Internal version ID of AI agent.

      • agent_version_number

        integer — Version number of AI agent.

    • articles

      array — The list of articles AI agent used in this engagement.

      Items:

      string — The title of the article AI agent used in this engagement.

    • campaign_name

      string — The engagement's campaign name.

    • consumer_id

      string — The consumer iD of the engagement

    • consumer_messages_sent

      integer — Number of messages sent by the consumer during the conversation.

    • deleted

      boolean — Whether the status engagement is deleted or not.

    • duration

      integer — The duration of the engagement in seconds.

    • end_time

      string, format: date-time — The engagement's end time and date in **yyyy-MM-dd'T'HH:mm:ss'Z'** format.

    • engagement_id

      string — The engagement's ID.

    • escalation_reason

      string, possible values: "Escalation by design", "Escalation requested" — Whether the escalation was requested or by design. **Marked for removal at the end of January 2026.**

    • global_variables

      array — The information about the engagement's global variables. Marked for removal. Recommended to use the new **Variables API** instead.

      Items:

      • group_id

        string — The global variable's group ID.

      • group_name

        string — The global variable's group name.

      • need_mask

        boolean — If the global variable needs a mask.

      • need_store

        boolean — If the global variable needs a store.

      • type

        string — The global variable's type.

      • value

        string — The global variable's value.

      • variable_id

        string — The global variable's ID.

      • variable_name

        string — The global variable's name.

    • implicit_resolution

      string, possible values: "RESOLVED", "NOT_RESOLVED" — Whether the consumer's issue was implicitly resolved by the virtual agent. **This is field is available only if it is enabled for the account.**

    • intent_summary

      object — The summary of the matched custom intents in the engagement.

      • count

        integer — The total count of the matched engagement's intents.

      • intents_matched

        array — The matched custom intents in the engagement.

        Items:

        • accuracy

          number — The intent's accuracy, from 0 to 1. 0.5 means this intent has 50% accuracy.

        • intent_id

          string — The intent's ID

        • intent_name

          string — The intent's name.

        • intent_type

          string, possible values: "custom_intent", "small_talk", "default_intent", "faq", default: "default_intent" — The intent's type. * `custom_intent` * `small_talk` * `default_intent` * FAQ

        • system_intent

          boolean — Whether this record belongs to the system intent.

    • interaction_duration

      integer — The total number of seconds of interaction between the AI agent and the consumer.

    • interaction_turns

      integer — The total number of conversation exchanges between the Consumer and AI Agent.

    • language_code

      string, possible values: "en-GB", "en-US", "ar", "da-DK", "de-DE", "es-ES", "es-MX", "fr-CA", "fr-FR", "it-IT", "ja", "ko-KR", "nl-NL", "pt-BR", "pt-PT", "ru", "zh-CN", "zh-HK", default: "en-US" — The language code for the engagement.

    • last_responder

      string, possible values: "AI Agent", "Consumer", "Chatbot" — The entity that responded the last in this conversation.

    • launch_url

      string — The URL of the transcript of the engagement, such as a link to the transcript as a secured embeddable web page.

    • outcome

      string — The outcome of the engagement.

    • query_details

      array — The engagement's query details.

      Items:

      • articles

        array — The query's articles.

        Items:

        • answer

          string — The article's answer.

        • id

          string — The article's ID.

        • kb_details

          array — The article's knowledge base detail list.

          Items:

          • kb_groups

            array — The article's knowledge base group.

            Items:

            • id

              string — The knowledge base group ID.

            • name

              string — The knowledge base group name.

          • kb_id

            string — The knowledge base's ID.

          • kb_name

            string — The knowledge base's name.

        • score

          number — The article's socre, from 0 to 1.

        • title

          string — The article's title.

        • url

          string — The article's URL.

      • bot_id

        string — The bot's ID that the engagement uses.

      • bot_session_id

        string — The bot session's ID.

      • engagement_id

        string — The engagement's ID.

      • intents

        array — The intents associated with the query.

        Items:

        • accuracy

          number — The intent's accuracy. From 0 to 1. (e.g. 0.5 means this intent has 50% accuracy.)

        • intent_id

          string — The intent's ID

        • intent_name

          string — The intent's name.

        • intent_type

          string, possible values: "custom_intent", "small_talk", "default_intent", "faq", default: "default_intent" — The intent's type. * `custom_intent` * `small_talk` * `default_intent` * FAQ

        • system_intent

          boolean — Whether this record belongs to the system intent.

      • language_code

        string, possible values: "en-GB", "en-US", "ar", "da-DK", "de-DE", "es-ES", "es-MX", "fr-CA", "fr-FR", "it-IT", "ja", "ko-KR", "pt-BR", "pt-PT", "ru", "zh-CN", "zh-HK", "nl-NL", default: "en-US" — The language code for the query.

      • query_id

        string — The query's ID.

      • query_text

        string — The query's text.

      • query_time

        string, format: date-time — The date and time when the query started in ISO 8601 format (**yyyy-MM-dd'T'HH:mm:ss'Z'** or **yyyy-MM-dd'T'HH:mm:ss**).

    • query_summary

      object — The summary of queries in an engagement.

      • count

        integer — The total count of the engagement's query IDs.

      • query_ids

        array — The engagement's query IDs.

        Items:

        string — The engagement's query ID.

    • skills

      array — The list of skills AI agent invoked in this engagement.

      Items:

      string — The name of the skill AI agent used in this engagement.

    • source_types

      array — The list of sources from where the engagement originates.

      Items:

      string, possible values: "ZCC", "ZCC_AI_AGENT", "ZP", "AMAZON", "GENESYS", "WEB_SDK", "WEB_SDK_SIMULATOR", "WEB_SDK_PREVIEW", "WEB_SDK_AI_AGENT", "WEB_SDK_AI_AGENT_PREVIEW", "MOBILE", "MOBILE_AGENT", "TEAM_CHAT_BETA", "TEAM_CHAT_CHANNEL", "ZECO", "ZECO_HEADLESS", "CHAT", "WHATSAPP", "SMS", "TEAM_CHAT", "FACEBOOK_MESSENGER", "INSTAGRAM" — The enum value for the source type.

    • start_time

      string, format: date-time — The engagement's start time and date in **yyyy-MM-dd'T'HH:mm:ss'Z'** format.

    • tools

      array — The list of tools AI agent used in this engagement.

      Items:

      string — The name of the tool AI agent used in this engagement.

    • topics

      array — The list of topics AI agent detected in this engagement.

      Items:

      string — The name of the topic AI agent used in this engagement.

    • transfer_accepted

      boolean — Whether the transfer was accpeted by the agent or not.

    • user_phone_number

      string — The phone number of the user.

  • from

    string, format: date-time — The start time and date in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, it returns data from the past 24 hours.

  • next_page_token

    string — The next page token paginates through a large set of results. It returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.

  • page_size

    integer, default: 10 — The number of records returned within a single API call. Constraints: Max: 100 Default: 10

  • timezone

    string — The call's [timezone ID](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists/#timezones). The default is **UTC**.

  • to

    string, format: date-time — **Required** only when the **from** parameters is specified. The end time and date in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format, the same format as the **from** parameter.

  • total_records

    integer — The total number of all the records available across pages.

Example:

{
  "next_page_token": "ngLawmAGlYagy37vLJtKMM4TkMnagfqWm73",
  "page_size": 10,
  "total_records": 44,
  "timezone": "UTC",
  "engagements": [
    {
      "engagement_id": "NF1kPajwRCGa9-cgHWGAQw",
      "start_time": "2023-07-11T22:17:49Z",
      "duration": 25,
      "campaign_name": "campaignA",
      "outcome": "assistanceRequested",
      "launch_url": "https://zoom.us",
      "intent_summary": {
        "intents_matched": [
          {
            "intent_id": "sbyW0BwLTUSKGzDsqcfnCQ",
            "intent_name": "Contact Support copy",
            "intent_type": "faq",
            "accuracy": 0.5,
            "system_intent": true
          }
        ],
        "count": 10
      },
      "language_code": "en-US",
      "end_time": "2023-07-12T22:17:49Z",
      "consumer_id": "KuwgnuP7RgSJAN3Kjaw_uQ",
      "deleted": true,
      "agents": [
        {
          "agent_type": "AI_VOICE",
          "agent_id": "QF0l7by1TfuIteSJfleVdg",
          "agent_name": "HappyBot AI Agent",
          "agent_version_id": "Mn8m2c4ERrWrzZ9SqjNHMQ",
          "agent_version_number": 8
        }
      ],
      "tools": [
        "End_Conversation"
      ],
      "skills": [
        "Route_To_Demo"
      ],
      "articles": [
        "Can I edit my chat welcome screen?"
      ],
      "topics": [
        "Weather Inquiry"
      ],
      "last_responder": "Consumer",
      "interaction_duration": 25,
      "interaction_turns": 7,
      "user_phone_number": "+12097899000",
      "source_types": [
        "ZCC_AI_AGENT"
      ],
      "transfer_accepted": true,
      "implicit_resolution": "RESOLVED",
      "agent_messages_sent": 3,
      "consumer_messages_sent": 2
    }
  ],
  "from": "2023-07-01T00:00:00Z",
  "to": "2023-07-02T23:59:59Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request
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 ZVA query details

  • Method: GET
  • Path: /virtual_agent/report/engagements/query_details
  • Tags: Report

Returns a list of ZVA engagement query details.

Scopes: zva_report:read,zva_report:read:admin

Granular Scopes: zva:read:list_queries:admin

Rate Limit Label: HEAVY

Responses

Status: 200 **HTTP Status Code:** `200` <br> ZVA engagement query details successfully returned.
Content-Type: application/json
  • engagement_query_details

    array — The list for the engagement query details.

    Items:

    • engagement_id

      string — The engagement's ID.

    • query_details

      array — The query details list that belong to the engagement.

      Items:

      • agent_id

        string — The ID of the agent used in the query. This field is available only when the agent type in the engagement is either **AI_VOICE** or **AI_CHAT**.

      • agent_name

        string — The name of the agent in the query. This field is available only when the agent type in the engagement is either **AI_VOICE** or **AI_CHAT**.

      • agent_session_id

        string — The session ID of the agent in the query. This field is available only when the agent type in the engagement is either **AI_VOICE** or **AI_CHAT**.

      • agent_type

        string, possible values: "AI_VOICE", "AI_CHAT" — The type of the agent used in the query. This field is available only when the agent type in the engagement is either **AI_VOICE** or **AI_CHAT**.

      • articles

        array — The query's articles.

        Items:

        • article_answer

          string — The article's answer.

        • article_id

          string — The article's ID.

        • article_score

          number — The article's score from 0 to 1.

        • article_title

          string — The article's title.

        • article_url

          string — The article's URL.

        • helpful_response

          string, possible values: "Yes", "No", "No Response" — Whether the article is helpful.

        • is_helpful

          boolean — Whether the article is helpful.

        • kb_details

          array — The list for the article's knowledge base details.

          Items:

          • kb_groups

            array — The article's knowledge base group.

            Items:

            • group_id

              string — The knowledge base group ID.

            • group_name

              string — The knowledge base group name.

          • kb_id

            string — The knowledge base's ID.

          • kb_name

            string — The knowledge base's name.

      • bot_id

        string — The bot's ID that the query uses. This field is available only when the agent type in the engagement is **CHAT**.

      • bot_name

        string — The bot's name. This field is available only when the agent type in the engagement is **CHAT**.

      • bot_session_id

        string — The bot session's ID. This field is available only when the agent type in the engagement is **CHAT**.

      • deleted

        boolean — Whether the status query is deleted or not.

      • intents

        array — The intents associated with the query.

        Items:

        • accuracy

          number — The intent's accuracy. From 0 to 1. (e.g. 0.5 means this intent has 50% accuracy.)

        • intent_id

          string — The intent's ID.

        • intent_name

          string — The intent's name.

        • intent_type

          string, possible values: "custom_intent", "small_talk", "default_intent", "faq", default: "default_intent" — The intent's type.

        • system_intent

          boolean, default: true — Whether this record belongs to the system intent.

      • language_code

        string, possible values: "en-GB", "en-US", "ar", "da-DK", "de-DE", "es-ES", "es-MX", "fr-CA", "fr-FR", "it-IT", "ja", "ko-KR", "pt-BR", "pt-PT", "ru", "zh-CN", "zh-HK", "nl-NL", default: "en-US" — The language code for the query.

      • query_id

        string — The query's ID.

      • query_text

        string — The query's text.

      • query_time

        string, format: date-time — The date and time when the query started in ISO 8601 format (**yyyy-MM-dd'T'HH:mm:ss'Z'** or **yyyy-MM-dd'T'HH:mm:ss**).

      • topic_name

        string — The name of the topic used in the query.

  • from

    string, format: date-time — The start time and date in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, it returns data from the past 24 hours.

  • next_page_token

    string — The next page token paginates through a large set of results. A next page token returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.

  • page_size

    integer, default: 10 — The number of records returned within a single API call. Constraints: Max: 100 Default: 10

  • timezone

    string — The call's [timezone ID](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists/#timezones). The default is **UTC**.

  • to

    string, format: date-time — This field is **required** only when the **from** parameter is specified. The end time and date is in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format, which is the same format as the **from** parameter.

  • total_records

    integer — The total number of all the records available across pages.

Example:

{
  "from": "2023-07-01T00:00:00Z",
  "to": "2023-07-02T23:59:59Z",
  "next_page_token": "ngLawmAGlYagy37vLJtKMM4TkMnagfqWm73",
  "page_size": 10,
  "total_records": 22,
  "timezone": "UTC",
  "engagement_query_details": [
    {
      "engagement_id": "NF1kPajwRCGa9-cgHWGAQw",
      "query_details": [
        {
          "query_id": "0b883910-0783-4383-9dcf-b5c9ba315438",
          "bot_id": "FZOKnPjmTse9ISSvQN4Zjg",
          "bot_name": "Chatbot",
          "bot_session_id": "ioknax-4siqztcqwga0xug",
          "query_time": "2023-07-11T22:17:49Z",
          "language_code": "en-US",
          "query_text": "Route 1",
          "intents": [
            {
              "intent_id": "sbyW0BwLTUSKGzDsqcfnCQ",
              "intent_name": "Contact Support copy",
              "intent_type": "faq",
              "accuracy": 0.5,
              "system_intent": false
            }
          ],
          "articles": [
            {
              "article_id": "-0zryh7dTEyY9HADPHm_dA",
              "article_title": "Can I edit my chat welcome screen?",
              "article_url": "https://docs.google.com/",
              "is_helpful": true,
              "article_score": 0.5,
              "kb_details": [
                {
                  "kb_id": "0zryh7dTEyY9HADPHm_dA",
                  "kb_name": "default knowledge base"
                }
              ],
              "helpful_response": "No Response"
            }
          ],
          "deleted": true,
          "topic_name": "Check refund status",
          "agent_id": "jSeZPyVUQamm7WSVZWpExA",
          "agent_name": "HappyBot Agent",
          "agent_type": "AI_VOICE",
          "agent_session_id": "vXd6K1SPSz2WSTz0t3wuRg"
        }
      ]
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1002` <br> Unable to fetch query details. <br>
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> Engagement does not exist: $engagement_ids <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 ZVA variable details

  • Method: GET
  • Path: /virtual_agent/report/engagements/variables
  • Tags: Report

Get a list of ZVA engagement variable details.

Scopes: zva_report:read,zva_report:read:admin

Granular Scopes: zva:read:list_variables:admin

Rate Limit Label: HEAVY

Responses

Status: 200 **HTTP Status Code:** `200` <br> ZVA engagement variable details successfully returned.
Content-Type: application/json
  • engagement_variable_details

    array — The list of engagements and its variable details.

    Items:

    • engagement_id

      string — The engagement ID.

    • variable_details

      array — The list of variable details belonging to the given engagement ID.

      Items:

      • group_id

        string — The ID of the group to which the variable belongs to.

      • group_name

        string — The name of the group to which the variable belongs to.

      • name

        string — The name of the variable.

      • need_mask

        boolean — Whether the value of the variable needs masking to protect sensitive data.

      • submitted_at

        string — The date and time stamp when the variable was submitted during the engagement in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format.

      • type

        string, possible values: "String", "Number", "Boolean", "DateTime", "Currency", "Percent", "Email", "URL", "Phone", "CustomEntity", "SystemEntity" — The type of the variable. Type Array and Json are not stored.

      • value

        string — The value of the variable. It is always a **string**.

      • variable_id

        string — The ID of the variable.

  • from

    string, format: date-time — The start time and date in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, it returns data from the past 24 hours.

  • next_page_token

    string — The next page token paginates through a large set of results. A next page token returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.

  • page_size

    integer, default: 10 — The number of records returned within a single API call. Constraints: Max: 100 Default: 10

  • timezone

    string — The call's [timezone ID](https://developers.zoom.us/docs/api/references/abbreviations/#timezones). The default is **UTC**.

  • to

    string, format: date-time — This field is **required** only when the **from** parameter is specified. The end time and date is in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format, which is the same format as the **from** parameter.

  • total_records

    integer — The total number of all the records available across pages.

Example:

{
  "from": "2023-07-01T00:00:00Z",
  "to": "2023-07-02T23:59:59Z",
  "next_page_token": "ngLawmAGlYagy37vLJtKMM4TkMnagfqWm73",
  "page_size": 10,
  "total_records": 22,
  "timezone": "UTC",
  "engagement_variable_details": [
    {
      "engagement_id": "G9wepeWxQAO7o0M6AJw2AA",
      "variable_details": [
        {
          "variable_id": "f15c3714-4c24-4fc1-b4e6-4f0702b5398f8b2a93e9-3125-4044-8cd6-06ce7f582de8",
          "type": "Number",
          "name": "startTime",
          "value": "1736866627040",
          "need_mask": true,
          "group_id": "1fb58719-22f3-439f-88e2-96c069347331",
          "group_name": "Engagement",
          "submitted_at": "2025-11-04T02:46:45Z"
        }
      ]
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request **Error Code:** `1002` <br> Unable to fetch variable details <br>
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Missing or invalid authentication
Status: 404 **HTTP Status Code:** `404` <br> Not Found **Error Code:** `1001` <br> Engagement does not exist: $engagement_ids <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 ZVA Surveys

  • Method: GET
  • Path: /virtual_agent/report/surveys
  • Tags: Report

Returns a list of ZVA engagement surveys.

Scopes: zva_report:read,zva_report:read:admin

Granular Scopes: zva:read:list_surveys:admin

Rate Limit Label: HEAVY

Responses

Status: 200 **HTTP Status Code:** `200` <br> ZVA engagement surveys successfully returned.
Content-Type: application/json
  • from

    string, format: date-time — The start time and date in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, it returns data from the past 24 hours.

  • next_page_token

    string — The next page token paginates through a large set of results. A next page token returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.

  • page_size

    integer, default: 10 — The number of records returned within a single API call. Constraints: Max: 100 Default: 10

  • surveys

    array — The list of surveys.

    Items:

    • agent_type

      string — The type of the virtual agent.

    • consumer

      string — The name of the consumer.

    • engagement_id

      string — The engagement ID of the survey.

    • results

      array — The results of the survey.

      Items:

      • answer

        string — The answer to the question.

      • question

        string — A question in the survey.

    • start_time

      string — The start time of the survey.

    • submitted_time

      string — The submitted time of the survey.

    • survey_id

      string — The ID of the survey.

    • survey_name

      string — The name of the survey.

    • virtual_agent

      string — The name of the virtual agent.

  • timezone

    string — The call's [timezone ID](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists/#timezones). The default is **UTC**.

  • to

    string, format: date-time — This field is **required** only when the **from** parameter is specified. The end time and date is in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format, which is the same format as the **from** parameter.

  • total_records

    integer — The total number of all the records available across pages.

Example:

{
  "from": "2025-10-01T00:00:00Z",
  "to": "2025-10-29T23:59:59Z",
  "next_page_token": "ngLawmAGlYagy37vLJtKMM4TkMnagfqWm73",
  "page_size": 10,
  "total_records": 30,
  "timezone": "UTC",
  "surveys": [
    {
      "survey_id": "r8DUXy4BSbO-UQ5ylOUyLg",
      "survey_name": "voice survey",
      "engagement_id": "N-ecLZBoS-ayCabdwDQSrA",
      "agent_type": "Voice",
      "virtual_agent": "voice agent",
      "consumer": "consumer",
      "start_time": "2025-09-03T05:52:22Z",
      "submitted_time": "2025-09-03T05:55:22Z",
      "results": [
        {
          "question": "What color do you like?",
          "answer": "green"
        }
      ]
    }
  ]
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Unable to fetch survey results.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Missing or invalid authentication.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Survey results do not exist.
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 ZVA transcripts

  • Method: GET
  • Path: /virtual_agent/report/transcripts
  • Tags: Report

Generates a list of ZVA transcripts.

Scopes: zva_report:read,zva_report:read:admin

Granular Scopes: zva:read:list_transcripts:admin

Rate Limit Label: HEAVY

Responses

Status: 200 **HTTP Status Code:** `200` <br> ZVA transcripts successfully returned.
Content-Type: application/json
  • from

    string, format: date-time — The start time and date in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format. The defined date range should be a month, as the response only includes one month's worth of data. If no start date is specified, returns data from the past 24 hours.

  • next_page_token

    string — The next page token paginates through a large set of results. It returns whenever the set of available results exceeds the current page size. The expiration period for this token is 15 minutes.

  • page_size

    integer, default: 10 — The number of records returned within a single API call. Constraints: Maximum - 100, Default - 10

  • timezone

    string — The call's [timezone ID](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists/#timezones). The default is **UTC**.

  • to

    string, format: date-time — **Required** only when the **from** parameter is specified. The end time and date in **yyyy-mm-dd** or **yyyy-MM-dd'T'HH:mm:ss'Z'** format, in the same format as the **from** parameter.

  • total_records

    integer — The total number of all the records available across pages.

  • transcripts

    array — The information about the transcripts.

    Items:

    • channel

      string, possible values: "Chat Agent", "Voice Agent", "Classic ChatBot" — The engagement's channel type.

    • end_time

      string, format: date-time — The engagement's end time and date in **yyyy-MM-dd'T'HH:mm:ss'Z'** format.

    • engagement_id

      string — The engagement's ID.

    • interaction_duration

      integer — The total number of seconds of interaction between the AI agent and the consumer.

    • messages

      array — A list of messages.

      Items:

      • kb_articles

        array — A list of knowledge base articles involved in generating the message.

        Items:

        • title

          string — The title of the article.

        • url

          string — The article URL.

      • message_type

        string — The Ttpe of the message.

      • sender

        string, possible values: "AI Agent", "Bot", "Consumer" — The sender of the message.

      • text

        string — The message content.

      • timestamp

        string, format: date-time — The message sent time and date in **yyyy-MM-dd'T'HH:mm:ss'Z'** format.

    • start_time

      string, format: date-time — The engagement's start time and date in **yyyy-MM-dd'T'HH:mm:ss'Z'** format.

    • total_duration

      integer — The duration of the engagement in seconds.

Example:

{
  "next_page_token": "ngLawmAGlYagy37vLJtKMM4TkMnagfqWm73",
  "page_size": 10,
  "total_records": 44,
  "timezone": "UTC",
  "transcripts": [
    {
      "engagement_id": "akNPVkF0ShCG-X5dY2Nd0Q",
      "channel": "Chat Agent",
      "start_time": "2023-07-11T22:17:30Z",
      "total_duration": 25,
      "interaction_duration": 20,
      "end_time": "2023-07-12T22:17:55Z",
      "messages": [
        {
          "sender": "AI Agent",
          "timestamp": "2023-07-12T22:17:49Z",
          "message_type": "text",
          "text": "Message in the conversation",
          "kb_articles": [
            {
              "title": "Creating and Scheduling Meetings.",
              "url": "https://support.zoom.com/article_1"
            }
          ]
        }
      ]
    }
  ],
  "from": "2023-07-01T00:00:00Z",
  "to": "2023-07-02T23:59:59Z"
}
Status: 400 **HTTP Status Code:** `400` <br> Bad Request Unable to fetch Transcripts.
Status: 401 **HTTP Status Code:** `401` <br> Unauthorized Missing or invalid authentication.
Status: 404 **HTTP Status Code:** `404` <br> Not Found Transcripts do not exist.
Status: 429 **HTTP Status Code:** `429` <br> Too Many Requests. For more information, see [rate limits](https://developers.zoom.us/docs/api/rate-limits/).