fork of hey-api/openapi-ts because I need some additional things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #2516 from hey-api/feat/webhooks-types

feat(parser): track webhooks in OpenAPI 3.1

authored by

Lubos and committed by
GitHub
5dcb0c28 c2b34a8b

+15041 -237
+5
.changeset/dirty-dots-decide.md
··· 1 + --- 2 + '@hey-api/openapi-ts': patch 3 + --- 4 + 5 + feat(typescript): add webhooks configuration options
+5
.changeset/three-meals-pay.md
··· 1 + --- 2 + '@hey-api/openapi-ts': patch 3 + --- 4 + 5 + feat(validator): add webhooks configuration options
+5
.changeset/wild-pants-act.md
··· 1 + --- 2 + '@hey-api/openapi-ts': patch 3 + --- 4 + 5 + feat(parser): handle webhooks in OpenAPI 3.1
-1
.gitignore
··· 24 24 test/e2e/generated 25 25 26 26 # debug files 27 - debug 28 27 openapi-ts-debug-* 29 28 # error files 30 29 logs
-3
package.json
··· 26 26 "format": "prettier --write .", 27 27 "lint:fix": "prettier --check --write . && eslint . --fix", 28 28 "lint": "prettier --check . && eslint .", 29 - "openapi-ts": "turbo run $1 --filter=\"@hey-api/openapi-ts\"", 30 - "openapi-ts-tests": "turbo run $1 --filter=\"./packages/openapi-ts-tests/**/*\"", 31 - "openapi-ts-tests-sample": "turbo run $1 --filter=\"./packages/openapi-ts-tests/zod/v4\"", 32 29 "prepare": "husky", 33 30 "test:coverage": "turbo run test:coverage", 34 31 "test:e2e": "turbo run test:e2e",
+8
packages/openapi-ts-tests/main/test/3.1.x.test.ts
··· 890 890 }), 891 891 description: 'client with SSE (Nuxt)', 892 892 }, 893 + { 894 + config: createConfig({ 895 + input: 'zoom-video-sdk.json', 896 + output: 'webhooks', 897 + plugins: ['@hey-api/typescript', 'valibot', 'zod'], 898 + }), 899 + description: 'webhook types and validator schemas', 900 + }, 893 901 ]; 894 902 895 903 it.each(scenarios)('$description', async ({ config }) => {
+2
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/index.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + export * from './types.gen';
+3312
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/types.gen.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + 3 + /** 4 + * # session.user_phone_callout_ringing 5 + * 6 + * The **Invited party's phone (call out) ringing** event is triggered every time a user's phone is ringing when they were invited to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038). 7 + * 8 + * ## Prerequisites 9 + * 10 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 11 + * * A valid **Event Notification Endpoint URL**. 12 + * * The **Invited party's phone (call out) ringing** subscription enabled under the **Session** event. 13 + * 14 + * 15 + * 16 + * 17 + * **Event type**: `session.user_phone_callout_ringing` 18 + * 19 + */ 20 + export type SessionUserPhoneCalloutRingingWebhookPayload = { 21 + /** 22 + * The name of the event. 23 + */ 24 + event: string; 25 + /** 26 + * A timestamp at which the event occurred. 27 + */ 28 + event_ts: number; 29 + payload: { 30 + /** 31 + * The account ID of the session host. 32 + */ 33 + account_id: string; 34 + /** 35 + * Information about the session. 36 + */ 37 + object: { 38 + /** 39 + * The session ID. 40 + * @deprecated 41 + */ 42 + id?: number; 43 + /** 44 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 45 + * @deprecated 46 + */ 47 + uuid?: string; 48 + /** 49 + * Unique session identifier. Each instance of the session will have its own session_id. 50 + */ 51 + session_id: string; 52 + /** 53 + * Session name. 54 + */ 55 + session_name: string; 56 + /** 57 + * The Video SDK custom session ID. 58 + */ 59 + session_key: string; 60 + /** 61 + * Another identifier for the inviter. Can be a number or characters. 62 + */ 63 + user_key: string; 64 + /** 65 + * The user ID of the session host. 66 + */ 67 + host_id: string; 68 + /** 69 + * Information about the invited user. 70 + */ 71 + participant: { 72 + /** 73 + * The user's name to display in the session. 74 + */ 75 + invitee_name: string; 76 + /** 77 + * The user's phone number. 78 + */ 79 + phone_number: number; 80 + /** 81 + * The number used to call out to the invited user. 82 + */ 83 + from_number: number; 84 + }; 85 + }; 86 + }; 87 + }; 88 + 89 + export type SessionUserPhoneCalloutRingingWebhookRequest = { 90 + body: SessionUserPhoneCalloutRingingWebhookPayload; 91 + key: 'session.user_phone_callout_ringing'; 92 + path?: never; 93 + query?: never; 94 + }; 95 + 96 + /** 97 + * # session.user_room_system_callout_ringing 98 + * 99 + * The **Invited party's phone (call out) ringing in Zoom room** event is triggered every time a user's phone is ringing when they were invited to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035). 100 + * 101 + * ## Prerequisites 102 + * 103 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 104 + * * A valid **Event Notification Endpoint URL**. 105 + * * The **Invited party's phone (call out) ringing in Zoom room** subscription enabled under the **Session** event. 106 + * 107 + * 108 + * 109 + * **Event type**: `session.user_room_system_callout_ringing` 110 + * 111 + */ 112 + export type SessionUserRoomSystemCalloutRingingWebhookPayload = { 113 + /** 114 + * The name of the event. 115 + */ 116 + event: string; 117 + /** 118 + * A timestamp at which the event occurred. 119 + */ 120 + event_ts: number; 121 + payload: { 122 + /** 123 + * The account ID of the session host. 124 + */ 125 + account_id: string; 126 + /** 127 + * Information about the session. 128 + */ 129 + object: { 130 + /** 131 + * The session ID. 132 + * @deprecated 133 + */ 134 + id?: number; 135 + /** 136 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 137 + * @deprecated 138 + */ 139 + uuid?: string; 140 + /** 141 + * Unique session identifier. Each instance of the session will have its own session_id. 142 + */ 143 + session_id: string; 144 + /** 145 + * Session name. 146 + */ 147 + session_name: string; 148 + /** 149 + * The user ID of the session host. 150 + */ 151 + host_id: string; 152 + /** 153 + * The request unique identifier (UUID). 154 + */ 155 + message_id: string; 156 + /** 157 + * The user name of the event's trigger. 158 + */ 159 + inviter_name: string; 160 + /** 161 + * Information about the invited participant. 162 + */ 163 + participant: { 164 + /** 165 + * The type of call out. Use a value of h323 or sip. 166 + */ 167 + call_type: string; 168 + /** 169 + * The user's device IP address. 170 + */ 171 + device_ip: string; 172 + [key: string]: unknown | string; 173 + }; 174 + }; 175 + }; 176 + }; 177 + 178 + export type SessionUserRoomSystemCalloutRingingWebhookRequest = { 179 + body: SessionUserRoomSystemCalloutRingingWebhookPayload; 180 + key: 'session.user_room_system_callout_ringing'; 181 + path?: never; 182 + query?: never; 183 + }; 184 + 185 + /** 186 + * # session.recording_started 187 + * --- 188 + * 189 + * Event: `session.recording_started` 190 + * 191 + * ## Event description 192 + * 193 + * The **Session recording started** event is triggered every time a recording is started by one of your app users or account users. 194 + * 195 + * Only a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. 196 + * 197 + * ## Prerequisites 198 + * 199 + * * Cloud Recording must be enabled on the Video SDK account. 200 + * * Event Subscriptions must be enabled for your app with the following configurations: 201 + * * A valid Event Notification Endpoint URL. 202 + * * **Session recording started** subscription enabled under the **Recording** event. 203 + * 204 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_started` event notification: 205 + * 206 + * 207 + * 208 + * **Event type**: `session.recording_started` 209 + * 210 + */ 211 + export type SessionRecordingStartedWebhookPayload = { 212 + /** 213 + * The event's name. 214 + */ 215 + event: 'session.recording_started'; 216 + /** 217 + * A timestamp, in milliseconds since epoch, at which the event occurred. 218 + */ 219 + event_ts: number; 220 + payload: { 221 + /** 222 + * The Video SDK account ID. 223 + */ 224 + account_id: string; 225 + /** 226 + * Information about the session. This object only returns updated properties. 227 + */ 228 + object: { 229 + /** 230 + * Unique session identifier. Each instance of the session will have its own session_id. 231 + */ 232 + session_id: string; 233 + /** 234 + * Session name. 235 + */ 236 + session_name: string; 237 + /** 238 + * The Video SDK custom session ID. 239 + */ 240 + session_key: string; 241 + /** 242 + * The time at which the session started. 243 + */ 244 + start_time: string; 245 + /** 246 + * The user's timezone. 247 + */ 248 + timezone: string; 249 + recording_file: { 250 + /** 251 + * The recording start time. 252 + */ 253 + recording_start?: string; 254 + /** 255 + * The recording end time. Response in general query. 256 + */ 257 + recording_end?: string; 258 + }; 259 + }; 260 + }; 261 + }; 262 + 263 + export type SessionRecordingStartedWebhookRequest = { 264 + body: SessionRecordingStartedWebhookPayload; 265 + key: 'session.recording_started'; 266 + path?: never; 267 + query?: never; 268 + }; 269 + 270 + /** 271 + * # session.recording_resumed 272 + * --- 273 + * 274 + * Event: `session.recording_resumed` 275 + * 276 + * ## Event description 277 + * 278 + * The **Session recording resumed** event is triggered every time a previously paused recording of a session is resumed. 279 + * 280 + * Only a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. 281 + * 282 + * ## Prerequisites 283 + * 284 + * * Cloud Recording must be enabled on the Video SDK account. 285 + * * Event Subscriptions must be enabled for your app with the following configurations: 286 + * * A valid Event Notification Endpoint URL. 287 + * * **Session recording resumed** subscription enabled under the **Recording** event. 288 + * 289 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_resumed` event notification: 290 + * 291 + * 292 + * 293 + * **Event type**: `session.recording_resumed` 294 + * 295 + */ 296 + export type SessionRecordingResumedWebhookPayload = { 297 + /** 298 + * The event's name. 299 + */ 300 + event: 'session.recording_resumed'; 301 + /** 302 + * A timestamp, in milliseconds since epoch, at which the event occurred. 303 + */ 304 + event_ts: number; 305 + payload: { 306 + /** 307 + * The Video SDK account ID. 308 + */ 309 + account_id: string; 310 + /** 311 + * Information about the session. This object only returns updated properties. 312 + */ 313 + object: { 314 + /** 315 + * Unique session identifier. Each instance of the session will have its own session_id. 316 + */ 317 + session_id: string; 318 + /** 319 + * Session name. 320 + */ 321 + session_name: string; 322 + /** 323 + * The Video SDK custom session ID. 324 + */ 325 + session_key: string; 326 + /** 327 + * The time at which the session started. 328 + */ 329 + start_time: string; 330 + /** 331 + * The user's timezone. 332 + */ 333 + timezone: string; 334 + recording_file: { 335 + /** 336 + * The recording start time. 337 + */ 338 + recording_start?: string; 339 + /** 340 + * The recording end time. Response in general query. 341 + */ 342 + recording_end?: string; 343 + }; 344 + }; 345 + }; 346 + }; 347 + 348 + export type SessionRecordingResumedWebhookRequest = { 349 + body: SessionRecordingResumedWebhookPayload; 350 + key: 'session.recording_resumed'; 351 + path?: never; 352 + query?: never; 353 + }; 354 + 355 + /** 356 + * # session.live_streaming_stopped 357 + * --- 358 + * 359 + * 360 + * The Session Live Streaming Stopped event is triggered every time a user stops a live stream. 361 + * 362 + * ## Prerequisites 363 + * Event Subscriptions must be enabled for your app with the following configurations: 364 + * 365 + * * A valid Event Notification Endpoint URL. 366 + * * **Session Live Streaming Stopped** subscription enabled under the **Video SDK** event. 367 + * 368 + * The tabs below display the complete schema, payload with data types, and an example of the `session.live_streaming_stopped` event notification: 369 + * 370 + * 371 + * 372 + * **Event type**: `session.live_streaming_stopped` 373 + * 374 + */ 375 + export type SessionLiveStreamingStoppedWebhookPayload = { 376 + /** 377 + * The name of the event. 378 + */ 379 + event: 'session.live_streaming_stopped'; 380 + /** 381 + * Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format. 382 + */ 383 + event_ts: number; 384 + payload: { 385 + /** 386 + * The Video SDK account ID. 387 + */ 388 + account_id: string; 389 + /** 390 + * Information about the session. 391 + */ 392 + object: { 393 + /** 394 + * The session ID. 395 + * @deprecated 396 + */ 397 + id: string; 398 + /** 399 + * Unique session identifier. Each instance of the session will have its own session_id. 400 + */ 401 + session_id: string; 402 + /** 403 + * Session name. 404 + */ 405 + session_name: string; 406 + /** 407 + * The Video SDK custom session ID. 408 + */ 409 + session_key?: string; 410 + /** 411 + * The session's start time. 412 + */ 413 + start_time: string; 414 + /** 415 + * Information about the participant. 416 + */ 417 + live_streaming: { 418 + /** 419 + * The name of the Live Streaming service. 420 + */ 421 + service: 'Facebook' | 'Workplace_by_Facebook' | 'YouTube' | 'Custom_Live_Streaming_Service'; 422 + /** 423 + * The live stream settings. 424 + */ 425 + custom_live_streaming_settings: { 426 + /** 427 + * The stream's URL. 428 + */ 429 + stream_url: string; 430 + /** 431 + * The stream's Key. 432 + */ 433 + stream_key: string; 434 + /** 435 + * The live stream's page URL. 436 + */ 437 + page_url: string; 438 + /** 439 + * The number of pixels in each dimension that the video camera can display. 440 + */ 441 + resolution?: string; 442 + }; 443 + /** 444 + * The live stream's stop time. 445 + */ 446 + date_time: string; 447 + }; 448 + }; 449 + }; 450 + }; 451 + 452 + export type SessionLiveStreamingStoppedWebhookRequest = { 453 + body: SessionLiveStreamingStoppedWebhookPayload; 454 + key: 'session.live_streaming_stopped'; 455 + path?: never; 456 + query?: never; 457 + }; 458 + 459 + /** 460 + * # session.stream_ingestion_stopped 461 + * Zoom triggers the **Session stream ingestion stopped** event every time a user stops sending live incoming streams. 462 + * 463 + * ## Prerequisites 464 + * 465 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 466 + * * A valid **Event Notification Endpoint URL**. 467 + * * The **Session stream ingestion stopped** subscription enabled under the **Video SDK** event. 468 + * 469 + * 470 + * **Event type**: `session.stream_ingestion_stopped` 471 + * 472 + */ 473 + export type SessionStreamIngestionStoppedWebhookPayload = { 474 + /** 475 + * Event name. 476 + */ 477 + event: 'session.stream_ingestion_stopped'; 478 + /** 479 + * Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format. 480 + */ 481 + event_ts: number; 482 + payload: { 483 + /** 484 + * The Video SDK account ID. 485 + */ 486 + account_id: string; 487 + /** 488 + * Information about the session. 489 + */ 490 + object: { 491 + /** 492 + * Unique session identifier. Each instance of the session will have its own session_id. 493 + */ 494 + session_id: string; 495 + /** 496 + * Session name. 497 + */ 498 + session_name: string; 499 + /** 500 + * The Video SDK custom session ID. 501 + */ 502 + session_key?: string; 503 + /** 504 + * Information about the stream ingestion. 505 + */ 506 + stream_ingestion: { 507 + /** 508 + * The stream ingestion ID. 509 + */ 510 + stream_id: string; 511 + /** 512 + * The stream ingestion name. 513 + */ 514 + stream_name: string; 515 + /** 516 + * The stream ingestion description. 517 + */ 518 + stream_description?: string; 519 + /** 520 + * The stream ingestion key. 521 + */ 522 + stream_key: string; 523 + /** 524 + * The stream URL. 525 + */ 526 + stream_url: string; 527 + /** 528 + * The backup stream URL. 529 + */ 530 + backup_stream_url: string; 531 + }; 532 + }; 533 + }; 534 + }; 535 + 536 + export type SessionStreamIngestionStoppedWebhookRequest = { 537 + body: SessionStreamIngestionStoppedWebhookPayload; 538 + key: 'session.stream_ingestion_stopped'; 539 + path?: never; 540 + query?: never; 541 + }; 542 + 543 + /** 544 + * # session.user_room_system_callout_rejected 545 + * 546 + * The **Invited party rejected a session invitation through phone (call out) via Zoom room** event is triggered every time a user rejects an invitation to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035). 547 + * 548 + * ## Prerequisites 549 + * 550 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 551 + * * A valid **Event Notification Endpoint URL**. 552 + * * The **Invited party rejected a session invitation through phone (call out) via Zoom room** subscription enabled under the **Session** event. 553 + * 554 + * 555 + * 556 + * **Event type**: `session.user_room_system_callout_rejected` 557 + * 558 + */ 559 + export type SessionUserRoomSystemCalloutRejectedWebhookPayload = { 560 + /** 561 + * The name of the event. 562 + */ 563 + event: string; 564 + /** 565 + * A timestamp at which the event occurred. 566 + */ 567 + event_ts: number; 568 + payload: { 569 + /** 570 + * The account ID of the session host. 571 + */ 572 + account_id: string; 573 + /** 574 + * Information about the session. 575 + */ 576 + object: { 577 + /** 578 + * The session ID. 579 + * @deprecated 580 + */ 581 + id?: number; 582 + /** 583 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 584 + * @deprecated 585 + */ 586 + uuid?: string; 587 + /** 588 + * Unique session identifier. Each instance of the session will have its own session_id. 589 + */ 590 + session_id: string; 591 + /** 592 + * Session name. 593 + */ 594 + session_name: string; 595 + /** 596 + * The user ID of the session host. 597 + */ 598 + host_id: string; 599 + /** 600 + * The request unique identifier (UUID). 601 + */ 602 + message_id: string; 603 + /** 604 + * The user name of the event's trigger. 605 + */ 606 + inviter_name: string; 607 + /** 608 + * Information about the invited participant. 609 + */ 610 + participant: { 611 + /** 612 + * The type of call out. Use a value of h323 or sip. 613 + */ 614 + call_type: string; 615 + /** 616 + * The user's device IP address. 617 + */ 618 + device_ip: string; 619 + [key: string]: unknown | string; 620 + }; 621 + }; 622 + }; 623 + }; 624 + 625 + export type SessionUserRoomSystemCalloutRejectedWebhookRequest = { 626 + body: SessionUserRoomSystemCalloutRejectedWebhookPayload; 627 + key: 'session.user_room_system_callout_rejected'; 628 + path?: never; 629 + query?: never; 630 + }; 631 + 632 + /** 633 + * # session.alert 634 + * --- 635 + * 636 + * 637 + * The Session Alert event is triggered every time a service issue is encountered during a session in your account. 638 + * 639 + * The following quality metrics can trigger an alert: 640 + * 641 + * * Unstable audio quality 642 + * * Unstable video quality 643 + * * Unstable screen share quality 644 + * * High CPU occupation 645 + * * Call Reconnection 646 + * 647 + * ## Prerequisites 648 + * Event Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations: 649 + * 650 + * * A valid Event Notification Endpoint URL. 651 + * * Session Alert subscription enabled under the Video SDK event. 652 + * 653 + * The tabs below display the complete schema, payload with data types, and an example of the `session.alert` event notification: 654 + * 655 + * 656 + * **Event type**: `session.alert` 657 + * 658 + */ 659 + export type SessionAlertWebhookPayload = { 660 + /** 661 + * The event's name. 662 + */ 663 + event: 'session.alert'; 664 + /** 665 + * A timestamp, in milliseconds since epoch, at which the event occurred. 666 + */ 667 + event_ts: number; 668 + payload: { 669 + /** 670 + * The Video SDK account ID. 671 + */ 672 + account_id: string; 673 + /** 674 + * Information about the session. This object only returns updated properties. 675 + */ 676 + object: { 677 + /** 678 + * The session ID. 679 + */ 680 + id: string; 681 + /** 682 + * Unique session identifier. Each instance of the session will have its own session_id. 683 + */ 684 + session_id: string; 685 + /** 686 + * Session name. 687 + */ 688 + session_name: string; 689 + /** 690 + * The Video SDK custom session ID. 691 + */ 692 + session_key?: string; 693 + /** 694 + * Issues that occurred during the session. 695 + */ 696 + issues: Array<'Unstable audio quality' | 'Unstable video quality' | 'Unstable screen share quality' | 'High CPU occupation' | 'Call Reconnection'>; 697 + }; 698 + }; 699 + }; 700 + 701 + export type SessionAlertWebhookRequest = { 702 + body: SessionAlertWebhookPayload; 703 + key: 'session.alert'; 704 + path?: never; 705 + query?: never; 706 + }; 707 + 708 + /** 709 + * # session.sharing_ended 710 + * --- 711 + * 712 + * 713 + * The Session Sharing Ended event is triggered every time a user stops sharing the screen during a session. 714 + * 715 + * ## Prerequisites 716 + * Event Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations: 717 + * 718 + * * A valid Event Notification Endpoint URL. 719 + * * **Session Sharing Ended** subscription enabled under the **Video SDK** event. 720 + * 721 + * The tabs below display the complete schema, payload with data types, and an example of the `session.sharing_ended` event notification: 722 + * 723 + * 724 + * 725 + * **Event type**: `session.sharing_ended` 726 + * 727 + */ 728 + export type SessionSharingEndedWebhookPayload = { 729 + /** 730 + * The event's name. 731 + */ 732 + event: 'session.sharing_ended'; 733 + /** 734 + * A timestamp, in milliseconds since epoch, at which the event occurred. 735 + */ 736 + event_ts: number; 737 + payload: { 738 + /** 739 + * The Video SDK account ID. 740 + */ 741 + account_id: string; 742 + /** 743 + * Information about the session. This object only returns updated properties. 744 + */ 745 + object: { 746 + /** 747 + * The session ID. 748 + * @deprecated 749 + */ 750 + id: string; 751 + /** 752 + * Unique session identifier. Each instance of the session will have its own session_id. 753 + */ 754 + session_id: string; 755 + /** 756 + * Session name. 757 + */ 758 + session_name: string; 759 + /** 760 + * The Video SDK custom session ID. 761 + */ 762 + session_key?: string; 763 + /** 764 + * Information about the user. 765 + */ 766 + user: { 767 + /** 768 + * The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session. 769 + */ 770 + id: string; 771 + /** 772 + * The user's username. 773 + */ 774 + name: string; 775 + /** 776 + * Another identifier for the user. Can be a number or characters. 777 + */ 778 + user_key?: string; 779 + /** 780 + * Information about the session's screen sharing. 781 + */ 782 + sharing_details: { 783 + /** 784 + * The type of shared content: 785 + * * application — An application. For example, a web browser. 786 + * * whiteboard — The Zoom [whiteboard](https://support.zoom.us/hc/en-us/articles/205677665-Sharing-a-whiteboard). 787 + * * desktop — A user's desktop. 788 + * * unknown — An unrecognized application, such as a third party app. 789 + */ 790 + content: 'application' | 'whiteboard' | 'desktop' | 'unknown'; 791 + /** 792 + * The session's screen sharing date and time. 793 + */ 794 + date_time: string; 795 + }; 796 + }; 797 + }; 798 + }; 799 + }; 800 + 801 + export type SessionSharingEndedWebhookRequest = { 802 + body: SessionSharingEndedWebhookPayload; 803 + key: 'session.sharing_ended'; 804 + path?: never; 805 + query?: never; 806 + }; 807 + 808 + /** 809 + * # session.recording_paused 810 + * --- 811 + * 812 + * Event: `session.recording_paused` 813 + * 814 + * ## Event description 815 + * 816 + * The **Session recording paused** event is triggered every time a recording is paused by one of your app or account users. 817 + * 818 + * Only a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. 819 + * 820 + * ## Prerequisites 821 + * 822 + * * Cloud Recording must be enabled on the Video SDK account. 823 + * * Event Subscriptions must be enabled for your app with the following configurations: 824 + * * A valid Event Notification Endpoint URL. 825 + * * "**Session recording paused**" subscription enabled under the **Recording** event. 826 + * 827 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_paused` event notification: 828 + * 829 + * 830 + * 831 + * **Event type**: `session.recording_paused` 832 + * 833 + */ 834 + export type SessionRecordingPausedWebhookPayload = { 835 + /** 836 + * The event's name. 837 + */ 838 + event: 'session.recording_paused'; 839 + /** 840 + * A timestamp, in milliseconds since epoch, at which the event occurred. 841 + */ 842 + event_ts: number; 843 + payload: { 844 + /** 845 + * The Video SDK account ID. 846 + */ 847 + account_id: string; 848 + /** 849 + * Information about the session. This object only returns updated properties. 850 + */ 851 + object: { 852 + /** 853 + * Unique session identifier. Each instance of the session will have its own session_id. 854 + */ 855 + session_id: string; 856 + /** 857 + * Session name. 858 + */ 859 + session_name: string; 860 + /** 861 + * The Video SDK custom session ID. 862 + */ 863 + session_key: string; 864 + /** 865 + * The time at which the session started. 866 + */ 867 + start_time: string; 868 + /** 869 + * The user's timezone. 870 + */ 871 + timezone: string; 872 + recording_file: { 873 + /** 874 + * The recording start time. 875 + */ 876 + recording_start?: string; 877 + /** 878 + * The recording end time. Response in general query. 879 + */ 880 + recording_end?: string; 881 + }; 882 + }; 883 + }; 884 + }; 885 + 886 + export type SessionRecordingPausedWebhookRequest = { 887 + body: SessionRecordingPausedWebhookPayload; 888 + key: 'session.recording_paused'; 889 + path?: never; 890 + query?: never; 891 + }; 892 + 893 + /** 894 + * # session.ended 895 + * --- 896 + * 897 + * 898 + * The Session Ended event is triggered when the host ends the session, or when all users have left the session. 899 + * 900 + * ## Prerequisites 901 + * Event Subscriptions must be enabled for your app with the following configurations: 902 + * 903 + * * A valid Event Notification Endpoint URL. 904 + * * **Session Ended** subscription enabled under the **Video SDK** event. 905 + * 906 + * The tabs below display the complete schema, payload with data types, and an example of the `session.ended` event notification: 907 + * 908 + * 909 + * 910 + * **Event type**: `session.ended` 911 + * 912 + */ 913 + export type SessionEndedWebhookPayload = { 914 + /** 915 + * The name of the event. 916 + */ 917 + event: 'session.ended'; 918 + /** 919 + * Timestamp at which the event occurred, in milliseconds since epoch. The value of this field is returned in long(int64) format. 920 + */ 921 + event_ts: number; 922 + payload: { 923 + /** 924 + * The Video SDK account ID. 925 + */ 926 + account_id: string; 927 + /** 928 + * Information about the session. 929 + */ 930 + object: { 931 + /** 932 + * The session ID. 933 + * @deprecated 934 + */ 935 + id: string; 936 + /** 937 + * Unique session identifier. Each instance of the session will have its own session_id. 938 + */ 939 + session_id: string; 940 + /** 941 + * Session name. 942 + */ 943 + session_name: string; 944 + /** 945 + * The Video SDK custom session ID. 946 + */ 947 + session_key?: string; 948 + /** 949 + * The session's start time. 950 + */ 951 + start_time: string; 952 + /** 953 + * The session's end time. 954 + */ 955 + end_time: string; 956 + }; 957 + }; 958 + }; 959 + 960 + export type SessionEndedWebhookRequest = { 961 + body: SessionEndedWebhookPayload; 962 + key: 'session.ended'; 963 + path?: never; 964 + query?: never; 965 + }; 966 + 967 + /** 968 + * # session.started 969 + * --- 970 + * 971 + * 972 + * The Session Start event is triggered when the first user (including host and co-host) joins. 973 + * 974 + * ## Prerequisites 975 + * Event Subscriptions must be enabled for your app with the following configurations: 976 + * 977 + * * A valid Event Notification Endpoint URL. 978 + * * **Session Started** subscription enabled under the **Video SDK** event. 979 + * 980 + * The tabs below display the complete schema, payload with data types, and an example of the `session.started` event notification: 981 + * 982 + * 983 + * 984 + * **Event type**: `session.started` 985 + * 986 + */ 987 + export type SessionStartedWebhookPayload = { 988 + /** 989 + * The name of the event. 990 + */ 991 + event: 'session.started'; 992 + /** 993 + * Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format. 994 + */ 995 + event_ts: number; 996 + payload: { 997 + /** 998 + * The Video SDK account ID. 999 + */ 1000 + account_id: string; 1001 + /** 1002 + * Information about the session. 1003 + */ 1004 + object: { 1005 + /** 1006 + * The session's ID. 1007 + * @deprecated 1008 + */ 1009 + id: string; 1010 + /** 1011 + * Unique session identifier. Each instance of the session will have its own session_id. 1012 + */ 1013 + session_id: string; 1014 + /** 1015 + * Session name. 1016 + */ 1017 + session_name: string; 1018 + /** 1019 + * The Video SDK custom session ID. 1020 + */ 1021 + session_key?: string; 1022 + /** 1023 + * The session's start time. 1024 + */ 1025 + start_time: string; 1026 + }; 1027 + }; 1028 + }; 1029 + 1030 + export type SessionStartedWebhookRequest = { 1031 + body: SessionStartedWebhookPayload; 1032 + key: 'session.started'; 1033 + path?: never; 1034 + query?: never; 1035 + }; 1036 + 1037 + /** 1038 + * # session.stream_ingestion_unbind 1039 + * Zoom triggers the **Session stream ingestion unbind** event every time a session unbinds a stream key. 1040 + * 1041 + * ## Prerequisites 1042 + * 1043 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 1044 + * * A valid **Event Notification Endpoint URL**. 1045 + * * The **Session stream ingestion unbind** subscription enabled under the **Video SDK** event. 1046 + * 1047 + * 1048 + * **Event type**: `session.stream_ingestion_unbind` 1049 + * 1050 + */ 1051 + export type SessionStreamIngestionUnbindWebhookPayload = { 1052 + /** 1053 + * Event name. 1054 + */ 1055 + event: 'session.stream_ingestion_unbind'; 1056 + /** 1057 + * Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long (int64) format. 1058 + */ 1059 + event_ts: number; 1060 + payload: { 1061 + /** 1062 + * The Video SDK account ID. 1063 + */ 1064 + account_id: string; 1065 + /** 1066 + * Information about the session. 1067 + */ 1068 + object: { 1069 + /** 1070 + * Unique session identifier. Each instance of the session will have its own session_id. 1071 + */ 1072 + session_id: string; 1073 + /** 1074 + * Session name. 1075 + */ 1076 + session_name: string; 1077 + /** 1078 + * The Video SDK custom session ID. 1079 + */ 1080 + session_key?: string; 1081 + /** 1082 + * Information about the stream ingestion. 1083 + */ 1084 + stream_ingestion: { 1085 + /** 1086 + * The stream ingestion ID. 1087 + */ 1088 + stream_id: string; 1089 + /** 1090 + * The stream ingestion name. 1091 + */ 1092 + stream_name: string; 1093 + /** 1094 + * The stream ingestion description. 1095 + */ 1096 + stream_description?: string; 1097 + /** 1098 + * The stream ingestion key. 1099 + */ 1100 + stream_key: string; 1101 + /** 1102 + * The stream URL. 1103 + */ 1104 + stream_url: string; 1105 + /** 1106 + * The backup stream URL. 1107 + */ 1108 + backup_stream_url: string; 1109 + }; 1110 + }; 1111 + }; 1112 + }; 1113 + 1114 + export type SessionStreamIngestionUnbindWebhookRequest = { 1115 + body: SessionStreamIngestionUnbindWebhookPayload; 1116 + key: 'session.stream_ingestion_unbind'; 1117 + path?: never; 1118 + query?: never; 1119 + }; 1120 + 1121 + /** 1122 + * # session.live_streaming_started 1123 + * --- 1124 + * 1125 + * 1126 + * The Session Live Streaming Started event is triggered every time a user starts a live stream. 1127 + * 1128 + * ## Prerequisites 1129 + * Event Subscriptions must be enabled for your app with the following configurations: 1130 + * 1131 + * * A valid Event Notification Endpoint URL. 1132 + * * **Session Live Streaming Started** subscription enabled under the **Video SDK** event. 1133 + * 1134 + * The tabs below display the complete schema, payload with data types, and an example of the `session.live_streaming_started` event notification: 1135 + * 1136 + * 1137 + * 1138 + * **Event type**: `session.live_streaming_started` 1139 + * 1140 + */ 1141 + export type SessionLiveStreamingStartedWebhookPayload = { 1142 + /** 1143 + * Name of the event. 1144 + */ 1145 + event: 'session.live_streaming_started'; 1146 + /** 1147 + * Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format. 1148 + */ 1149 + event_ts: number; 1150 + payload: { 1151 + /** 1152 + * The Video SDK account ID. 1153 + */ 1154 + account_id: string; 1155 + /** 1156 + * Information about the session. 1157 + */ 1158 + object: { 1159 + /** 1160 + * The session ID. 1161 + * @deprecated 1162 + */ 1163 + id: string; 1164 + /** 1165 + * Unique session identifier. Each instance of the session will have its own session_id. 1166 + */ 1167 + session_id: string; 1168 + /** 1169 + * Session name. 1170 + */ 1171 + session_name: string; 1172 + /** 1173 + * The Video SDK custom session ID. 1174 + */ 1175 + session_key?: string; 1176 + /** 1177 + * The session's start time. 1178 + */ 1179 + start_time: string; 1180 + /** 1181 + * Information about the participant. 1182 + */ 1183 + live_streaming: { 1184 + /** 1185 + * The name of the Live Streaming service. 1186 + */ 1187 + service: 'Facebook' | 'Workplace_by_Facebook' | 'YouTube' | 'Custom_Live_Streaming_Service'; 1188 + /** 1189 + * The live stream settings. 1190 + */ 1191 + custom_live_streaming_settings: { 1192 + /** 1193 + * The stream's URL. 1194 + */ 1195 + stream_url: string; 1196 + /** 1197 + * The stream's key. 1198 + */ 1199 + stream_key: string; 1200 + /** 1201 + * The live stream's page URL. 1202 + */ 1203 + page_url: string; 1204 + /** 1205 + * The number of pixels in each dimension that the video camera can display. 1206 + */ 1207 + resolution?: string; 1208 + }; 1209 + /** 1210 + * The live stream's start time. 1211 + */ 1212 + date_time: string; 1213 + }; 1214 + }; 1215 + }; 1216 + }; 1217 + 1218 + export type SessionLiveStreamingStartedWebhookRequest = { 1219 + body: SessionLiveStreamingStartedWebhookPayload; 1220 + key: 'session.live_streaming_started'; 1221 + path?: never; 1222 + query?: never; 1223 + }; 1224 + 1225 + /** 1226 + * # session.user_room_system_callout_missed 1227 + * 1228 + * The **Invited party missed a session invitation through phone (call out) via Zoom room** event is triggered every time an invitation to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035) times out. 1229 + * 1230 + * ## Prerequisites 1231 + * 1232 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 1233 + * * A valid **Event Notification Endpoint URL**. 1234 + * * The **Invited party missed a session invitation through phone (call out) via Zoom room** subscription enabled under the **Session** event. 1235 + * 1236 + * 1237 + * 1238 + * **Event type**: `session.user_room_system_callout_missed` 1239 + * 1240 + */ 1241 + export type SessionUserRoomSystemCalloutMissedWebhookPayload = { 1242 + /** 1243 + * The name of the event. 1244 + */ 1245 + event: string; 1246 + /** 1247 + * A timestamp at which the event occurred. 1248 + */ 1249 + event_ts: number; 1250 + payload: { 1251 + /** 1252 + * The account ID of the session host. 1253 + */ 1254 + account_id: string; 1255 + /** 1256 + * Information about the session. 1257 + */ 1258 + object: { 1259 + /** 1260 + * The session ID. 1261 + * @deprecated 1262 + */ 1263 + id?: number; 1264 + /** 1265 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 1266 + * @deprecated 1267 + */ 1268 + uuid?: string; 1269 + /** 1270 + * Unique session identifier. Each instance of the session will have its own session_id. 1271 + */ 1272 + session_id: string; 1273 + /** 1274 + * Session name. 1275 + */ 1276 + session_name: string; 1277 + /** 1278 + * The user ID of the session host. 1279 + */ 1280 + host_id: string; 1281 + /** 1282 + * The request unique identifier (UUID). 1283 + */ 1284 + message_id: string; 1285 + /** 1286 + * The user name of the event's trigger. 1287 + */ 1288 + inviter_name: string; 1289 + /** 1290 + * Information about the invited participant. 1291 + */ 1292 + participant: { 1293 + /** 1294 + * The type of call out. Use a value of h323 or sip. 1295 + */ 1296 + call_type: string; 1297 + /** 1298 + * The user's device IP address. 1299 + */ 1300 + device_ip: string; 1301 + [key: string]: unknown | string; 1302 + }; 1303 + }; 1304 + }; 1305 + }; 1306 + 1307 + export type SessionUserRoomSystemCalloutMissedWebhookRequest = { 1308 + body: SessionUserRoomSystemCalloutMissedWebhookPayload; 1309 + key: 'session.user_room_system_callout_missed'; 1310 + path?: never; 1311 + query?: never; 1312 + }; 1313 + 1314 + /** 1315 + * # session.user_phone_callout_accepted 1316 + * 1317 + * The **Invited party answered a session invitation through phone (call out)** event is triggered every time a user accepts an invitation to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038). 1318 + * 1319 + * ## Prerequisites 1320 + * 1321 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 1322 + * * A valid **Event Notification Endpoint URL**. 1323 + * * The **Invited party answered a session invitation through phone (call out)** subscription enabled under the **Session** event. 1324 + * 1325 + * 1326 + * 1327 + * **Event type**: `session.user_phone_callout_accepted` 1328 + * 1329 + */ 1330 + export type SessionUserPhoneCalloutAcceptedWebhookPayload = { 1331 + /** 1332 + * The name of the event. 1333 + */ 1334 + event: string; 1335 + /** 1336 + * A timestamp at which the event occurred. 1337 + */ 1338 + event_ts: number; 1339 + payload: { 1340 + /** 1341 + * The account ID of the session host. 1342 + */ 1343 + account_id: string; 1344 + /** 1345 + * Information about the session. 1346 + */ 1347 + object: { 1348 + /** 1349 + * The session ID. 1350 + * @deprecated 1351 + */ 1352 + id?: number; 1353 + /** 1354 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 1355 + * @deprecated 1356 + */ 1357 + uuid?: string; 1358 + /** 1359 + * Unique session identifier. Each instance of the session will have its own session_id. 1360 + */ 1361 + session_id: string; 1362 + /** 1363 + * Session name. 1364 + */ 1365 + session_name: string; 1366 + /** 1367 + * The Video SDK custom session ID. 1368 + */ 1369 + session_key: string; 1370 + /** 1371 + * Another identifier for the inviter. Can be a number or characters. 1372 + */ 1373 + user_key: string; 1374 + /** 1375 + * The user ID of the session host. 1376 + */ 1377 + host_id: string; 1378 + /** 1379 + * Information about the invited participant. 1380 + */ 1381 + participant: { 1382 + /** 1383 + * The user's name to display in the session. 1384 + */ 1385 + invitee_name: string; 1386 + /** 1387 + * The user's phone number. 1388 + */ 1389 + phone_number: number; 1390 + /** 1391 + * The number used to call out to the invited user. 1392 + */ 1393 + from_number: number; 1394 + }; 1395 + }; 1396 + }; 1397 + }; 1398 + 1399 + export type SessionUserPhoneCalloutAcceptedWebhookRequest = { 1400 + body: SessionUserPhoneCalloutAcceptedWebhookPayload; 1401 + key: 'session.user_phone_callout_accepted'; 1402 + path?: never; 1403 + query?: never; 1404 + }; 1405 + 1406 + /** 1407 + * # session.user_left 1408 + * 1409 + * 1410 + * The Session User Left event is triggered every time a user (including host and co-host) leaves a session. 1411 + * 1412 + * ## Prerequisites 1413 + * Event Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations: 1414 + * 1415 + * * A valid Event Notification Endpoint URL. 1416 + * * Session User Left subscription enabled under the Video SDK event. 1417 + * 1418 + * 1419 + * 1420 + * **Event type**: `session.user_left` 1421 + * 1422 + */ 1423 + export type SessionUserLeftWebhookPayload = { 1424 + /** 1425 + * The event's name. 1426 + */ 1427 + event: 'session.user_left'; 1428 + /** 1429 + * A timestamp, in milliseconds since epoch, at which the event occurred. 1430 + */ 1431 + event_ts: number; 1432 + payload: { 1433 + /** 1434 + * The Video SDK account ID. 1435 + */ 1436 + account_id: string; 1437 + /** 1438 + * Information about the session. This object only returns updated properties. 1439 + */ 1440 + object: { 1441 + /** 1442 + * The session ID. 1443 + */ 1444 + id: string; 1445 + /** 1446 + * Unique session identifier. Each instance of the session will have its own session_id. 1447 + */ 1448 + session_id: string; 1449 + /** 1450 + * Session name. 1451 + */ 1452 + session_name: string; 1453 + /** 1454 + * The Video SDK custom session ID. 1455 + */ 1456 + session_key?: string; 1457 + /** 1458 + * Information about the user. 1459 + */ 1460 + user: { 1461 + /** 1462 + * The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session. 1463 + */ 1464 + id: string; 1465 + /** 1466 + * The user's username. 1467 + */ 1468 + name: string; 1469 + /** 1470 + * The time at which the user left the session. 1471 + */ 1472 + leave_time: string; 1473 + /** 1474 + * The reason why the user left the session, where $name is the participant's username: 1475 + * * $name left the session. 1476 + * * $name got disconnected from the session. 1477 + * * Host ended the session. 1478 + * * Host closed the session. 1479 + * * Host started a new session. 1480 + * * Network connection error. 1481 + * * Host did not join. 1482 + * * Exceeded free session minutes limit. 1483 + * * Removed by host. 1484 + * * Unknown reason. 1485 + * * Leave waiting room. 1486 + * * Removed by host from waiting room. 1487 + */ 1488 + leave_reason?: string; 1489 + /** 1490 + * Another identifier for the user. Can be a number or characters. 1491 + */ 1492 + user_key?: string; 1493 + /** 1494 + * Phone number of participant joined via PSTN. 1495 + */ 1496 + phone_number?: string; 1497 + /** 1498 + * The participant's UUID. This value is assigned to a participant upon joining a session and is only valid for the session's duration. 1499 + */ 1500 + participant_uuid: string; 1501 + }; 1502 + }; 1503 + }; 1504 + }; 1505 + 1506 + export type SessionUserLeftWebhookRequest = { 1507 + body: SessionUserLeftWebhookPayload; 1508 + key: 'session.user_left'; 1509 + path?: never; 1510 + query?: never; 1511 + }; 1512 + 1513 + /** 1514 + * # session.sharing_started 1515 + * 1516 + * 1517 + * The Session Sharing Started event is triggered every time a user starts sharing the screen during a session. 1518 + * 1519 + * ## Prerequisites 1520 + * Event Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations: 1521 + * 1522 + * * A valid Event Notification Endpoint URL. 1523 + * * **Session Sharing Started** subscription enabled under the **Video SDK** event. 1524 + * 1525 + * The tabs below display the complete schema, payload with data types, and an example of the `session.sharing_started` event notification: 1526 + * 1527 + * 1528 + * 1529 + * **Event type**: `session.sharing_started` 1530 + * 1531 + */ 1532 + export type SessionSharingStartedWebhookPayload = { 1533 + /** 1534 + * The event's name. 1535 + */ 1536 + event: 'session.sharing_started'; 1537 + /** 1538 + * A timestamp, in milliseconds since epoch, at which the event occurred. 1539 + */ 1540 + event_ts: number; 1541 + payload: { 1542 + /** 1543 + * The Video SDK account ID. 1544 + */ 1545 + account_id: string; 1546 + /** 1547 + * Information about the session. This object only returns updated properties. 1548 + */ 1549 + object: { 1550 + /** 1551 + * The session ID. 1552 + */ 1553 + id: string; 1554 + /** 1555 + * Unique session identifier. Each instance of the session will have its own session_id. 1556 + */ 1557 + session_id: string; 1558 + /** 1559 + * Session name. 1560 + */ 1561 + session_name: string; 1562 + /** 1563 + * The Video SDK custom session ID. 1564 + */ 1565 + session_key?: string; 1566 + /** 1567 + * Information about the user. 1568 + */ 1569 + user: { 1570 + /** 1571 + * The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session. 1572 + */ 1573 + id: string; 1574 + /** 1575 + * The user's username. 1576 + */ 1577 + name: string; 1578 + /** 1579 + * Another identifier for the user. Can be a number or characters. 1580 + */ 1581 + user_key?: string; 1582 + /** 1583 + * Information about the session's screen sharing. 1584 + */ 1585 + sharing_details: { 1586 + /** 1587 + * The type of shared content: 1588 + * * application — An application. For example, a web browser. 1589 + * * whiteboard — The Zoom [whiteboard](https://support.zoom.us/hc/en-us/articles/205677665-Sharing-a-whiteboard). 1590 + * * desktop — A user's desktop. 1591 + * * unknown — An unrecognized application, such as a third party app. 1592 + */ 1593 + content: 'application' | 'whiteboard' | 'desktop' | 'unknown'; 1594 + /** 1595 + * The session's screen sharing date and time. 1596 + */ 1597 + date_time: string; 1598 + }; 1599 + }; 1600 + }; 1601 + }; 1602 + }; 1603 + 1604 + export type SessionSharingStartedWebhookRequest = { 1605 + body: SessionSharingStartedWebhookPayload; 1606 + key: 'session.sharing_started'; 1607 + path?: never; 1608 + query?: never; 1609 + }; 1610 + 1611 + /** 1612 + * # session.user_phone_callout_canceled 1613 + * The **Invited party's phone (call out) canceled** event is triggered every time the inviter cancels the call out when they were invited to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038). 1614 + * 1615 + * ## Prerequisites 1616 + * 1617 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 1618 + * * A valid **Event Notification Endpoint URL**. 1619 + * * The **Invited party's phone (call out) canceled** subscription enabled under the **Session** event. 1620 + * 1621 + * 1622 + * **Event type**: `session.user_phone_callout_canceled` 1623 + * 1624 + */ 1625 + export type SessionUserPhoneCalloutCanceledWebhookPayload = { 1626 + /** 1627 + * The name of the event. 1628 + */ 1629 + event: string; 1630 + /** 1631 + * A timestamp at which the event occurred. 1632 + */ 1633 + event_ts: number; 1634 + payload: { 1635 + /** 1636 + * The account ID of the session host. 1637 + */ 1638 + account_id: string; 1639 + /** 1640 + * Information about the session. 1641 + */ 1642 + object: { 1643 + /** 1644 + * Unique session identifier. Each instance of the session will have its own session_id. 1645 + */ 1646 + session_id: string; 1647 + /** 1648 + * Session name. 1649 + */ 1650 + session_name: string; 1651 + /** 1652 + * The Video SDK custom session ID. 1653 + */ 1654 + session_key: string; 1655 + /** 1656 + * Another identifier for the inviter. Can be a number or characters. 1657 + */ 1658 + user_key: string; 1659 + /** 1660 + * Information about the invited participant. 1661 + */ 1662 + participant: { 1663 + /** 1664 + * The user's name to display in the session. 1665 + */ 1666 + invitee_name: string; 1667 + /** 1668 + * The user's phone number. 1669 + */ 1670 + phone_number: number; 1671 + /** 1672 + * The number used to call out to the invited user. 1673 + */ 1674 + from_number: number; 1675 + }; 1676 + }; 1677 + }; 1678 + }; 1679 + 1680 + export type SessionUserPhoneCalloutCanceledWebhookRequest = { 1681 + body: SessionUserPhoneCalloutCanceledWebhookPayload; 1682 + key: 'session.user_phone_callout_canceled'; 1683 + path?: never; 1684 + query?: never; 1685 + }; 1686 + 1687 + /** 1688 + * # session.recording_transcript_completed 1689 + * --- 1690 + * 1691 + * Event: `session.recording_transcript_completed` 1692 + * 1693 + * ## Event description 1694 + * 1695 + * The **Session recording transcript completed** event is triggered every time the transcript of the recording of a session becomes available to view or download. 1696 + * 1697 + * Only a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. 1698 + * 1699 + * ## Prerequisites 1700 + * 1701 + * * Cloud Recording must be enabled on the Video SDK account. 1702 + * * Event Subscriptions must be enabled for your app with the following configurations: 1703 + * * A valid Event Notification Endpoint URL. 1704 + * * Session recording transcript completed subscription enabled under the Recording event. 1705 + * 1706 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_transcript_completed` event notification: 1707 + * 1708 + * 1709 + * 1710 + * **Event type**: `session.recording_transcript_completed` 1711 + * 1712 + */ 1713 + export type SessionRecordingTranscriptCompletedWebhookPayload = { 1714 + /** 1715 + * The event's name. 1716 + */ 1717 + event: 'session.recording_transcript_completed'; 1718 + /** 1719 + * A timestamp, in milliseconds since epoch, at which the event occurred. 1720 + */ 1721 + event_ts: number; 1722 + /** 1723 + * A generated token used to download the recording. The download token only lasts for 24 hours after its creation and you can only download the file within 24 hours of receiving the event notification. You can either pass the download_token as a Bearer token in the Authorization header of your HTTP request (recommended) or include it as a query parameter. See the following for examples. 1724 + * 1725 + * **Using an Authorization header (Recommended)** 1726 + * 1727 + * 1728 + * curl --request GET \ 1729 + * --url {download_url} \ 1730 + * --header 'authorization: Bearer {download_token} \ 1731 + * --header 'content-type: application/json' 1732 + * 1733 + * 1734 + * **Using a query parameter** 1735 + * 1736 + * 1737 + * {download_url}/?access_token={download_token} 1738 + * 1739 + * 1740 + * For example: https://zoom.us/recording/download/123456?access_token=abcdefgh 1741 + */ 1742 + download_token: string; 1743 + payload: { 1744 + /** 1745 + * The Video SDK account ID. 1746 + */ 1747 + account_id: string; 1748 + /** 1749 + * Information about the session. This object only returns updated properties. 1750 + */ 1751 + object: { 1752 + /** 1753 + * Unique session identifier. Each instance of the session will have its own session_id. 1754 + */ 1755 + session_id: string; 1756 + /** 1757 + * Session name. 1758 + */ 1759 + session_name: string; 1760 + /** 1761 + * The Video SDK custom session ID. 1762 + */ 1763 + session_key: string; 1764 + /** 1765 + * The time at which the session started. 1766 + */ 1767 + start_time: string; 1768 + /** 1769 + * The user's timezone. 1770 + */ 1771 + timezone: string; 1772 + /** 1773 + * Recording file List 1774 + * List of recording file. 1775 + */ 1776 + recording_files: Array<{ 1777 + /** 1778 + * The recording file ID. Included in the response of general query. 1779 + */ 1780 + id?: string; 1781 + /** 1782 + * The recording start time. 1783 + */ 1784 + recording_start?: string; 1785 + /** 1786 + * The recording end time. Response in general query. 1787 + */ 1788 + recording_end?: string; 1789 + /** 1790 + * Name of the file. 1791 + */ 1792 + file_name?: string; 1793 + /** 1794 + * The file path to the On-Premise account recording. 1795 + * 1796 + * **Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field. 1797 + */ 1798 + file_path?: string; 1799 + /** 1800 + * The recording file type. The value of this field could be one of the following:<br> 1801 + * MP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the "Add a timestamp to the recording" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile. 1802 + * <br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format. 1803 + * 1804 + * <br> 1805 + * 1806 + * A recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br> 1807 + * id, status, file_size, recording_type. 1808 + */ 1809 + file_type?: 'MP4' | 'M4A' | 'CHAT' | 'TRANSCRIPT' | 'CSV' | 'CC' | 'TB' | 'CHAT_MESSAGE' | 'TIMELINE'; 1810 + /** 1811 + * The recording file size. 1812 + */ 1813 + file_size?: number; 1814 + /** 1815 + * The archived file's file extension. 1816 + */ 1817 + file_extension?: 'MP4' | 'M4A' | 'TXT' | 'VTT' | 'CSV' | 'JSON' | 'JPG'; 1818 + /** 1819 + * The URL at which to download the the recording. 1820 + * 1821 + * To access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). You can either pass the generated JWT as a Bearer token in the Authorization header of your HTTP request (recommended) or include it as a query parameter at the end of the URL. See the following for examples. 1822 + * 1823 + * **Using an Authorization header (Recommended)** 1824 + * 1825 + * 1826 + * curl --request GET \ 1827 + * --url {download_url} \ 1828 + * --header 'authorization: Bearer {JWT} \ 1829 + * --header 'content-type: application/json' 1830 + * 1831 + * 1832 + * **Using a query parameter** 1833 + * 1834 + * 1835 + * {download_url}/?access_token={download_token} 1836 + * 1837 + * 1838 + * For example: https://{base-domain}/recording/download/{path-to-file-download}?access_token={JWT}. 1839 + */ 1840 + download_url?: string; 1841 + /** 1842 + * The recording status. 1843 + */ 1844 + status?: 'completed'; 1845 + /** 1846 + * The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption 1847 + */ 1848 + recording_type?: 'shared_screen_with_speaker_view(CC)' | 'shared_screen_with_speaker_view' | 'shared_screen_with_gallery_view' | 'gallery_view' | 'shared_screen' | 'audio_only' | 'audio_transcript' | 'chat_file' | 'active_speaker' | 'host_video' | 'audio_only_each_participant' | 'cc_transcript' | 'closed_caption' | 'poll' | 'timeline' | 'thumbnail' | 'chat_message'; 1849 + }>; 1850 + }; 1851 + }; 1852 + }; 1853 + 1854 + export type SessionRecordingTranscriptCompletedWebhookRequest = { 1855 + body: SessionRecordingTranscriptCompletedWebhookPayload; 1856 + key: 'session.recording_transcript_completed'; 1857 + path?: never; 1858 + query?: never; 1859 + }; 1860 + 1861 + /** 1862 + * # session.recording_deleted 1863 + * --- 1864 + * 1865 + * Event: `session.recording_deleted` 1866 + * 1867 + * ## Event description 1868 + * 1869 + * The **Session recording permanently deleted** event is triggered every time one of your app users or account users permanently deletes a cloud recording. 1870 + * 1871 + * When a user initially deletes a recording, it is sent to the trash. At this stage, the recording can still be recovered for up to 30 days after deletion. To permanently delete a recording, users must delete it from the trash. Users can permanently delete a recording using: 1872 + * 1873 + * * The [Delete session's recording API](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingDelete) **with the delete query parameter** or 1874 + * * The Zoom web portal. See [Video SDK account](https://developers.zoom.us/docs/video-sdk/account/) for details. 1875 + * 1876 + * ## Prerequisites 1877 + * 1878 + * * Cloud Recording must be enabled on the Video SDK account. 1879 + * * Event Subscriptions must be enabled for your app with the following configurations: 1880 + * * A valid Event Notification Endpoint URL. 1881 + * * "**Session recording permanently deleted**" subscription enabled under the **Recording** event. 1882 + * 1883 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_deleted` event notification: 1884 + * 1885 + * 1886 + * 1887 + * **Event type**: `session.recording_deleted` 1888 + * 1889 + */ 1890 + export type SessionRecordingDeletedWebhookPayload = { 1891 + /** 1892 + * The event's name. 1893 + */ 1894 + event: 'session.recording_deleted'; 1895 + /** 1896 + * A timestamp, in milliseconds since epoch, at which the event occurred. 1897 + */ 1898 + event_ts: number; 1899 + payload: { 1900 + /** 1901 + * The Video SDK account ID. 1902 + */ 1903 + account_id: string; 1904 + /** 1905 + * The email address of the user who deleted the recording. 1906 + */ 1907 + operator: string; 1908 + /** 1909 + * The user ID of the user who deleted the recording. 1910 + */ 1911 + operator_id: string; 1912 + /** 1913 + * Information about the session. This object only returns updated properties. 1914 + */ 1915 + object: { 1916 + /** 1917 + * Unique session identifier. Each instance of the session will have its own session_id. 1918 + */ 1919 + session_id: string; 1920 + /** 1921 + * Session name. 1922 + */ 1923 + session_name: string; 1924 + /** 1925 + * The Video SDK custom session ID. 1926 + */ 1927 + session_key: string; 1928 + /** 1929 + * The time at which the session started. 1930 + */ 1931 + start_time: string; 1932 + /** 1933 + * The user's timezone. 1934 + */ 1935 + timezone: string; 1936 + }; 1937 + }; 1938 + }; 1939 + 1940 + export type SessionRecordingDeletedWebhookRequest = { 1941 + body: SessionRecordingDeletedWebhookPayload; 1942 + key: 'session.recording_deleted'; 1943 + path?: never; 1944 + query?: never; 1945 + }; 1946 + 1947 + /** 1948 + * # session.user_room_system_callout_failed 1949 + * 1950 + * The **Session invitation through phone (call out) via Zoom room failed** event is triggered every time an invitation to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035) fails. 1951 + * 1952 + * ## Prerequisites 1953 + * 1954 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 1955 + * * A valid **Event Notification Endpoint URL**. 1956 + * * The **Session invitation through phone (call out) via Zoom room failed** subscription enabled under the **Session** event. 1957 + * 1958 + * 1959 + * 1960 + * **Event type**: `session.user_room_system_callout_failed` 1961 + * 1962 + */ 1963 + export type SessionUserRoomSystemCalloutFailedWebhookPayload = { 1964 + /** 1965 + * The name of the event. 1966 + */ 1967 + event: string; 1968 + /** 1969 + * A timestamp at which the event occurred. 1970 + */ 1971 + event_ts: number; 1972 + payload: { 1973 + /** 1974 + * The account ID of the session host. 1975 + */ 1976 + account_id: string; 1977 + /** 1978 + * Information about the session. 1979 + */ 1980 + object: { 1981 + /** 1982 + * The session ID. 1983 + * @deprecated 1984 + */ 1985 + id?: number; 1986 + /** 1987 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 1988 + * @deprecated 1989 + */ 1990 + uuid?: string; 1991 + /** 1992 + * Unique session identifier. Each instance of the session will have its own session_id. 1993 + */ 1994 + session_id: string; 1995 + /** 1996 + * Session name. 1997 + */ 1998 + session_name: string; 1999 + /** 2000 + * The user ID of the session host. 2001 + */ 2002 + host_id: string; 2003 + /** 2004 + * The request unique identifier (UUID). 2005 + */ 2006 + message_id: string; 2007 + /** 2008 + * The user name of the event's trigger. 2009 + */ 2010 + inviter_name: string; 2011 + /** 2012 + * reason type for failure: 2013 + * * 1 — Encryption_Fail. 2014 + * * 2 — Disconnected_By_Remote. 2015 + * * 3 — Retry. 2016 + * * 4 — Bad_Seq. 2017 + * * 5 — Call_Limit. 2018 + * * 6 — Not_Registered. 2019 + * * 7 — Timeout. 2020 + * * 8 — Bad_Addr. 2021 + * * 9 — Unreachable 2022 + * * 10 — Disconnect_By_Local 2023 + * * 11 — Server_Internal_Error 2024 + * * 12 — Exceed_Free_Port 2025 + * * 13 — Connect_Error 2026 + * * 14 — Proxy_Connect_Error 2027 + * * 0 — Other_Failed_Reason. 2028 + */ 2029 + reason_type: 0 | 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14; 2030 + /** 2031 + * Information about the invited participant. 2032 + */ 2033 + participant: { 2034 + /** 2035 + * The type of call out. Use a value of h323 or sip. 2036 + */ 2037 + call_type: string; 2038 + /** 2039 + * The user's device IP address. 2040 + */ 2041 + device_ip: string; 2042 + [key: string]: unknown | string; 2043 + }; 2044 + }; 2045 + }; 2046 + }; 2047 + 2048 + export type SessionUserRoomSystemCalloutFailedWebhookRequest = { 2049 + body: SessionUserRoomSystemCalloutFailedWebhookPayload; 2050 + key: 'session.user_room_system_callout_failed'; 2051 + path?: never; 2052 + query?: never; 2053 + }; 2054 + 2055 + /** 2056 + * # session.recording_completed 2057 + * --- 2058 + * 2059 + * Event: `session.recording_completed` 2060 + * 2061 + * ## Event description 2062 + * 2063 + * The **Session recording completed** event is triggered every time a recording of a session becomes available to view and/or download. 2064 + * 2065 + * Only a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. 2066 + * 2067 + * ## Prerequisites 2068 + * 2069 + * * Cloud Recording must be enabled on the Video SDK account. 2070 + * * Event Subscriptions must be enabled for your app with the following configurations: 2071 + * * A valid Event Notification Endpoint URL. 2072 + * * Session recording completed subscription enabled under the Recording event. 2073 + * 2074 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_completed` event notification: 2075 + * 2076 + * 2077 + * 2078 + * **Event type**: `session.recording_completed` 2079 + * 2080 + */ 2081 + export type SessionRecordingCompletedWebhookPayload = { 2082 + /** 2083 + * The event's name. 2084 + */ 2085 + event: 'session.recording_completed'; 2086 + /** 2087 + * A timestamp, in milliseconds since epoch, at which the event occurred. 2088 + */ 2089 + event_ts: number; 2090 + /** 2091 + * A generated token used to download the recording. The download token only lasts for 24 hours after its creation and you can only download the file within 24 hours of receiving the event notification. Pass the download_token as a Bearer token in the Authorization header of your HTTP request. For example: 2092 + * 2093 + * 2094 + * curl --request GET \ 2095 + * --url {download_url} \ 2096 + * --header 'authorization: Bearer {download_token} \ 2097 + * --header 'content-type: application/json' 2098 + * 2099 + */ 2100 + download_token: string; 2101 + payload: { 2102 + /** 2103 + * The Video SDK account ID. 2104 + */ 2105 + account_id: string; 2106 + /** 2107 + * Information about the session. This object only returns updated properties. 2108 + */ 2109 + object: { 2110 + /** 2111 + * Unique session identifier. Each instance of the session will have its own session_id. 2112 + */ 2113 + session_id: string; 2114 + /** 2115 + * Session name. 2116 + */ 2117 + session_name: string; 2118 + /** 2119 + * The Video SDK custom session ID. 2120 + */ 2121 + session_key: string; 2122 + /** 2123 + * The time at which the session started. 2124 + */ 2125 + start_time: string; 2126 + /** 2127 + * The user's timezone. 2128 + */ 2129 + timezone: string; 2130 + /** 2131 + * Recording file List 2132 + * List of recording file. 2133 + */ 2134 + recording_files: Array<{ 2135 + /** 2136 + * The recording file ID. Included in the response of general query. 2137 + */ 2138 + id?: string; 2139 + /** 2140 + * The recording start time. 2141 + */ 2142 + recording_start?: string; 2143 + /** 2144 + * The recording end time. Response in general query. 2145 + */ 2146 + recording_end?: string; 2147 + /** 2148 + * Name of the file. 2149 + */ 2150 + file_name?: string; 2151 + /** 2152 + * The file path to the On-Premise account recording. 2153 + * 2154 + * **Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field. 2155 + */ 2156 + file_path?: string; 2157 + /** 2158 + * The recording file type. The value of this field could be one of the following:<br> 2159 + * MP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the "Add a timestamp to the recording" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile. 2160 + * <br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format. 2161 + * 2162 + * <br> 2163 + * 2164 + * A recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br> 2165 + * id, status, file_size, recording_type. 2166 + */ 2167 + file_type?: 'MP4' | 'M4A' | 'CHAT' | 'TRANSCRIPT' | 'CSV' | 'CC' | 'TB' | 'CHAT_MESSAGE'; 2168 + /** 2169 + * The recording file size. 2170 + */ 2171 + file_size?: number; 2172 + /** 2173 + * The archived file's file extension. 2174 + */ 2175 + file_extension?: 'MP4' | 'M4A' | 'TXT' | 'VTT' | 'CSV' | 'JSON' | 'JPG'; 2176 + /** 2177 + * The URL at which to download the the recording. 2178 + * 2179 + * To access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: 2180 + * 2181 + * 2182 + * curl --request GET \ 2183 + * --url {download_url} \ 2184 + * --header 'authorization: Bearer {JWT} \ 2185 + * --header 'content-type: application/json' 2186 + * 2187 + */ 2188 + download_url?: string; 2189 + /** 2190 + * The recording status. 2191 + */ 2192 + status?: 'completed'; 2193 + /** 2194 + * The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption 2195 + */ 2196 + recording_type?: 'shared_screen_with_speaker_view(CC)' | 'shared_screen_with_speaker_view' | 'shared_screen_with_gallery_view' | 'gallery_view' | 'shared_screen' | 'audio_only' | 'audio_transcript' | 'chat_file' | 'active_speaker' | 'host_video' | 'audio_only_each_participant' | 'cc_transcript' | 'closed_caption' | 'poll' | 'timeline' | 'thumbnail' | 'chat_message'; 2197 + }>; 2198 + /** 2199 + * Recording file List 2200 + * List of recording file. 2201 + */ 2202 + participant_audio_files?: Array<{ 2203 + /** 2204 + * The recording file ID. Included in the response of general query. 2205 + */ 2206 + id?: string; 2207 + /** 2208 + * The recording start time. 2209 + */ 2210 + recording_start?: string; 2211 + /** 2212 + * The recording end time. Response in general query. 2213 + */ 2214 + recording_end?: string; 2215 + /** 2216 + * Name of the file. 2217 + */ 2218 + file_name?: string; 2219 + /** 2220 + * The file path to the On-Premise account recording. 2221 + * 2222 + * **Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field. 2223 + */ 2224 + file_path?: string; 2225 + /** 2226 + * The recording file type. The value of this field could be one of the following:<br> 2227 + * MP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the "Add a timestamp to the recording" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile. 2228 + * <br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format. 2229 + * 2230 + * <br> 2231 + * 2232 + * A recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br> 2233 + * id, status, file_size, recording_type. 2234 + */ 2235 + file_type?: 'MP4' | 'M4A' | 'CHAT' | 'TRANSCRIPT' | 'CSV' | 'CC' | 'TB' | 'CHAT_MESSAGE'; 2236 + /** 2237 + * The recording file size. 2238 + */ 2239 + file_size?: number; 2240 + /** 2241 + * The archived file's file extension. 2242 + */ 2243 + file_extension?: 'MP4' | 'M4A' | 'TXT' | 'VTT' | 'CSV' | 'JSON' | 'JPG'; 2244 + /** 2245 + * The URL at which to download the the recording. 2246 + * 2247 + * To access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: 2248 + * 2249 + * 2250 + * curl --request GET \ 2251 + * --url {download_url} \ 2252 + * --header 'authorization: Bearer {JWT} \ 2253 + * --header 'content-type: application/json' 2254 + * 2255 + */ 2256 + download_url?: string; 2257 + /** 2258 + * The recording status. 2259 + */ 2260 + status?: 'completed'; 2261 + /** 2262 + * The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption 2263 + */ 2264 + recording_type?: 'shared_screen_with_speaker_view(CC)' | 'shared_screen_with_speaker_view' | 'shared_screen_with_gallery_view' | 'gallery_view' | 'shared_screen' | 'audio_only' | 'audio_transcript' | 'chat_file' | 'active_speaker' | 'host_video' | 'audio_only_each_participant' | 'cc_transcript' | 'closed_caption' | 'poll' | 'timeline' | 'thumbnail' | 'chat_message'; 2265 + /** 2266 + * The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session. 2267 + */ 2268 + user_id?: string; 2269 + /** 2270 + * The participant's SDK identifier. Set with the user_identity key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 35 characters. 2271 + */ 2272 + user_key?: string; 2273 + }>; 2274 + /** 2275 + * Recording file List 2276 + * List of recording file. 2277 + */ 2278 + participant_video_files?: Array<{ 2279 + /** 2280 + * The recording file ID. Included in the response of general query. 2281 + */ 2282 + id?: string; 2283 + /** 2284 + * The recording start time. 2285 + */ 2286 + recording_start?: string; 2287 + /** 2288 + * The recording end time. Response in general query. 2289 + */ 2290 + recording_end?: string; 2291 + /** 2292 + * Name of the file. 2293 + */ 2294 + file_name?: string; 2295 + /** 2296 + * The file path to the On-Premise account recording. 2297 + * 2298 + * **Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field. 2299 + */ 2300 + file_path?: string; 2301 + /** 2302 + * The recording file type. The value of this field could be one of the following:<br> 2303 + * MP4: Video file of the recording. 2304 + */ 2305 + file_type?: 'MP4'; 2306 + /** 2307 + * The recording file size. 2308 + */ 2309 + file_size?: number; 2310 + /** 2311 + * The archived file's file extension. 2312 + */ 2313 + file_extension?: 'MP4'; 2314 + /** 2315 + * The URL at which to download the the recording. 2316 + * 2317 + * To access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: 2318 + * 2319 + * 2320 + * curl --request GET \ 2321 + * --url {download_url} \ 2322 + * --header 'authorization: Bearer {JWT} \ 2323 + * --header 'content-type: application/json' 2324 + * 2325 + */ 2326 + download_url?: string; 2327 + /** 2328 + * The recording status. 2329 + */ 2330 + status?: 'completed'; 2331 + /** 2332 + * The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption 2333 + */ 2334 + recording_type?: 'individual_user' | 'individual_shared_screen'; 2335 + /** 2336 + * The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session. 2337 + */ 2338 + user_id?: string; 2339 + /** 2340 + * The participant's SDK identifier. Set with the user_identity key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 35 characters. 2341 + */ 2342 + user_key?: string; 2343 + }>; 2344 + }; 2345 + }; 2346 + }; 2347 + 2348 + export type SessionRecordingCompletedWebhookRequest = { 2349 + body: SessionRecordingCompletedWebhookPayload; 2350 + key: 'session.recording_completed'; 2351 + path?: never; 2352 + query?: never; 2353 + }; 2354 + 2355 + /** 2356 + * # session.recording_transcript_failed 2357 + * --- 2358 + * 2359 + * Event: `session.recording_transcript_failed` 2360 + * 2361 + * ## Event description 2362 + * 2363 + * The **Session recording transcript failed** event is triggered every time the transcript of the recording of a session generated failed. 2364 + * 2365 + * Only a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. 2366 + * 2367 + * ## Prerequisites 2368 + * 2369 + * * Enable Cloud Recording on the Video SDK account. 2370 + * * Enable Event Subscriptions for your app with the following configurations: 2371 + * * A valid Event Notification Endpoint URL. 2372 + * * Enable session recording transcript completed subscription under the Recording event. 2373 + * 2374 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_transcript_completed` event notification: 2375 + * 2376 + * 2377 + * 2378 + * **Event type**: `session.recording_transcript_failed` 2379 + * 2380 + */ 2381 + export type SessionRecordingTranscriptFailedWebhookPayload = { 2382 + /** 2383 + * The event's name. 2384 + */ 2385 + event: 'session.recording_transcript_failed'; 2386 + /** 2387 + * A timestamp, in milliseconds since epoch, when the event occurred. 2388 + */ 2389 + event_ts: number; 2390 + payload: { 2391 + /** 2392 + * The Video SDK account ID. 2393 + */ 2394 + account_id: string; 2395 + /** 2396 + * Information about the session. This object only returns updated properties. 2397 + */ 2398 + object: { 2399 + /** 2400 + * Unique session identifier. Each instance of the session will have its own session_id. 2401 + */ 2402 + session_id: string; 2403 + /** 2404 + * Session name. 2405 + */ 2406 + session_name: string; 2407 + /** 2408 + * The Video SDK custom session ID. 2409 + */ 2410 + session_key: string; 2411 + /** 2412 + * The time when the session started. 2413 + */ 2414 + start_time: string; 2415 + /** 2416 + * The user's timezone. 2417 + */ 2418 + timezone: string; 2419 + }; 2420 + }; 2421 + }; 2422 + 2423 + export type SessionRecordingTranscriptFailedWebhookRequest = { 2424 + body: SessionRecordingTranscriptFailedWebhookPayload; 2425 + key: 'session.recording_transcript_failed'; 2426 + path?: never; 2427 + query?: never; 2428 + }; 2429 + 2430 + /** 2431 + * # session.recording_trashed 2432 + * --- 2433 + * 2434 + * Event: `session.recording_trashed` 2435 + * 2436 + * ## Event description 2437 + * 2438 + * The **Session recording deleted to trash** event is triggered every time one of your app users or account users temporarily delete a cloud recording. 2439 + * 2440 + * When a user initially deletes a recording, it is deleted to the trash. Recordings deleted to the trash can be recovered up to 30 days after deletion. Users can move a recording to the trash using: 2441 + * 2442 + * * The [Delete session's recording](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingDelete) API **with the trash query parameter** or 2443 + * * The Zoom web portal. See [Video SDK account](https://developers.zoom.us/docs/video-sdk/account/) for details. 2444 + * 2445 + * ## Prerequisites 2446 + * 2447 + * * Cloud Recording must be enabled on the Video SDK account. 2448 + * * Event Subscriptions must be enabled for your app with the following configurations: 2449 + * * A valid Event Notification Endpoint URL. 2450 + * * **Session recording deleted to trash** subscription enabled under the **Recording** event. 2451 + * 2452 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_trashed` event notification: 2453 + * 2454 + * 2455 + * 2456 + * **Event type**: `session.recording_trashed` 2457 + * 2458 + */ 2459 + export type SessionRecordingTrashedWebhookPayload = { 2460 + /** 2461 + * The event's name. 2462 + */ 2463 + event: 'session.recording_trashed'; 2464 + /** 2465 + * A timestamp, in milliseconds since epoch, at which the event occurred. 2466 + */ 2467 + event_ts: number; 2468 + payload: { 2469 + /** 2470 + * The Video SDK account ID. 2471 + */ 2472 + account_id: string; 2473 + /** 2474 + * The email address of the user who deleted the recording. 2475 + */ 2476 + operator: string; 2477 + /** 2478 + * The user ID of the user who deleted the recording. 2479 + */ 2480 + operator_id: string; 2481 + /** 2482 + * Information about the session. This object only returns updated properties. 2483 + */ 2484 + object: { 2485 + /** 2486 + * Unique session identifier. Each instance of the session will have its own session_id. 2487 + */ 2488 + session_id: string; 2489 + /** 2490 + * Session name. 2491 + */ 2492 + session_name: string; 2493 + /** 2494 + * The Video SDK custom session ID. 2495 + */ 2496 + session_key: string; 2497 + /** 2498 + * The time at which the session started. 2499 + */ 2500 + start_time: string; 2501 + /** 2502 + * The user's timezone. 2503 + */ 2504 + timezone: string; 2505 + }; 2506 + }; 2507 + }; 2508 + 2509 + export type SessionRecordingTrashedWebhookRequest = { 2510 + body: SessionRecordingTrashedWebhookPayload; 2511 + key: 'session.recording_trashed'; 2512 + path?: never; 2513 + query?: never; 2514 + }; 2515 + 2516 + /** 2517 + * # session.user_joined 2518 + * --- 2519 + * 2520 + * 2521 + * The Session User Joined event is triggered every time a user (including host and co-host) joins a session. 2522 + * 2523 + * ## Prerequisites 2524 + * Event Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations: 2525 + * 2526 + * * A valid Event Notification Endpoint URL. 2527 + * * Session User Joined subscription enabled under the Video SDK event. 2528 + * 2529 + * The tabs below display the complete schema, payload with data types, and an example of the `session.user_joined` event notification: 2530 + * 2531 + * 2532 + * 2533 + * **Event type**: `session.user_joined` 2534 + * 2535 + */ 2536 + export type SessionUserJoinedWebhookPayload = { 2537 + /** 2538 + * The event's name. 2539 + */ 2540 + event: 'session.user_joined'; 2541 + /** 2542 + * A timestamp, in milliseconds since epoch, at which the event occurred. 2543 + */ 2544 + event_ts: number; 2545 + payload: { 2546 + /** 2547 + * The Video SDK account ID. 2548 + */ 2549 + account_id: string; 2550 + /** 2551 + * Information about the session. This object only returns updated properties. 2552 + */ 2553 + object: { 2554 + /** 2555 + * The session ID. 2556 + */ 2557 + id: string; 2558 + /** 2559 + * Unique session identifier. Each instance of the session will have its own session_id. 2560 + */ 2561 + session_id: string; 2562 + /** 2563 + * Session name. 2564 + */ 2565 + session_name: string; 2566 + /** 2567 + * The Video SDK custom session ID. 2568 + */ 2569 + session_key?: string; 2570 + /** 2571 + * Information about the user. 2572 + */ 2573 + user: { 2574 + /** 2575 + * The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session. 2576 + */ 2577 + id: string; 2578 + /** 2579 + * The user's username. 2580 + */ 2581 + name: string; 2582 + /** 2583 + * The time at which the user joined the session. 2584 + */ 2585 + join_time: string; 2586 + /** 2587 + * Another identifier for the user. Can be a number or characters. 2588 + */ 2589 + user_key?: string; 2590 + /** 2591 + * Phone number of participant joined via PSTN. 2592 + */ 2593 + phone_number?: string; 2594 + /** 2595 + * The participant's UUID. This value is assigned to a participant upon joining a session and is only valid for the session's duration. 2596 + */ 2597 + participant_uuid: string; 2598 + }; 2599 + }; 2600 + }; 2601 + }; 2602 + 2603 + export type SessionUserJoinedWebhookRequest = { 2604 + body: SessionUserJoinedWebhookPayload; 2605 + key: 'session.user_joined'; 2606 + path?: never; 2607 + query?: never; 2608 + }; 2609 + 2610 + /** 2611 + * # session.stream_ingestion_started 2612 + * Zoom triggers the **Session stream ingestion started** event every time a host starts sending an incoming live stream to a session. The session user can subscribe to it to see what's being streamed live into this session. 2613 + * 2614 + * ## Prerequisites 2615 + * 2616 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 2617 + * * A valid **Event Notification Endpoint URL**. 2618 + * * The **Session stream ingestion started** subscription enabled under the **Video SDK** event. 2619 + * 2620 + * 2621 + * **Event type**: `session.stream_ingestion_started` 2622 + * 2623 + */ 2624 + export type SessionStreamIngestionStartedWebhookPayload = { 2625 + /** 2626 + * Event name. 2627 + */ 2628 + event: 'session.stream_ingestion_started'; 2629 + /** 2630 + * Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format. 2631 + */ 2632 + event_ts: number; 2633 + payload: { 2634 + /** 2635 + * The Video SDK account ID. 2636 + */ 2637 + account_id: string; 2638 + /** 2639 + * Information about the session. 2640 + */ 2641 + object: { 2642 + /** 2643 + * Unique session identifier. Each instance of the session will have its own session_id. 2644 + */ 2645 + session_id: string; 2646 + /** 2647 + * Session name. 2648 + */ 2649 + session_name: string; 2650 + /** 2651 + * The Video SDK custom session ID. 2652 + */ 2653 + session_key?: string; 2654 + /** 2655 + * Information about the stream ingestion. 2656 + */ 2657 + stream_ingestion: { 2658 + /** 2659 + * The stream ingestion ID. 2660 + */ 2661 + stream_id: string; 2662 + /** 2663 + * The stream ingestion name. 2664 + */ 2665 + stream_name: string; 2666 + /** 2667 + * The stream ingestion description. 2668 + */ 2669 + stream_description?: string; 2670 + /** 2671 + * The stream ingestion key. 2672 + */ 2673 + stream_key: string; 2674 + /** 2675 + * The stream URL. 2676 + */ 2677 + stream_url: string; 2678 + /** 2679 + * The backup stream URL. 2680 + */ 2681 + backup_stream_url: string; 2682 + }; 2683 + }; 2684 + }; 2685 + }; 2686 + 2687 + export type SessionStreamIngestionStartedWebhookRequest = { 2688 + body: SessionStreamIngestionStartedWebhookPayload; 2689 + key: 'session.stream_ingestion_started'; 2690 + path?: never; 2691 + query?: never; 2692 + }; 2693 + 2694 + /** 2695 + * # session.stream_ingestion_connected 2696 + * Zoom triggers the **Session stream ingestion connected** event every time live streaming software connects to the Zoom Video SDK session. This indicates that the Zoom streaming platform is receiving data from the streaming software, but the received Real-Time Messaging Protocol (RTMP) data is not sent to the session yet. 2697 + * 2698 + * ## Prerequisites 2699 + * 2700 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 2701 + * * A valid **Event Notification Endpoint URL**. 2702 + * * The **Session stream ingestion connected** subscription enabled under the **Video SDK** event. 2703 + * 2704 + * 2705 + * **Event type**: `session.stream_ingestion_connected` 2706 + * 2707 + */ 2708 + export type SessionStreamIngestionConnectedWebhookPayload = { 2709 + /** 2710 + * Name of the event. 2711 + */ 2712 + event: 'session.stream_ingestion_connected'; 2713 + /** 2714 + * Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format. 2715 + */ 2716 + event_ts: number; 2717 + payload: { 2718 + /** 2719 + * The Video SDK account ID. 2720 + */ 2721 + account_id: string; 2722 + /** 2723 + * Information about the session. 2724 + */ 2725 + object: { 2726 + /** 2727 + * Unique session identifier. Each instance of the session will have its own session_id. 2728 + */ 2729 + session_id: string; 2730 + /** 2731 + * Session name. 2732 + */ 2733 + session_name: string; 2734 + /** 2735 + * The Video SDK custom session ID. 2736 + */ 2737 + session_key?: string; 2738 + /** 2739 + * Information about the stream ingestion. 2740 + */ 2741 + stream_ingestion: { 2742 + /** 2743 + * The stream ingestion ID. 2744 + */ 2745 + stream_id: string; 2746 + /** 2747 + * The stream ingestion name. 2748 + */ 2749 + stream_name: string; 2750 + /** 2751 + * The stream ingestion description. 2752 + */ 2753 + stream_description?: string; 2754 + /** 2755 + * The stream ingestion key. 2756 + */ 2757 + stream_key: string; 2758 + /** 2759 + * The stream URL. 2760 + */ 2761 + stream_url: string; 2762 + /** 2763 + * The backup stream URL. 2764 + */ 2765 + backup_stream_url: string; 2766 + }; 2767 + }; 2768 + }; 2769 + }; 2770 + 2771 + export type SessionStreamIngestionConnectedWebhookRequest = { 2772 + body: SessionStreamIngestionConnectedWebhookPayload; 2773 + key: 'session.stream_ingestion_connected'; 2774 + path?: never; 2775 + query?: never; 2776 + }; 2777 + 2778 + /** 2779 + * # session.stream_ingestion_disconnected 2780 + * Zoom triggers the **Session stream ingestion disconnected** event every time a Real-Time Messaging Protocol (RTMP) software program disconnects. 2781 + * 2782 + * ## Prerequisites 2783 + * 2784 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 2785 + * * A valid **Event Notification Endpoint URL**. 2786 + * * The **Session stream ingestion disconnected** subscription enabled under the **Video SDK** event. 2787 + * 2788 + * 2789 + * **Event type**: `session.stream_ingestion_disconnected` 2790 + * 2791 + */ 2792 + export type SessionStreamIngestionDisconnectedWebhookPayload = { 2793 + /** 2794 + * Name of the event. 2795 + */ 2796 + event: 'session.stream_ingestion_disconnected'; 2797 + /** 2798 + * Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format. 2799 + */ 2800 + event_ts: number; 2801 + payload: { 2802 + /** 2803 + * The Video SDK account ID. 2804 + */ 2805 + account_id: string; 2806 + /** 2807 + * Information about the session. 2808 + */ 2809 + object: { 2810 + /** 2811 + * Unique session identifier. Each instance of the session will have its own session_id. 2812 + */ 2813 + session_id: string; 2814 + /** 2815 + * Session name. 2816 + */ 2817 + session_name: string; 2818 + /** 2819 + * The Video SDK custom session ID. 2820 + */ 2821 + session_key?: string; 2822 + /** 2823 + * Information about the stream ingestion. 2824 + */ 2825 + stream_ingestion: { 2826 + /** 2827 + * The stream ingestion ID. 2828 + */ 2829 + stream_id: string; 2830 + /** 2831 + * The stream ingestion name. 2832 + */ 2833 + stream_name: string; 2834 + /** 2835 + * The stream ingestion description. 2836 + */ 2837 + stream_description?: string; 2838 + /** 2839 + * The stream ingestion key. 2840 + */ 2841 + stream_key: string; 2842 + /** 2843 + * The stream URL. 2844 + */ 2845 + stream_url: string; 2846 + /** 2847 + * The backup stream URL. 2848 + */ 2849 + backup_stream_url: string; 2850 + }; 2851 + }; 2852 + }; 2853 + }; 2854 + 2855 + export type SessionStreamIngestionDisconnectedWebhookRequest = { 2856 + body: SessionStreamIngestionDisconnectedWebhookPayload; 2857 + key: 'session.stream_ingestion_disconnected'; 2858 + path?: never; 2859 + query?: never; 2860 + }; 2861 + 2862 + /** 2863 + * # session.recording_recovered 2864 + * --- 2865 + * 2866 + * Event: `session.recording_recovered` 2867 + * 2868 + * ## Event description 2869 + * 2870 + * The **Session recording recovered** event is triggered every time one of your app users or account users recover a recording from the trash. 2871 + * 2872 + * Zoom allows users to recover their cloud recordings from trash within 30 days of deletion. You can recover a deleted cloud recording with: 2873 + * 2874 + * * The tab in the Zoom web client. See [Video SDK recordings and reports](https://developers.zoom.us/docs/video-sdk/reports/) for details. 2875 + * * The [Recover a single recording](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingStatusUpdateOne) or [Recover session's recordings](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingStatusUpdate) API. 2876 + * 2877 + * ## Prerequisites 2878 + * 2879 + * * Cloud Recording must be enabled on the Video SDK account. 2880 + * * Event Subscriptions must be enabled for your app with the following configurations: 2881 + * * A valid Event Notification Endpoint URL. 2882 + * * "**Session recording recovered**" subscription enabled under the **Recording** event. 2883 + * 2884 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_recovered` event notification: 2885 + * 2886 + * 2887 + * 2888 + * **Event type**: `session.recording_recovered` 2889 + * 2890 + */ 2891 + export type SessionRecordingRecoveredWebhookPayload = { 2892 + /** 2893 + * The event's name. 2894 + */ 2895 + event: 'session.recording_recovered'; 2896 + /** 2897 + * A timestamp, in milliseconds since epoch, at which the event occurred. 2898 + */ 2899 + event_ts: number; 2900 + payload: { 2901 + /** 2902 + * The Video SDK account ID. 2903 + */ 2904 + account_id: string; 2905 + /** 2906 + * The email address of the user who deleted the recording. 2907 + */ 2908 + operator: string; 2909 + /** 2910 + * The user ID of the user who deleted the recording. 2911 + */ 2912 + operator_id: string; 2913 + /** 2914 + * Information about the session. This object only returns updated properties. 2915 + */ 2916 + object: { 2917 + /** 2918 + * Unique session identifier. Each instance of the session will have its own session_id. 2919 + */ 2920 + session_id: string; 2921 + /** 2922 + * Session name. 2923 + */ 2924 + session_name: string; 2925 + /** 2926 + * The Video SDK custom session ID. 2927 + */ 2928 + session_key: string; 2929 + /** 2930 + * The time at which the session started. 2931 + */ 2932 + start_time: string; 2933 + /** 2934 + * The user's timezone. 2935 + */ 2936 + timezone: string; 2937 + }; 2938 + }; 2939 + }; 2940 + 2941 + export type SessionRecordingRecoveredWebhookRequest = { 2942 + body: SessionRecordingRecoveredWebhookPayload; 2943 + key: 'session.recording_recovered'; 2944 + path?: never; 2945 + query?: never; 2946 + }; 2947 + 2948 + /** 2949 + * # session.user_phone_callout_missed 2950 + * 2951 + * The **Invited party missed a session invitation through phone (call out)** event is triggered every time an invitation to join a session through phone (call out) times out. Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038). 2952 + * 2953 + * ## Prerequisites 2954 + * 2955 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 2956 + * * A valid **Event Notification Endpoint URL**. 2957 + * * The **Invited party missed a session invitation through phone (call out)** subscription enabled under the **Session** event. 2958 + * 2959 + * 2960 + * 2961 + * 2962 + * **Event type**: `session.user_phone_callout_missed` 2963 + * 2964 + */ 2965 + export type SessionUserPhoneCalloutMissedWebhookPayload = { 2966 + /** 2967 + * The name of the event. 2968 + */ 2969 + event: string; 2970 + /** 2971 + * A timestamp at which the event occurred. 2972 + */ 2973 + event_ts: number; 2974 + payload: { 2975 + /** 2976 + * The account ID of the session host. 2977 + */ 2978 + account_id: string; 2979 + /** 2980 + * Information about the session. 2981 + */ 2982 + object: { 2983 + /** 2984 + * The session ID. 2985 + * @deprecated 2986 + */ 2987 + id?: number; 2988 + /** 2989 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 2990 + * @deprecated 2991 + */ 2992 + uuid?: string; 2993 + /** 2994 + * Unique session identifier. Each instance of the session will have its own session_id. 2995 + */ 2996 + session_id: string; 2997 + /** 2998 + * Session name. 2999 + */ 3000 + session_name: string; 3001 + /** 3002 + * The Video SDK custom session ID. 3003 + */ 3004 + session_key: string; 3005 + /** 3006 + * Another identifier for the inviter. Can be a number or characters. 3007 + */ 3008 + user_key: string; 3009 + /** 3010 + * The user ID of the session host. 3011 + */ 3012 + host_id: string; 3013 + /** 3014 + * Information about the invited user. 3015 + */ 3016 + participant: { 3017 + /** 3018 + * The user's name to display in the session. 3019 + */ 3020 + invitee_name: string; 3021 + /** 3022 + * The user's phone number. 3023 + */ 3024 + phone_number: number; 3025 + /** 3026 + * The number used to call out to the invited user. 3027 + */ 3028 + from_number: number; 3029 + }; 3030 + }; 3031 + }; 3032 + }; 3033 + 3034 + export type SessionUserPhoneCalloutMissedWebhookRequest = { 3035 + body: SessionUserPhoneCalloutMissedWebhookPayload; 3036 + key: 'session.user_phone_callout_missed'; 3037 + path?: never; 3038 + query?: never; 3039 + }; 3040 + 3041 + /** 3042 + * # session.user_phone_callout_rejected 3043 + * 3044 + * The **Invited party rejected a session invitation through phone (call out)** event is triggered every time a user rejects an invitation to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038). 3045 + * 3046 + * ## Prerequisites 3047 + * 3048 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 3049 + * * A valid **Event Notification Endpoint URL**. 3050 + * * The **Invited party rejected a session invitation through phone (call out)** subscription enabled under the **Session** event. 3051 + * 3052 + * 3053 + * 3054 + * 3055 + * **Event type**: `session.user_phone_callout_rejected` 3056 + * 3057 + */ 3058 + export type SessionUserPhoneCalloutRejectedWebhookPayload = { 3059 + /** 3060 + * The name of the event. 3061 + */ 3062 + event: string; 3063 + /** 3064 + * A timestamp at which the event occurred. 3065 + */ 3066 + event_ts: number; 3067 + payload: { 3068 + /** 3069 + * The account ID of the session host. 3070 + */ 3071 + account_id: string; 3072 + /** 3073 + * Information about the session. 3074 + */ 3075 + object: { 3076 + /** 3077 + * The session ID. 3078 + * @deprecated 3079 + */ 3080 + id?: number; 3081 + /** 3082 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 3083 + * @deprecated 3084 + */ 3085 + uuid?: string; 3086 + /** 3087 + * Unique session identifier. Each instance of the session will have its own session_id. 3088 + */ 3089 + session_id: string; 3090 + /** 3091 + * Session name. 3092 + */ 3093 + session_name: string; 3094 + /** 3095 + * The Video SDK custom session ID. 3096 + */ 3097 + session_key: string; 3098 + /** 3099 + * Another identifier for the inviter. Can be a number or characters. 3100 + */ 3101 + user_key: string; 3102 + /** 3103 + * The user ID of the session host. 3104 + */ 3105 + host_id: string; 3106 + /** 3107 + * Information about the invited user. 3108 + */ 3109 + participant: { 3110 + /** 3111 + * The user's name to display in the session. 3112 + */ 3113 + invitee_name: string; 3114 + /** 3115 + * The user's phone number. 3116 + */ 3117 + phone_number: number; 3118 + /** 3119 + * The number used to call out to the invited user. 3120 + */ 3121 + from_number: number; 3122 + }; 3123 + }; 3124 + }; 3125 + }; 3126 + 3127 + export type SessionUserPhoneCalloutRejectedWebhookRequest = { 3128 + body: SessionUserPhoneCalloutRejectedWebhookPayload; 3129 + key: 'session.user_phone_callout_rejected'; 3130 + path?: never; 3131 + query?: never; 3132 + }; 3133 + 3134 + /** 3135 + * # session.user_room_system_callout_accepted 3136 + * 3137 + * The **Invited party answered a session invitation through phone (call out) via Zoom room** event is triggered every time a user [joins a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035). 3138 + * 3139 + * ## Prerequisites 3140 + * 3141 + * * **Event Subscriptions** must be enabled for your app with the following configurations: 3142 + * * A valid **Event Notification Endpoint URL**. 3143 + * * The **Invited party answered a session invitation through phone (call out) via Zoom room** subscription enabled under the **Session** event. 3144 + * 3145 + * 3146 + * 3147 + * **Event type**: `session.user_room_system_callout_accepted` 3148 + * 3149 + */ 3150 + export type SessionUserRoomSystemCalloutAcceptedWebhookPayload = { 3151 + /** 3152 + * The name of the event. 3153 + */ 3154 + event: string; 3155 + /** 3156 + * A timestamp at which the event occurred. 3157 + */ 3158 + event_ts: number; 3159 + payload: { 3160 + /** 3161 + * The account ID of the session host. 3162 + */ 3163 + account_id: string; 3164 + /** 3165 + * Information about the session. 3166 + */ 3167 + object: { 3168 + /** 3169 + * The session ID. 3170 + * @deprecated 3171 + */ 3172 + id?: number; 3173 + /** 3174 + * The session's universally unique identifier (UUID). Each session instance generates a session UUID. 3175 + * @deprecated 3176 + */ 3177 + uuid?: string; 3178 + /** 3179 + * Unique session identifier. Each instance of the session will have its own session_id. 3180 + */ 3181 + session_id: string; 3182 + /** 3183 + * Session name. 3184 + */ 3185 + session_name: string; 3186 + /** 3187 + * The user ID of the session host. 3188 + */ 3189 + host_id: string; 3190 + /** 3191 + * The request unique identifier (UUID). 3192 + */ 3193 + message_id: string; 3194 + /** 3195 + * The user name of the event's trigger. 3196 + */ 3197 + inviter_name: string; 3198 + /** 3199 + * Information about the invited participant. 3200 + */ 3201 + participant: { 3202 + /** 3203 + * The type of call out. Use a value of h323 or sip. 3204 + */ 3205 + call_type: string; 3206 + /** 3207 + * The user's device IP address. 3208 + */ 3209 + device_ip: string; 3210 + [key: string]: unknown | string; 3211 + }; 3212 + }; 3213 + }; 3214 + }; 3215 + 3216 + export type SessionUserRoomSystemCalloutAcceptedWebhookRequest = { 3217 + body: SessionUserRoomSystemCalloutAcceptedWebhookPayload; 3218 + key: 'session.user_room_system_callout_accepted'; 3219 + path?: never; 3220 + query?: never; 3221 + }; 3222 + 3223 + /** 3224 + * # session.recording_stopped 3225 + * --- 3226 + * 3227 + * Event: `session.recording_stopped` 3228 + * 3229 + * ## Event description 3230 + * 3231 + * The **Session recording stopped** event is triggered every time a previously paused recording of a session is resumed. 3232 + * 3233 + * Only a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details. 3234 + * 3235 + * ## Prerequisites 3236 + * 3237 + * * Cloud Recording must be enabled on the Video SDK account. 3238 + * * Event Subscriptions must be enabled for your app with the following configurations: 3239 + * * A valid Event Notification Endpoint URL. 3240 + * * **Session recording stopped** subscription enabled under the **Recording** event. 3241 + * 3242 + * The tabs below display the complete schema, payload with data types, and an example of the `session.recording_stopped` event notification: 3243 + * 3244 + * 3245 + * 3246 + * **Event type**: `session.recording_stopped` 3247 + * 3248 + */ 3249 + export type SessionRecordingStoppedWebhookPayload = { 3250 + /** 3251 + * The event's name. 3252 + */ 3253 + event: 'session.recording_stopped'; 3254 + /** 3255 + * A timestamp, in milliseconds since epoch, at which the event occurred. 3256 + */ 3257 + event_ts: number; 3258 + payload: { 3259 + /** 3260 + * The Video SDK account ID. 3261 + */ 3262 + account_id: string; 3263 + /** 3264 + * Information about the session. This object only returns updated properties. 3265 + */ 3266 + object: { 3267 + /** 3268 + * Unique session identifier. Each instance of the session will have its own session_id. 3269 + */ 3270 + session_id: string; 3271 + /** 3272 + * Session name. 3273 + */ 3274 + session_name: string; 3275 + /** 3276 + * The Video SDK custom session ID. 3277 + */ 3278 + session_key: string; 3279 + /** 3280 + * The time at which the session started. 3281 + */ 3282 + start_time: string; 3283 + /** 3284 + * The user's timezone. 3285 + */ 3286 + timezone: string; 3287 + recording_file: { 3288 + /** 3289 + * The recording start time. 3290 + */ 3291 + recording_start?: string; 3292 + /** 3293 + * The recording end time. Response in general query. 3294 + */ 3295 + recording_end?: string; 3296 + }; 3297 + }; 3298 + }; 3299 + }; 3300 + 3301 + export type SessionRecordingStoppedWebhookRequest = { 3302 + body: SessionRecordingStoppedWebhookPayload; 3303 + key: 'session.recording_stopped'; 3304 + path?: never; 3305 + query?: never; 3306 + }; 3307 + 3308 + export type ClientOptions = { 3309 + baseUrl: `${string}://${string}` | (string & {}); 3310 + }; 3311 + 3312 + export type Webhooks = SessionUserPhoneCalloutRingingWebhookRequest | SessionUserRoomSystemCalloutRingingWebhookRequest | SessionRecordingStartedWebhookRequest | SessionRecordingResumedWebhookRequest | SessionLiveStreamingStoppedWebhookRequest | SessionStreamIngestionStoppedWebhookRequest | SessionUserRoomSystemCalloutRejectedWebhookRequest | SessionAlertWebhookRequest | SessionSharingEndedWebhookRequest | SessionRecordingPausedWebhookRequest | SessionEndedWebhookRequest | SessionStartedWebhookRequest | SessionStreamIngestionUnbindWebhookRequest | SessionLiveStreamingStartedWebhookRequest | SessionUserRoomSystemCalloutMissedWebhookRequest | SessionUserPhoneCalloutAcceptedWebhookRequest | SessionUserLeftWebhookRequest | SessionSharingStartedWebhookRequest | SessionUserPhoneCalloutCanceledWebhookRequest | SessionRecordingTranscriptCompletedWebhookRequest | SessionRecordingDeletedWebhookRequest | SessionUserRoomSystemCalloutFailedWebhookRequest | SessionRecordingCompletedWebhookRequest | SessionRecordingTranscriptFailedWebhookRequest | SessionRecordingTrashedWebhookRequest | SessionUserJoinedWebhookRequest | SessionStreamIngestionStartedWebhookRequest | SessionStreamIngestionConnectedWebhookRequest | SessionStreamIngestionDisconnectedWebhookRequest | SessionRecordingRecoveredWebhookRequest | SessionUserPhoneCalloutMissedWebhookRequest | SessionUserPhoneCalloutRejectedWebhookRequest | SessionUserRoomSystemCalloutAcceptedWebhookRequest | SessionRecordingStoppedWebhookRequest;
+1281
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/valibot.gen.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + 3 + import * as v from 'valibot'; 4 + 5 + export const vSessionUserPhoneCalloutRingingWebhookRequest = v.object({ 6 + body: v.optional(v.object({ 7 + event: v.string(), 8 + event_ts: v.pipe(v.union([ 9 + v.number(), 10 + v.string(), 11 + v.bigint() 12 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 13 + payload: v.object({ 14 + account_id: v.string(), 15 + object: v.object({ 16 + id: v.optional(v.pipe(v.union([ 17 + v.number(), 18 + v.string(), 19 + v.bigint() 20 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 21 + uuid: v.optional(v.string()), 22 + session_id: v.string(), 23 + session_name: v.string(), 24 + session_key: v.string(), 25 + user_key: v.string(), 26 + host_id: v.string(), 27 + participant: v.object({ 28 + invitee_name: v.string(), 29 + phone_number: v.pipe(v.union([ 30 + v.number(), 31 + v.string(), 32 + v.bigint() 33 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 34 + from_number: v.pipe(v.union([ 35 + v.number(), 36 + v.string(), 37 + v.bigint() 38 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')) 39 + }) 40 + }) 41 + }) 42 + })), 43 + path: v.optional(v.never()), 44 + query: v.optional(v.never()) 45 + }); 46 + 47 + export const vSessionUserRoomSystemCalloutRingingWebhookRequest = v.object({ 48 + body: v.optional(v.object({ 49 + event: v.string(), 50 + event_ts: v.pipe(v.union([ 51 + v.number(), 52 + v.string(), 53 + v.bigint() 54 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 55 + payload: v.object({ 56 + account_id: v.string(), 57 + object: v.object({ 58 + id: v.optional(v.pipe(v.union([ 59 + v.number(), 60 + v.string(), 61 + v.bigint() 62 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 63 + uuid: v.optional(v.string()), 64 + session_id: v.string(), 65 + session_name: v.string(), 66 + host_id: v.string(), 67 + message_id: v.string(), 68 + inviter_name: v.string(), 69 + participant: v.object({ 70 + call_type: v.string(), 71 + device_ip: v.string() 72 + }) 73 + }) 74 + }) 75 + })), 76 + path: v.optional(v.never()), 77 + query: v.optional(v.never()) 78 + }); 79 + 80 + export const vSessionRecordingStartedWebhookRequest = v.object({ 81 + body: v.optional(v.object({ 82 + event: v.picklist([ 83 + 'session.recording_started' 84 + ]), 85 + event_ts: v.pipe(v.union([ 86 + v.number(), 87 + v.string(), 88 + v.bigint() 89 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 90 + payload: v.object({ 91 + account_id: v.string(), 92 + object: v.object({ 93 + session_id: v.string(), 94 + session_name: v.string(), 95 + session_key: v.string(), 96 + start_time: v.pipe(v.string(), v.isoTimestamp()), 97 + timezone: v.string(), 98 + recording_file: v.object({ 99 + recording_start: v.optional(v.string()), 100 + recording_end: v.optional(v.string()) 101 + }) 102 + }) 103 + }) 104 + })), 105 + path: v.optional(v.never()), 106 + query: v.optional(v.never()) 107 + }); 108 + 109 + export const vSessionRecordingResumedWebhookRequest = v.object({ 110 + body: v.optional(v.object({ 111 + event: v.picklist([ 112 + 'session.recording_resumed' 113 + ]), 114 + event_ts: v.pipe(v.union([ 115 + v.number(), 116 + v.string(), 117 + v.bigint() 118 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 119 + payload: v.object({ 120 + account_id: v.string(), 121 + object: v.object({ 122 + session_id: v.string(), 123 + session_name: v.string(), 124 + session_key: v.string(), 125 + start_time: v.pipe(v.string(), v.isoTimestamp()), 126 + timezone: v.string(), 127 + recording_file: v.object({ 128 + recording_start: v.optional(v.string()), 129 + recording_end: v.optional(v.string()) 130 + }) 131 + }) 132 + }) 133 + })), 134 + path: v.optional(v.never()), 135 + query: v.optional(v.never()) 136 + }); 137 + 138 + export const vSessionLiveStreamingStoppedWebhookRequest = v.object({ 139 + body: v.optional(v.object({ 140 + event: v.picklist([ 141 + 'session.live_streaming_stopped' 142 + ]), 143 + event_ts: v.pipe(v.union([ 144 + v.number(), 145 + v.string(), 146 + v.bigint() 147 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 148 + payload: v.object({ 149 + account_id: v.string(), 150 + object: v.object({ 151 + id: v.string(), 152 + session_id: v.string(), 153 + session_name: v.string(), 154 + session_key: v.optional(v.string()), 155 + start_time: v.pipe(v.string(), v.isoTimestamp()), 156 + live_streaming: v.object({ 157 + service: v.picklist([ 158 + 'Facebook', 159 + 'Workplace_by_Facebook', 160 + 'YouTube', 161 + 'Custom_Live_Streaming_Service' 162 + ]), 163 + custom_live_streaming_settings: v.object({ 164 + stream_url: v.string(), 165 + stream_key: v.string(), 166 + page_url: v.string(), 167 + resolution: v.optional(v.string()) 168 + }), 169 + date_time: v.pipe(v.string(), v.isoTimestamp()) 170 + }) 171 + }) 172 + }) 173 + })), 174 + path: v.optional(v.never()), 175 + query: v.optional(v.never()) 176 + }); 177 + 178 + export const vSessionStreamIngestionStoppedWebhookRequest = v.object({ 179 + body: v.optional(v.object({ 180 + event: v.picklist([ 181 + 'session.stream_ingestion_stopped' 182 + ]), 183 + event_ts: v.pipe(v.union([ 184 + v.number(), 185 + v.string(), 186 + v.bigint() 187 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 188 + payload: v.object({ 189 + account_id: v.string(), 190 + object: v.object({ 191 + session_id: v.string(), 192 + session_name: v.string(), 193 + session_key: v.optional(v.string()), 194 + stream_ingestion: v.object({ 195 + stream_id: v.string(), 196 + stream_name: v.string(), 197 + stream_description: v.optional(v.string()), 198 + stream_key: v.string(), 199 + stream_url: v.string(), 200 + backup_stream_url: v.string() 201 + }) 202 + }) 203 + }) 204 + })), 205 + path: v.optional(v.never()), 206 + query: v.optional(v.never()) 207 + }); 208 + 209 + export const vSessionUserRoomSystemCalloutRejectedWebhookRequest = v.object({ 210 + body: v.optional(v.object({ 211 + event: v.string(), 212 + event_ts: v.pipe(v.union([ 213 + v.number(), 214 + v.string(), 215 + v.bigint() 216 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 217 + payload: v.object({ 218 + account_id: v.string(), 219 + object: v.object({ 220 + id: v.optional(v.pipe(v.union([ 221 + v.number(), 222 + v.string(), 223 + v.bigint() 224 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 225 + uuid: v.optional(v.string()), 226 + session_id: v.string(), 227 + session_name: v.string(), 228 + host_id: v.string(), 229 + message_id: v.string(), 230 + inviter_name: v.string(), 231 + participant: v.object({ 232 + call_type: v.string(), 233 + device_ip: v.string() 234 + }) 235 + }) 236 + }) 237 + })), 238 + path: v.optional(v.never()), 239 + query: v.optional(v.never()) 240 + }); 241 + 242 + export const vSessionAlertWebhookRequest = v.object({ 243 + body: v.optional(v.object({ 244 + event: v.picklist([ 245 + 'session.alert' 246 + ]), 247 + event_ts: v.pipe(v.union([ 248 + v.number(), 249 + v.string(), 250 + v.bigint() 251 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 252 + payload: v.object({ 253 + account_id: v.string(), 254 + object: v.object({ 255 + id: v.string(), 256 + session_id: v.string(), 257 + session_name: v.string(), 258 + session_key: v.optional(v.string()), 259 + issues: v.array(v.picklist([ 260 + 'Unstable audio quality', 261 + 'Unstable video quality', 262 + 'Unstable screen share quality', 263 + 'High CPU occupation', 264 + 'Call Reconnection' 265 + ])) 266 + }) 267 + }) 268 + })), 269 + path: v.optional(v.never()), 270 + query: v.optional(v.never()) 271 + }); 272 + 273 + export const vSessionSharingEndedWebhookRequest = v.object({ 274 + body: v.optional(v.object({ 275 + event: v.picklist([ 276 + 'session.sharing_ended' 277 + ]), 278 + event_ts: v.pipe(v.union([ 279 + v.number(), 280 + v.string(), 281 + v.bigint() 282 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 283 + payload: v.object({ 284 + account_id: v.string(), 285 + object: v.object({ 286 + id: v.string(), 287 + session_id: v.string(), 288 + session_name: v.string(), 289 + session_key: v.optional(v.string()), 290 + user: v.object({ 291 + id: v.string(), 292 + name: v.string(), 293 + user_key: v.optional(v.string()), 294 + sharing_details: v.object({ 295 + content: v.picklist([ 296 + 'application', 297 + 'whiteboard', 298 + 'desktop', 299 + 'unknown' 300 + ]), 301 + date_time: v.pipe(v.string(), v.isoTimestamp()) 302 + }) 303 + }) 304 + }) 305 + }) 306 + })), 307 + path: v.optional(v.never()), 308 + query: v.optional(v.never()) 309 + }); 310 + 311 + export const vSessionRecordingPausedWebhookRequest = v.object({ 312 + body: v.optional(v.object({ 313 + event: v.picklist([ 314 + 'session.recording_paused' 315 + ]), 316 + event_ts: v.pipe(v.union([ 317 + v.number(), 318 + v.string(), 319 + v.bigint() 320 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 321 + payload: v.object({ 322 + account_id: v.string(), 323 + object: v.object({ 324 + session_id: v.string(), 325 + session_name: v.string(), 326 + session_key: v.string(), 327 + start_time: v.pipe(v.string(), v.isoTimestamp()), 328 + timezone: v.string(), 329 + recording_file: v.object({ 330 + recording_start: v.optional(v.string()), 331 + recording_end: v.optional(v.string()) 332 + }) 333 + }) 334 + }) 335 + })), 336 + path: v.optional(v.never()), 337 + query: v.optional(v.never()) 338 + }); 339 + 340 + export const vSessionEndedWebhookRequest = v.object({ 341 + body: v.optional(v.object({ 342 + event: v.picklist([ 343 + 'session.ended' 344 + ]), 345 + event_ts: v.pipe(v.union([ 346 + v.number(), 347 + v.string(), 348 + v.bigint() 349 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 350 + payload: v.object({ 351 + account_id: v.string(), 352 + object: v.object({ 353 + id: v.string(), 354 + session_id: v.string(), 355 + session_name: v.string(), 356 + session_key: v.optional(v.string()), 357 + start_time: v.pipe(v.string(), v.isoTimestamp()), 358 + end_time: v.pipe(v.string(), v.isoTimestamp()) 359 + }) 360 + }) 361 + })), 362 + path: v.optional(v.never()), 363 + query: v.optional(v.never()) 364 + }); 365 + 366 + export const vSessionStartedWebhookRequest = v.object({ 367 + body: v.optional(v.object({ 368 + event: v.picklist([ 369 + 'session.started' 370 + ]), 371 + event_ts: v.pipe(v.union([ 372 + v.number(), 373 + v.string(), 374 + v.bigint() 375 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 376 + payload: v.object({ 377 + account_id: v.string(), 378 + object: v.object({ 379 + id: v.string(), 380 + session_id: v.string(), 381 + session_name: v.string(), 382 + session_key: v.optional(v.string()), 383 + start_time: v.pipe(v.string(), v.isoTimestamp()) 384 + }) 385 + }) 386 + })), 387 + path: v.optional(v.never()), 388 + query: v.optional(v.never()) 389 + }); 390 + 391 + export const vSessionStreamIngestionUnbindWebhookRequest = v.object({ 392 + body: v.optional(v.object({ 393 + event: v.picklist([ 394 + 'session.stream_ingestion_unbind' 395 + ]), 396 + event_ts: v.pipe(v.union([ 397 + v.number(), 398 + v.string(), 399 + v.bigint() 400 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 401 + payload: v.object({ 402 + account_id: v.string(), 403 + object: v.object({ 404 + session_id: v.string(), 405 + session_name: v.string(), 406 + session_key: v.optional(v.string()), 407 + stream_ingestion: v.object({ 408 + stream_id: v.string(), 409 + stream_name: v.string(), 410 + stream_description: v.optional(v.string()), 411 + stream_key: v.string(), 412 + stream_url: v.string(), 413 + backup_stream_url: v.string() 414 + }) 415 + }) 416 + }) 417 + })), 418 + path: v.optional(v.never()), 419 + query: v.optional(v.never()) 420 + }); 421 + 422 + export const vSessionLiveStreamingStartedWebhookRequest = v.object({ 423 + body: v.optional(v.object({ 424 + event: v.picklist([ 425 + 'session.live_streaming_started' 426 + ]), 427 + event_ts: v.pipe(v.union([ 428 + v.number(), 429 + v.string(), 430 + v.bigint() 431 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 432 + payload: v.object({ 433 + account_id: v.string(), 434 + object: v.object({ 435 + id: v.string(), 436 + session_id: v.string(), 437 + session_name: v.string(), 438 + session_key: v.optional(v.string()), 439 + start_time: v.pipe(v.string(), v.isoTimestamp()), 440 + live_streaming: v.object({ 441 + service: v.picklist([ 442 + 'Facebook', 443 + 'Workplace_by_Facebook', 444 + 'YouTube', 445 + 'Custom_Live_Streaming_Service' 446 + ]), 447 + custom_live_streaming_settings: v.object({ 448 + stream_url: v.string(), 449 + stream_key: v.string(), 450 + page_url: v.string(), 451 + resolution: v.optional(v.string()) 452 + }), 453 + date_time: v.pipe(v.string(), v.isoTimestamp()) 454 + }) 455 + }) 456 + }) 457 + })), 458 + path: v.optional(v.never()), 459 + query: v.optional(v.never()) 460 + }); 461 + 462 + export const vSessionUserRoomSystemCalloutMissedWebhookRequest = v.object({ 463 + body: v.optional(v.object({ 464 + event: v.string(), 465 + event_ts: v.pipe(v.union([ 466 + v.number(), 467 + v.string(), 468 + v.bigint() 469 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 470 + payload: v.object({ 471 + account_id: v.string(), 472 + object: v.object({ 473 + id: v.optional(v.pipe(v.union([ 474 + v.number(), 475 + v.string(), 476 + v.bigint() 477 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 478 + uuid: v.optional(v.string()), 479 + session_id: v.string(), 480 + session_name: v.string(), 481 + host_id: v.string(), 482 + message_id: v.string(), 483 + inviter_name: v.string(), 484 + participant: v.object({ 485 + call_type: v.string(), 486 + device_ip: v.string() 487 + }) 488 + }) 489 + }) 490 + })), 491 + path: v.optional(v.never()), 492 + query: v.optional(v.never()) 493 + }); 494 + 495 + export const vSessionUserPhoneCalloutAcceptedWebhookRequest = v.object({ 496 + body: v.optional(v.object({ 497 + event: v.string(), 498 + event_ts: v.pipe(v.union([ 499 + v.number(), 500 + v.string(), 501 + v.bigint() 502 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 503 + payload: v.object({ 504 + account_id: v.string(), 505 + object: v.object({ 506 + id: v.optional(v.pipe(v.union([ 507 + v.number(), 508 + v.string(), 509 + v.bigint() 510 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 511 + uuid: v.optional(v.string()), 512 + session_id: v.string(), 513 + session_name: v.string(), 514 + session_key: v.string(), 515 + user_key: v.string(), 516 + host_id: v.string(), 517 + participant: v.object({ 518 + invitee_name: v.string(), 519 + phone_number: v.pipe(v.union([ 520 + v.number(), 521 + v.string(), 522 + v.bigint() 523 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 524 + from_number: v.pipe(v.union([ 525 + v.number(), 526 + v.string(), 527 + v.bigint() 528 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')) 529 + }) 530 + }) 531 + }) 532 + })), 533 + path: v.optional(v.never()), 534 + query: v.optional(v.never()) 535 + }); 536 + 537 + export const vSessionUserLeftWebhookRequest = v.object({ 538 + body: v.optional(v.object({ 539 + event: v.picklist([ 540 + 'session.user_left' 541 + ]), 542 + event_ts: v.pipe(v.union([ 543 + v.number(), 544 + v.string(), 545 + v.bigint() 546 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 547 + payload: v.object({ 548 + account_id: v.string(), 549 + object: v.object({ 550 + id: v.string(), 551 + session_id: v.string(), 552 + session_name: v.string(), 553 + session_key: v.optional(v.string()), 554 + user: v.object({ 555 + id: v.string(), 556 + name: v.string(), 557 + leave_time: v.pipe(v.string(), v.isoTimestamp()), 558 + leave_reason: v.optional(v.string()), 559 + user_key: v.optional(v.string()), 560 + phone_number: v.optional(v.string()), 561 + participant_uuid: v.string() 562 + }) 563 + }) 564 + }) 565 + })), 566 + path: v.optional(v.never()), 567 + query: v.optional(v.never()) 568 + }); 569 + 570 + export const vSessionSharingStartedWebhookRequest = v.object({ 571 + body: v.optional(v.object({ 572 + event: v.picklist([ 573 + 'session.sharing_started' 574 + ]), 575 + event_ts: v.pipe(v.union([ 576 + v.number(), 577 + v.string(), 578 + v.bigint() 579 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 580 + payload: v.object({ 581 + account_id: v.string(), 582 + object: v.object({ 583 + id: v.string(), 584 + session_id: v.string(), 585 + session_name: v.string(), 586 + session_key: v.optional(v.string()), 587 + user: v.object({ 588 + id: v.string(), 589 + name: v.string(), 590 + user_key: v.optional(v.string()), 591 + sharing_details: v.object({ 592 + content: v.picklist([ 593 + 'application', 594 + 'whiteboard', 595 + 'desktop', 596 + 'unknown' 597 + ]), 598 + date_time: v.pipe(v.string(), v.isoTimestamp()) 599 + }) 600 + }) 601 + }) 602 + }) 603 + })), 604 + path: v.optional(v.never()), 605 + query: v.optional(v.never()) 606 + }); 607 + 608 + export const vSessionUserPhoneCalloutCanceledWebhookRequest = v.object({ 609 + body: v.optional(v.object({ 610 + event: v.string(), 611 + event_ts: v.pipe(v.union([ 612 + v.number(), 613 + v.string(), 614 + v.bigint() 615 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 616 + payload: v.object({ 617 + account_id: v.string(), 618 + object: v.object({ 619 + session_id: v.string(), 620 + session_name: v.string(), 621 + session_key: v.string(), 622 + user_key: v.string(), 623 + participant: v.object({ 624 + invitee_name: v.string(), 625 + phone_number: v.pipe(v.union([ 626 + v.number(), 627 + v.string(), 628 + v.bigint() 629 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 630 + from_number: v.pipe(v.union([ 631 + v.number(), 632 + v.string(), 633 + v.bigint() 634 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')) 635 + }) 636 + }) 637 + }) 638 + })), 639 + path: v.optional(v.never()), 640 + query: v.optional(v.never()) 641 + }); 642 + 643 + export const vSessionRecordingTranscriptCompletedWebhookRequest = v.object({ 644 + body: v.optional(v.object({ 645 + event: v.picklist([ 646 + 'session.recording_transcript_completed' 647 + ]), 648 + event_ts: v.pipe(v.union([ 649 + v.number(), 650 + v.string(), 651 + v.bigint() 652 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 653 + download_token: v.string(), 654 + payload: v.object({ 655 + account_id: v.string(), 656 + object: v.object({ 657 + session_id: v.string(), 658 + session_name: v.string(), 659 + session_key: v.string(), 660 + start_time: v.pipe(v.string(), v.isoTimestamp()), 661 + timezone: v.string(), 662 + recording_files: v.array(v.object({ 663 + id: v.optional(v.string()), 664 + recording_start: v.optional(v.string()), 665 + recording_end: v.optional(v.string()), 666 + file_name: v.optional(v.string()), 667 + file_path: v.optional(v.string()), 668 + file_type: v.optional(v.picklist([ 669 + 'MP4', 670 + 'M4A', 671 + 'CHAT', 672 + 'TRANSCRIPT', 673 + 'CSV', 674 + 'CC', 675 + 'TB', 676 + 'CHAT_MESSAGE', 677 + 'TIMELINE' 678 + ])), 679 + file_size: v.optional(v.number()), 680 + file_extension: v.optional(v.picklist([ 681 + 'MP4', 682 + 'M4A', 683 + 'TXT', 684 + 'VTT', 685 + 'CSV', 686 + 'JSON', 687 + 'JPG' 688 + ])), 689 + download_url: v.optional(v.string()), 690 + status: v.optional(v.picklist([ 691 + 'completed' 692 + ])), 693 + recording_type: v.optional(v.picklist([ 694 + 'shared_screen_with_speaker_view(CC)', 695 + 'shared_screen_with_speaker_view', 696 + 'shared_screen_with_gallery_view', 697 + 'gallery_view', 698 + 'shared_screen', 699 + 'audio_only', 700 + 'audio_transcript', 701 + 'chat_file', 702 + 'active_speaker', 703 + 'host_video', 704 + 'audio_only_each_participant', 705 + 'cc_transcript', 706 + 'closed_caption', 707 + 'poll', 708 + 'timeline', 709 + 'thumbnail', 710 + 'chat_message' 711 + ])) 712 + })) 713 + }) 714 + }) 715 + })), 716 + path: v.optional(v.never()), 717 + query: v.optional(v.never()) 718 + }); 719 + 720 + export const vSessionRecordingDeletedWebhookRequest = v.object({ 721 + body: v.optional(v.object({ 722 + event: v.picklist([ 723 + 'session.recording_deleted' 724 + ]), 725 + event_ts: v.pipe(v.union([ 726 + v.number(), 727 + v.string(), 728 + v.bigint() 729 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 730 + payload: v.object({ 731 + account_id: v.string(), 732 + operator: v.pipe(v.string(), v.email()), 733 + operator_id: v.string(), 734 + object: v.object({ 735 + session_id: v.string(), 736 + session_name: v.string(), 737 + session_key: v.string(), 738 + start_time: v.pipe(v.string(), v.isoTimestamp()), 739 + timezone: v.string() 740 + }) 741 + }) 742 + })), 743 + path: v.optional(v.never()), 744 + query: v.optional(v.never()) 745 + }); 746 + 747 + export const vSessionUserRoomSystemCalloutFailedWebhookRequest = v.object({ 748 + body: v.optional(v.object({ 749 + event: v.string(), 750 + event_ts: v.pipe(v.union([ 751 + v.number(), 752 + v.string(), 753 + v.bigint() 754 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 755 + payload: v.object({ 756 + account_id: v.string(), 757 + object: v.object({ 758 + id: v.optional(v.pipe(v.union([ 759 + v.number(), 760 + v.string(), 761 + v.bigint() 762 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 763 + uuid: v.optional(v.string()), 764 + session_id: v.string(), 765 + session_name: v.string(), 766 + host_id: v.string(), 767 + message_id: v.string(), 768 + inviter_name: v.string(), 769 + reason_type: v.unknown(), 770 + participant: v.object({ 771 + call_type: v.string(), 772 + device_ip: v.string() 773 + }) 774 + }) 775 + }) 776 + })), 777 + path: v.optional(v.never()), 778 + query: v.optional(v.never()) 779 + }); 780 + 781 + export const vSessionRecordingCompletedWebhookRequest = v.object({ 782 + body: v.optional(v.object({ 783 + event: v.picklist([ 784 + 'session.recording_completed' 785 + ]), 786 + event_ts: v.pipe(v.union([ 787 + v.number(), 788 + v.string(), 789 + v.bigint() 790 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 791 + download_token: v.string(), 792 + payload: v.object({ 793 + account_id: v.string(), 794 + object: v.object({ 795 + session_id: v.string(), 796 + session_name: v.string(), 797 + session_key: v.string(), 798 + start_time: v.pipe(v.string(), v.isoTimestamp()), 799 + timezone: v.string(), 800 + recording_files: v.array(v.object({ 801 + id: v.optional(v.string()), 802 + recording_start: v.optional(v.string()), 803 + recording_end: v.optional(v.string()), 804 + file_name: v.optional(v.string()), 805 + file_path: v.optional(v.string()), 806 + file_type: v.optional(v.picklist([ 807 + 'MP4', 808 + 'M4A', 809 + 'CHAT', 810 + 'TRANSCRIPT', 811 + 'CSV', 812 + 'CC', 813 + 'TB', 814 + 'CHAT_MESSAGE' 815 + ])), 816 + file_size: v.optional(v.number()), 817 + file_extension: v.optional(v.picklist([ 818 + 'MP4', 819 + 'M4A', 820 + 'TXT', 821 + 'VTT', 822 + 'CSV', 823 + 'JSON', 824 + 'JPG' 825 + ])), 826 + download_url: v.optional(v.string()), 827 + status: v.optional(v.picklist([ 828 + 'completed' 829 + ])), 830 + recording_type: v.optional(v.picklist([ 831 + 'shared_screen_with_speaker_view(CC)', 832 + 'shared_screen_with_speaker_view', 833 + 'shared_screen_with_gallery_view', 834 + 'gallery_view', 835 + 'shared_screen', 836 + 'audio_only', 837 + 'audio_transcript', 838 + 'chat_file', 839 + 'active_speaker', 840 + 'host_video', 841 + 'audio_only_each_participant', 842 + 'cc_transcript', 843 + 'closed_caption', 844 + 'poll', 845 + 'timeline', 846 + 'thumbnail', 847 + 'chat_message' 848 + ])) 849 + })), 850 + participant_audio_files: v.optional(v.array(v.object({ 851 + id: v.optional(v.string()), 852 + recording_start: v.optional(v.string()), 853 + recording_end: v.optional(v.string()), 854 + file_name: v.optional(v.string()), 855 + file_path: v.optional(v.string()), 856 + file_type: v.optional(v.picklist([ 857 + 'MP4', 858 + 'M4A', 859 + 'CHAT', 860 + 'TRANSCRIPT', 861 + 'CSV', 862 + 'CC', 863 + 'TB', 864 + 'CHAT_MESSAGE' 865 + ])), 866 + file_size: v.optional(v.number()), 867 + file_extension: v.optional(v.picklist([ 868 + 'MP4', 869 + 'M4A', 870 + 'TXT', 871 + 'VTT', 872 + 'CSV', 873 + 'JSON', 874 + 'JPG' 875 + ])), 876 + download_url: v.optional(v.string()), 877 + status: v.optional(v.picklist([ 878 + 'completed' 879 + ])), 880 + recording_type: v.optional(v.picklist([ 881 + 'shared_screen_with_speaker_view(CC)', 882 + 'shared_screen_with_speaker_view', 883 + 'shared_screen_with_gallery_view', 884 + 'gallery_view', 885 + 'shared_screen', 886 + 'audio_only', 887 + 'audio_transcript', 888 + 'chat_file', 889 + 'active_speaker', 890 + 'host_video', 891 + 'audio_only_each_participant', 892 + 'cc_transcript', 893 + 'closed_caption', 894 + 'poll', 895 + 'timeline', 896 + 'thumbnail', 897 + 'chat_message' 898 + ])), 899 + user_id: v.optional(v.string()), 900 + user_key: v.optional(v.string()) 901 + }))), 902 + participant_video_files: v.optional(v.array(v.object({ 903 + id: v.optional(v.string()), 904 + recording_start: v.optional(v.string()), 905 + recording_end: v.optional(v.string()), 906 + file_name: v.optional(v.string()), 907 + file_path: v.optional(v.string()), 908 + file_type: v.optional(v.picklist([ 909 + 'MP4' 910 + ])), 911 + file_size: v.optional(v.number()), 912 + file_extension: v.optional(v.picklist([ 913 + 'MP4' 914 + ])), 915 + download_url: v.optional(v.string()), 916 + status: v.optional(v.picklist([ 917 + 'completed' 918 + ])), 919 + recording_type: v.optional(v.picklist([ 920 + 'individual_user', 921 + 'individual_shared_screen' 922 + ])), 923 + user_id: v.optional(v.string()), 924 + user_key: v.optional(v.string()) 925 + }))) 926 + }) 927 + }) 928 + })), 929 + path: v.optional(v.never()), 930 + query: v.optional(v.never()) 931 + }); 932 + 933 + export const vSessionRecordingTranscriptFailedWebhookRequest = v.object({ 934 + body: v.optional(v.object({ 935 + event: v.picklist([ 936 + 'session.recording_transcript_failed' 937 + ]), 938 + event_ts: v.pipe(v.union([ 939 + v.number(), 940 + v.string(), 941 + v.bigint() 942 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 943 + payload: v.object({ 944 + account_id: v.string(), 945 + object: v.object({ 946 + session_id: v.string(), 947 + session_name: v.string(), 948 + session_key: v.string(), 949 + start_time: v.pipe(v.string(), v.isoTimestamp()), 950 + timezone: v.string() 951 + }) 952 + }) 953 + })), 954 + path: v.optional(v.never()), 955 + query: v.optional(v.never()) 956 + }); 957 + 958 + export const vSessionRecordingTrashedWebhookRequest = v.object({ 959 + body: v.optional(v.object({ 960 + event: v.picklist([ 961 + 'session.recording_trashed' 962 + ]), 963 + event_ts: v.pipe(v.union([ 964 + v.number(), 965 + v.string(), 966 + v.bigint() 967 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 968 + payload: v.object({ 969 + account_id: v.string(), 970 + operator: v.pipe(v.string(), v.email()), 971 + operator_id: v.string(), 972 + object: v.object({ 973 + session_id: v.string(), 974 + session_name: v.string(), 975 + session_key: v.string(), 976 + start_time: v.pipe(v.string(), v.isoTimestamp()), 977 + timezone: v.string() 978 + }) 979 + }) 980 + })), 981 + path: v.optional(v.never()), 982 + query: v.optional(v.never()) 983 + }); 984 + 985 + export const vSessionUserJoinedWebhookRequest = v.object({ 986 + body: v.optional(v.object({ 987 + event: v.picklist([ 988 + 'session.user_joined' 989 + ]), 990 + event_ts: v.pipe(v.union([ 991 + v.number(), 992 + v.string(), 993 + v.bigint() 994 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 995 + payload: v.object({ 996 + account_id: v.string(), 997 + object: v.object({ 998 + id: v.string(), 999 + session_id: v.string(), 1000 + session_name: v.string(), 1001 + session_key: v.optional(v.string()), 1002 + user: v.object({ 1003 + id: v.string(), 1004 + name: v.string(), 1005 + join_time: v.pipe(v.string(), v.isoTimestamp()), 1006 + user_key: v.optional(v.string()), 1007 + phone_number: v.optional(v.string()), 1008 + participant_uuid: v.string() 1009 + }) 1010 + }) 1011 + }) 1012 + })), 1013 + path: v.optional(v.never()), 1014 + query: v.optional(v.never()) 1015 + }); 1016 + 1017 + export const vSessionStreamIngestionStartedWebhookRequest = v.object({ 1018 + body: v.optional(v.object({ 1019 + event: v.picklist([ 1020 + 'session.stream_ingestion_started' 1021 + ]), 1022 + event_ts: v.pipe(v.union([ 1023 + v.number(), 1024 + v.string(), 1025 + v.bigint() 1026 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1027 + payload: v.object({ 1028 + account_id: v.string(), 1029 + object: v.object({ 1030 + session_id: v.string(), 1031 + session_name: v.string(), 1032 + session_key: v.optional(v.string()), 1033 + stream_ingestion: v.object({ 1034 + stream_id: v.string(), 1035 + stream_name: v.string(), 1036 + stream_description: v.optional(v.string()), 1037 + stream_key: v.string(), 1038 + stream_url: v.string(), 1039 + backup_stream_url: v.string() 1040 + }) 1041 + }) 1042 + }) 1043 + })), 1044 + path: v.optional(v.never()), 1045 + query: v.optional(v.never()) 1046 + }); 1047 + 1048 + export const vSessionStreamIngestionConnectedWebhookRequest = v.object({ 1049 + body: v.optional(v.object({ 1050 + event: v.picklist([ 1051 + 'session.stream_ingestion_connected' 1052 + ]), 1053 + event_ts: v.pipe(v.union([ 1054 + v.number(), 1055 + v.string(), 1056 + v.bigint() 1057 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1058 + payload: v.object({ 1059 + account_id: v.string(), 1060 + object: v.object({ 1061 + session_id: v.string(), 1062 + session_name: v.string(), 1063 + session_key: v.optional(v.string()), 1064 + stream_ingestion: v.object({ 1065 + stream_id: v.string(), 1066 + stream_name: v.string(), 1067 + stream_description: v.optional(v.string()), 1068 + stream_key: v.string(), 1069 + stream_url: v.string(), 1070 + backup_stream_url: v.string() 1071 + }) 1072 + }) 1073 + }) 1074 + })), 1075 + path: v.optional(v.never()), 1076 + query: v.optional(v.never()) 1077 + }); 1078 + 1079 + export const vSessionStreamIngestionDisconnectedWebhookRequest = v.object({ 1080 + body: v.optional(v.object({ 1081 + event: v.picklist([ 1082 + 'session.stream_ingestion_disconnected' 1083 + ]), 1084 + event_ts: v.pipe(v.union([ 1085 + v.number(), 1086 + v.string(), 1087 + v.bigint() 1088 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1089 + payload: v.object({ 1090 + account_id: v.string(), 1091 + object: v.object({ 1092 + session_id: v.string(), 1093 + session_name: v.string(), 1094 + session_key: v.optional(v.string()), 1095 + stream_ingestion: v.object({ 1096 + stream_id: v.string(), 1097 + stream_name: v.string(), 1098 + stream_description: v.optional(v.string()), 1099 + stream_key: v.string(), 1100 + stream_url: v.string(), 1101 + backup_stream_url: v.string() 1102 + }) 1103 + }) 1104 + }) 1105 + })), 1106 + path: v.optional(v.never()), 1107 + query: v.optional(v.never()) 1108 + }); 1109 + 1110 + export const vSessionRecordingRecoveredWebhookRequest = v.object({ 1111 + body: v.optional(v.object({ 1112 + event: v.picklist([ 1113 + 'session.recording_recovered' 1114 + ]), 1115 + event_ts: v.pipe(v.union([ 1116 + v.number(), 1117 + v.string(), 1118 + v.bigint() 1119 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1120 + payload: v.object({ 1121 + account_id: v.string(), 1122 + operator: v.pipe(v.string(), v.email()), 1123 + operator_id: v.string(), 1124 + object: v.object({ 1125 + session_id: v.string(), 1126 + session_name: v.string(), 1127 + session_key: v.string(), 1128 + start_time: v.pipe(v.string(), v.isoTimestamp()), 1129 + timezone: v.string() 1130 + }) 1131 + }) 1132 + })), 1133 + path: v.optional(v.never()), 1134 + query: v.optional(v.never()) 1135 + }); 1136 + 1137 + export const vSessionUserPhoneCalloutMissedWebhookRequest = v.object({ 1138 + body: v.optional(v.object({ 1139 + event: v.string(), 1140 + event_ts: v.pipe(v.union([ 1141 + v.number(), 1142 + v.string(), 1143 + v.bigint() 1144 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1145 + payload: v.object({ 1146 + account_id: v.string(), 1147 + object: v.object({ 1148 + id: v.optional(v.pipe(v.union([ 1149 + v.number(), 1150 + v.string(), 1151 + v.bigint() 1152 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 1153 + uuid: v.optional(v.string()), 1154 + session_id: v.string(), 1155 + session_name: v.string(), 1156 + session_key: v.string(), 1157 + user_key: v.string(), 1158 + host_id: v.string(), 1159 + participant: v.object({ 1160 + invitee_name: v.string(), 1161 + phone_number: v.pipe(v.union([ 1162 + v.number(), 1163 + v.string(), 1164 + v.bigint() 1165 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1166 + from_number: v.pipe(v.union([ 1167 + v.number(), 1168 + v.string(), 1169 + v.bigint() 1170 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')) 1171 + }) 1172 + }) 1173 + }) 1174 + })), 1175 + path: v.optional(v.never()), 1176 + query: v.optional(v.never()) 1177 + }); 1178 + 1179 + export const vSessionUserPhoneCalloutRejectedWebhookRequest = v.object({ 1180 + body: v.optional(v.object({ 1181 + event: v.string(), 1182 + event_ts: v.pipe(v.union([ 1183 + v.number(), 1184 + v.string(), 1185 + v.bigint() 1186 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1187 + payload: v.object({ 1188 + account_id: v.string(), 1189 + object: v.object({ 1190 + id: v.optional(v.pipe(v.union([ 1191 + v.number(), 1192 + v.string(), 1193 + v.bigint() 1194 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 1195 + uuid: v.optional(v.string()), 1196 + session_id: v.string(), 1197 + session_name: v.string(), 1198 + session_key: v.string(), 1199 + user_key: v.string(), 1200 + host_id: v.string(), 1201 + participant: v.object({ 1202 + invitee_name: v.string(), 1203 + phone_number: v.pipe(v.union([ 1204 + v.number(), 1205 + v.string(), 1206 + v.bigint() 1207 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1208 + from_number: v.pipe(v.union([ 1209 + v.number(), 1210 + v.string(), 1211 + v.bigint() 1212 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')) 1213 + }) 1214 + }) 1215 + }) 1216 + })), 1217 + path: v.optional(v.never()), 1218 + query: v.optional(v.never()) 1219 + }); 1220 + 1221 + export const vSessionUserRoomSystemCalloutAcceptedWebhookRequest = v.object({ 1222 + body: v.optional(v.object({ 1223 + event: v.string(), 1224 + event_ts: v.pipe(v.union([ 1225 + v.number(), 1226 + v.string(), 1227 + v.bigint() 1228 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1229 + payload: v.object({ 1230 + account_id: v.string(), 1231 + object: v.object({ 1232 + id: v.optional(v.pipe(v.union([ 1233 + v.number(), 1234 + v.string(), 1235 + v.bigint() 1236 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1'))), 1237 + uuid: v.optional(v.string()), 1238 + session_id: v.string(), 1239 + session_name: v.string(), 1240 + host_id: v.string(), 1241 + message_id: v.string(), 1242 + inviter_name: v.string(), 1243 + participant: v.object({ 1244 + call_type: v.string(), 1245 + device_ip: v.string() 1246 + }) 1247 + }) 1248 + }) 1249 + })), 1250 + path: v.optional(v.never()), 1251 + query: v.optional(v.never()) 1252 + }); 1253 + 1254 + export const vSessionRecordingStoppedWebhookRequest = v.object({ 1255 + body: v.optional(v.object({ 1256 + event: v.picklist([ 1257 + 'session.recording_stopped' 1258 + ]), 1259 + event_ts: v.pipe(v.union([ 1260 + v.number(), 1261 + v.string(), 1262 + v.bigint() 1263 + ]), v.transform(x => BigInt(x)), v.minValue(BigInt('-9223372036854775808'), 'Invalid value: Expected int64 to be >= -2^63'), v.maxValue(BigInt('9223372036854775807'), 'Invalid value: Expected int64 to be <= 2^63-1')), 1264 + payload: v.object({ 1265 + account_id: v.string(), 1266 + object: v.object({ 1267 + session_id: v.string(), 1268 + session_name: v.string(), 1269 + session_key: v.string(), 1270 + start_time: v.pipe(v.string(), v.isoTimestamp()), 1271 + timezone: v.string(), 1272 + recording_file: v.object({ 1273 + recording_start: v.optional(v.string()), 1274 + recording_end: v.optional(v.string()) 1275 + }) 1276 + }) 1277 + }) 1278 + })), 1279 + path: v.optional(v.never()), 1280 + query: v.optional(v.never()) 1281 + });
+1069
packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/zod.gen.ts
··· 1 + // This file is auto-generated by @hey-api/openapi-ts 2 + 3 + import { z } from 'zod'; 4 + 5 + export const zSessionUserPhoneCalloutRingingWebhookRequest = z.object({ 6 + body: z.optional(z.object({ 7 + event: z.string(), 8 + event_ts: z.coerce.bigint(), 9 + payload: z.object({ 10 + account_id: z.string(), 11 + object: z.object({ 12 + id: z.optional(z.coerce.bigint()), 13 + uuid: z.optional(z.string()), 14 + session_id: z.string(), 15 + session_name: z.string(), 16 + session_key: z.string(), 17 + user_key: z.string(), 18 + host_id: z.string(), 19 + participant: z.object({ 20 + invitee_name: z.string(), 21 + phone_number: z.coerce.bigint(), 22 + from_number: z.coerce.bigint() 23 + }) 24 + }) 25 + }) 26 + })), 27 + path: z.optional(z.never()), 28 + query: z.optional(z.never()) 29 + }); 30 + 31 + export const zSessionUserRoomSystemCalloutRingingWebhookRequest = z.object({ 32 + body: z.optional(z.object({ 33 + event: z.string(), 34 + event_ts: z.coerce.bigint(), 35 + payload: z.object({ 36 + account_id: z.string(), 37 + object: z.object({ 38 + id: z.optional(z.coerce.bigint()), 39 + uuid: z.optional(z.string()), 40 + session_id: z.string(), 41 + session_name: z.string(), 42 + host_id: z.string(), 43 + message_id: z.string(), 44 + inviter_name: z.string(), 45 + participant: z.object({ 46 + call_type: z.string(), 47 + device_ip: z.string() 48 + }) 49 + }) 50 + }) 51 + })), 52 + path: z.optional(z.never()), 53 + query: z.optional(z.never()) 54 + }); 55 + 56 + export const zSessionRecordingStartedWebhookRequest = z.object({ 57 + body: z.optional(z.object({ 58 + event: z.enum([ 59 + 'session.recording_started' 60 + ]), 61 + event_ts: z.coerce.bigint(), 62 + payload: z.object({ 63 + account_id: z.string(), 64 + object: z.object({ 65 + session_id: z.string(), 66 + session_name: z.string(), 67 + session_key: z.string(), 68 + start_time: z.iso.datetime(), 69 + timezone: z.string(), 70 + recording_file: z.object({ 71 + recording_start: z.optional(z.string()), 72 + recording_end: z.optional(z.string()) 73 + }) 74 + }) 75 + }) 76 + })), 77 + path: z.optional(z.never()), 78 + query: z.optional(z.never()) 79 + }); 80 + 81 + export const zSessionRecordingResumedWebhookRequest = z.object({ 82 + body: z.optional(z.object({ 83 + event: z.enum([ 84 + 'session.recording_resumed' 85 + ]), 86 + event_ts: z.coerce.bigint(), 87 + payload: z.object({ 88 + account_id: z.string(), 89 + object: z.object({ 90 + session_id: z.string(), 91 + session_name: z.string(), 92 + session_key: z.string(), 93 + start_time: z.iso.datetime(), 94 + timezone: z.string(), 95 + recording_file: z.object({ 96 + recording_start: z.optional(z.string()), 97 + recording_end: z.optional(z.string()) 98 + }) 99 + }) 100 + }) 101 + })), 102 + path: z.optional(z.never()), 103 + query: z.optional(z.never()) 104 + }); 105 + 106 + export const zSessionLiveStreamingStoppedWebhookRequest = z.object({ 107 + body: z.optional(z.object({ 108 + event: z.enum([ 109 + 'session.live_streaming_stopped' 110 + ]), 111 + event_ts: z.coerce.bigint(), 112 + payload: z.object({ 113 + account_id: z.string(), 114 + object: z.object({ 115 + id: z.string(), 116 + session_id: z.string(), 117 + session_name: z.string(), 118 + session_key: z.optional(z.string()), 119 + start_time: z.iso.datetime(), 120 + live_streaming: z.object({ 121 + service: z.enum([ 122 + 'Facebook', 123 + 'Workplace_by_Facebook', 124 + 'YouTube', 125 + 'Custom_Live_Streaming_Service' 126 + ]), 127 + custom_live_streaming_settings: z.object({ 128 + stream_url: z.string(), 129 + stream_key: z.string(), 130 + page_url: z.string(), 131 + resolution: z.optional(z.string()) 132 + }), 133 + date_time: z.iso.datetime() 134 + }) 135 + }) 136 + }) 137 + })), 138 + path: z.optional(z.never()), 139 + query: z.optional(z.never()) 140 + }); 141 + 142 + export const zSessionStreamIngestionStoppedWebhookRequest = z.object({ 143 + body: z.optional(z.object({ 144 + event: z.enum([ 145 + 'session.stream_ingestion_stopped' 146 + ]), 147 + event_ts: z.coerce.bigint(), 148 + payload: z.object({ 149 + account_id: z.string(), 150 + object: z.object({ 151 + session_id: z.string(), 152 + session_name: z.string(), 153 + session_key: z.optional(z.string()), 154 + stream_ingestion: z.object({ 155 + stream_id: z.string(), 156 + stream_name: z.string(), 157 + stream_description: z.optional(z.string()), 158 + stream_key: z.string(), 159 + stream_url: z.string(), 160 + backup_stream_url: z.string() 161 + }) 162 + }) 163 + }) 164 + })), 165 + path: z.optional(z.never()), 166 + query: z.optional(z.never()) 167 + }); 168 + 169 + export const zSessionUserRoomSystemCalloutRejectedWebhookRequest = z.object({ 170 + body: z.optional(z.object({ 171 + event: z.string(), 172 + event_ts: z.coerce.bigint(), 173 + payload: z.object({ 174 + account_id: z.string(), 175 + object: z.object({ 176 + id: z.optional(z.coerce.bigint()), 177 + uuid: z.optional(z.string()), 178 + session_id: z.string(), 179 + session_name: z.string(), 180 + host_id: z.string(), 181 + message_id: z.string(), 182 + inviter_name: z.string(), 183 + participant: z.object({ 184 + call_type: z.string(), 185 + device_ip: z.string() 186 + }) 187 + }) 188 + }) 189 + })), 190 + path: z.optional(z.never()), 191 + query: z.optional(z.never()) 192 + }); 193 + 194 + export const zSessionAlertWebhookRequest = z.object({ 195 + body: z.optional(z.object({ 196 + event: z.enum([ 197 + 'session.alert' 198 + ]), 199 + event_ts: z.coerce.bigint(), 200 + payload: z.object({ 201 + account_id: z.string(), 202 + object: z.object({ 203 + id: z.string(), 204 + session_id: z.string(), 205 + session_name: z.string(), 206 + session_key: z.optional(z.string()), 207 + issues: z.array(z.enum([ 208 + 'Unstable audio quality', 209 + 'Unstable video quality', 210 + 'Unstable screen share quality', 211 + 'High CPU occupation', 212 + 'Call Reconnection' 213 + ])) 214 + }) 215 + }) 216 + })), 217 + path: z.optional(z.never()), 218 + query: z.optional(z.never()) 219 + }); 220 + 221 + export const zSessionSharingEndedWebhookRequest = z.object({ 222 + body: z.optional(z.object({ 223 + event: z.enum([ 224 + 'session.sharing_ended' 225 + ]), 226 + event_ts: z.coerce.bigint(), 227 + payload: z.object({ 228 + account_id: z.string(), 229 + object: z.object({ 230 + id: z.string(), 231 + session_id: z.string(), 232 + session_name: z.string(), 233 + session_key: z.optional(z.string()), 234 + user: z.object({ 235 + id: z.string(), 236 + name: z.string(), 237 + user_key: z.optional(z.string()), 238 + sharing_details: z.object({ 239 + content: z.enum([ 240 + 'application', 241 + 'whiteboard', 242 + 'desktop', 243 + 'unknown' 244 + ]), 245 + date_time: z.iso.datetime() 246 + }) 247 + }) 248 + }) 249 + }) 250 + })), 251 + path: z.optional(z.never()), 252 + query: z.optional(z.never()) 253 + }); 254 + 255 + export const zSessionRecordingPausedWebhookRequest = z.object({ 256 + body: z.optional(z.object({ 257 + event: z.enum([ 258 + 'session.recording_paused' 259 + ]), 260 + event_ts: z.coerce.bigint(), 261 + payload: z.object({ 262 + account_id: z.string(), 263 + object: z.object({ 264 + session_id: z.string(), 265 + session_name: z.string(), 266 + session_key: z.string(), 267 + start_time: z.iso.datetime(), 268 + timezone: z.string(), 269 + recording_file: z.object({ 270 + recording_start: z.optional(z.string()), 271 + recording_end: z.optional(z.string()) 272 + }) 273 + }) 274 + }) 275 + })), 276 + path: z.optional(z.never()), 277 + query: z.optional(z.never()) 278 + }); 279 + 280 + export const zSessionEndedWebhookRequest = z.object({ 281 + body: z.optional(z.object({ 282 + event: z.enum([ 283 + 'session.ended' 284 + ]), 285 + event_ts: z.coerce.bigint(), 286 + payload: z.object({ 287 + account_id: z.string(), 288 + object: z.object({ 289 + id: z.string(), 290 + session_id: z.string(), 291 + session_name: z.string(), 292 + session_key: z.optional(z.string()), 293 + start_time: z.iso.datetime(), 294 + end_time: z.iso.datetime() 295 + }) 296 + }) 297 + })), 298 + path: z.optional(z.never()), 299 + query: z.optional(z.never()) 300 + }); 301 + 302 + export const zSessionStartedWebhookRequest = z.object({ 303 + body: z.optional(z.object({ 304 + event: z.enum([ 305 + 'session.started' 306 + ]), 307 + event_ts: z.coerce.bigint(), 308 + payload: z.object({ 309 + account_id: z.string(), 310 + object: z.object({ 311 + id: z.string(), 312 + session_id: z.string(), 313 + session_name: z.string(), 314 + session_key: z.optional(z.string()), 315 + start_time: z.iso.datetime() 316 + }) 317 + }) 318 + })), 319 + path: z.optional(z.never()), 320 + query: z.optional(z.never()) 321 + }); 322 + 323 + export const zSessionStreamIngestionUnbindWebhookRequest = z.object({ 324 + body: z.optional(z.object({ 325 + event: z.enum([ 326 + 'session.stream_ingestion_unbind' 327 + ]), 328 + event_ts: z.coerce.bigint(), 329 + payload: z.object({ 330 + account_id: z.string(), 331 + object: z.object({ 332 + session_id: z.string(), 333 + session_name: z.string(), 334 + session_key: z.optional(z.string()), 335 + stream_ingestion: z.object({ 336 + stream_id: z.string(), 337 + stream_name: z.string(), 338 + stream_description: z.optional(z.string()), 339 + stream_key: z.string(), 340 + stream_url: z.string(), 341 + backup_stream_url: z.string() 342 + }) 343 + }) 344 + }) 345 + })), 346 + path: z.optional(z.never()), 347 + query: z.optional(z.never()) 348 + }); 349 + 350 + export const zSessionLiveStreamingStartedWebhookRequest = z.object({ 351 + body: z.optional(z.object({ 352 + event: z.enum([ 353 + 'session.live_streaming_started' 354 + ]), 355 + event_ts: z.coerce.bigint(), 356 + payload: z.object({ 357 + account_id: z.string(), 358 + object: z.object({ 359 + id: z.string(), 360 + session_id: z.string(), 361 + session_name: z.string(), 362 + session_key: z.optional(z.string()), 363 + start_time: z.iso.datetime(), 364 + live_streaming: z.object({ 365 + service: z.enum([ 366 + 'Facebook', 367 + 'Workplace_by_Facebook', 368 + 'YouTube', 369 + 'Custom_Live_Streaming_Service' 370 + ]), 371 + custom_live_streaming_settings: z.object({ 372 + stream_url: z.string(), 373 + stream_key: z.string(), 374 + page_url: z.string(), 375 + resolution: z.optional(z.string()) 376 + }), 377 + date_time: z.iso.datetime() 378 + }) 379 + }) 380 + }) 381 + })), 382 + path: z.optional(z.never()), 383 + query: z.optional(z.never()) 384 + }); 385 + 386 + export const zSessionUserRoomSystemCalloutMissedWebhookRequest = z.object({ 387 + body: z.optional(z.object({ 388 + event: z.string(), 389 + event_ts: z.coerce.bigint(), 390 + payload: z.object({ 391 + account_id: z.string(), 392 + object: z.object({ 393 + id: z.optional(z.coerce.bigint()), 394 + uuid: z.optional(z.string()), 395 + session_id: z.string(), 396 + session_name: z.string(), 397 + host_id: z.string(), 398 + message_id: z.string(), 399 + inviter_name: z.string(), 400 + participant: z.object({ 401 + call_type: z.string(), 402 + device_ip: z.string() 403 + }) 404 + }) 405 + }) 406 + })), 407 + path: z.optional(z.never()), 408 + query: z.optional(z.never()) 409 + }); 410 + 411 + export const zSessionUserPhoneCalloutAcceptedWebhookRequest = z.object({ 412 + body: z.optional(z.object({ 413 + event: z.string(), 414 + event_ts: z.coerce.bigint(), 415 + payload: z.object({ 416 + account_id: z.string(), 417 + object: z.object({ 418 + id: z.optional(z.coerce.bigint()), 419 + uuid: z.optional(z.string()), 420 + session_id: z.string(), 421 + session_name: z.string(), 422 + session_key: z.string(), 423 + user_key: z.string(), 424 + host_id: z.string(), 425 + participant: z.object({ 426 + invitee_name: z.string(), 427 + phone_number: z.coerce.bigint(), 428 + from_number: z.coerce.bigint() 429 + }) 430 + }) 431 + }) 432 + })), 433 + path: z.optional(z.never()), 434 + query: z.optional(z.never()) 435 + }); 436 + 437 + export const zSessionUserLeftWebhookRequest = z.object({ 438 + body: z.optional(z.object({ 439 + event: z.enum([ 440 + 'session.user_left' 441 + ]), 442 + event_ts: z.coerce.bigint(), 443 + payload: z.object({ 444 + account_id: z.string(), 445 + object: z.object({ 446 + id: z.string(), 447 + session_id: z.string(), 448 + session_name: z.string(), 449 + session_key: z.optional(z.string()), 450 + user: z.object({ 451 + id: z.string(), 452 + name: z.string(), 453 + leave_time: z.iso.datetime(), 454 + leave_reason: z.optional(z.string()), 455 + user_key: z.optional(z.string()), 456 + phone_number: z.optional(z.string()), 457 + participant_uuid: z.string() 458 + }) 459 + }) 460 + }) 461 + })), 462 + path: z.optional(z.never()), 463 + query: z.optional(z.never()) 464 + }); 465 + 466 + export const zSessionSharingStartedWebhookRequest = z.object({ 467 + body: z.optional(z.object({ 468 + event: z.enum([ 469 + 'session.sharing_started' 470 + ]), 471 + event_ts: z.coerce.bigint(), 472 + payload: z.object({ 473 + account_id: z.string(), 474 + object: z.object({ 475 + id: z.string(), 476 + session_id: z.string(), 477 + session_name: z.string(), 478 + session_key: z.optional(z.string()), 479 + user: z.object({ 480 + id: z.string(), 481 + name: z.string(), 482 + user_key: z.optional(z.string()), 483 + sharing_details: z.object({ 484 + content: z.enum([ 485 + 'application', 486 + 'whiteboard', 487 + 'desktop', 488 + 'unknown' 489 + ]), 490 + date_time: z.iso.datetime() 491 + }) 492 + }) 493 + }) 494 + }) 495 + })), 496 + path: z.optional(z.never()), 497 + query: z.optional(z.never()) 498 + }); 499 + 500 + export const zSessionUserPhoneCalloutCanceledWebhookRequest = z.object({ 501 + body: z.optional(z.object({ 502 + event: z.string(), 503 + event_ts: z.coerce.bigint(), 504 + payload: z.object({ 505 + account_id: z.string(), 506 + object: z.object({ 507 + session_id: z.string(), 508 + session_name: z.string(), 509 + session_key: z.string(), 510 + user_key: z.string(), 511 + participant: z.object({ 512 + invitee_name: z.string(), 513 + phone_number: z.coerce.bigint(), 514 + from_number: z.coerce.bigint() 515 + }) 516 + }) 517 + }) 518 + })), 519 + path: z.optional(z.never()), 520 + query: z.optional(z.never()) 521 + }); 522 + 523 + export const zSessionRecordingTranscriptCompletedWebhookRequest = z.object({ 524 + body: z.optional(z.object({ 525 + event: z.enum([ 526 + 'session.recording_transcript_completed' 527 + ]), 528 + event_ts: z.coerce.bigint(), 529 + download_token: z.string(), 530 + payload: z.object({ 531 + account_id: z.string(), 532 + object: z.object({ 533 + session_id: z.string(), 534 + session_name: z.string(), 535 + session_key: z.string(), 536 + start_time: z.iso.datetime(), 537 + timezone: z.string(), 538 + recording_files: z.array(z.object({ 539 + id: z.optional(z.string()), 540 + recording_start: z.optional(z.string()), 541 + recording_end: z.optional(z.string()), 542 + file_name: z.optional(z.string()), 543 + file_path: z.optional(z.string()), 544 + file_type: z.optional(z.enum([ 545 + 'MP4', 546 + 'M4A', 547 + 'CHAT', 548 + 'TRANSCRIPT', 549 + 'CSV', 550 + 'CC', 551 + 'TB', 552 + 'CHAT_MESSAGE', 553 + 'TIMELINE' 554 + ])), 555 + file_size: z.optional(z.number()), 556 + file_extension: z.optional(z.enum([ 557 + 'MP4', 558 + 'M4A', 559 + 'TXT', 560 + 'VTT', 561 + 'CSV', 562 + 'JSON', 563 + 'JPG' 564 + ])), 565 + download_url: z.optional(z.string()), 566 + status: z.optional(z.enum([ 567 + 'completed' 568 + ])), 569 + recording_type: z.optional(z.enum([ 570 + 'shared_screen_with_speaker_view(CC)', 571 + 'shared_screen_with_speaker_view', 572 + 'shared_screen_with_gallery_view', 573 + 'gallery_view', 574 + 'shared_screen', 575 + 'audio_only', 576 + 'audio_transcript', 577 + 'chat_file', 578 + 'active_speaker', 579 + 'host_video', 580 + 'audio_only_each_participant', 581 + 'cc_transcript', 582 + 'closed_caption', 583 + 'poll', 584 + 'timeline', 585 + 'thumbnail', 586 + 'chat_message' 587 + ])) 588 + })) 589 + }) 590 + }) 591 + })), 592 + path: z.optional(z.never()), 593 + query: z.optional(z.never()) 594 + }); 595 + 596 + export const zSessionRecordingDeletedWebhookRequest = z.object({ 597 + body: z.optional(z.object({ 598 + event: z.enum([ 599 + 'session.recording_deleted' 600 + ]), 601 + event_ts: z.coerce.bigint(), 602 + payload: z.object({ 603 + account_id: z.string(), 604 + operator: z.email(), 605 + operator_id: z.string(), 606 + object: z.object({ 607 + session_id: z.string(), 608 + session_name: z.string(), 609 + session_key: z.string(), 610 + start_time: z.iso.datetime(), 611 + timezone: z.string() 612 + }) 613 + }) 614 + })), 615 + path: z.optional(z.never()), 616 + query: z.optional(z.never()) 617 + }); 618 + 619 + export const zSessionUserRoomSystemCalloutFailedWebhookRequest = z.object({ 620 + body: z.optional(z.object({ 621 + event: z.string(), 622 + event_ts: z.coerce.bigint(), 623 + payload: z.object({ 624 + account_id: z.string(), 625 + object: z.object({ 626 + id: z.optional(z.coerce.bigint()), 627 + uuid: z.optional(z.string()), 628 + session_id: z.string(), 629 + session_name: z.string(), 630 + host_id: z.string(), 631 + message_id: z.string(), 632 + inviter_name: z.string(), 633 + reason_type: z.unknown(), 634 + participant: z.object({ 635 + call_type: z.string(), 636 + device_ip: z.string() 637 + }) 638 + }) 639 + }) 640 + })), 641 + path: z.optional(z.never()), 642 + query: z.optional(z.never()) 643 + }); 644 + 645 + export const zSessionRecordingCompletedWebhookRequest = z.object({ 646 + body: z.optional(z.object({ 647 + event: z.enum([ 648 + 'session.recording_completed' 649 + ]), 650 + event_ts: z.coerce.bigint(), 651 + download_token: z.string(), 652 + payload: z.object({ 653 + account_id: z.string(), 654 + object: z.object({ 655 + session_id: z.string(), 656 + session_name: z.string(), 657 + session_key: z.string(), 658 + start_time: z.iso.datetime(), 659 + timezone: z.string(), 660 + recording_files: z.array(z.object({ 661 + id: z.optional(z.string()), 662 + recording_start: z.optional(z.string()), 663 + recording_end: z.optional(z.string()), 664 + file_name: z.optional(z.string()), 665 + file_path: z.optional(z.string()), 666 + file_type: z.optional(z.enum([ 667 + 'MP4', 668 + 'M4A', 669 + 'CHAT', 670 + 'TRANSCRIPT', 671 + 'CSV', 672 + 'CC', 673 + 'TB', 674 + 'CHAT_MESSAGE' 675 + ])), 676 + file_size: z.optional(z.number()), 677 + file_extension: z.optional(z.enum([ 678 + 'MP4', 679 + 'M4A', 680 + 'TXT', 681 + 'VTT', 682 + 'CSV', 683 + 'JSON', 684 + 'JPG' 685 + ])), 686 + download_url: z.optional(z.string()), 687 + status: z.optional(z.enum([ 688 + 'completed' 689 + ])), 690 + recording_type: z.optional(z.enum([ 691 + 'shared_screen_with_speaker_view(CC)', 692 + 'shared_screen_with_speaker_view', 693 + 'shared_screen_with_gallery_view', 694 + 'gallery_view', 695 + 'shared_screen', 696 + 'audio_only', 697 + 'audio_transcript', 698 + 'chat_file', 699 + 'active_speaker', 700 + 'host_video', 701 + 'audio_only_each_participant', 702 + 'cc_transcript', 703 + 'closed_caption', 704 + 'poll', 705 + 'timeline', 706 + 'thumbnail', 707 + 'chat_message' 708 + ])) 709 + })), 710 + participant_audio_files: z.optional(z.array(z.object({ 711 + id: z.optional(z.string()), 712 + recording_start: z.optional(z.string()), 713 + recording_end: z.optional(z.string()), 714 + file_name: z.optional(z.string()), 715 + file_path: z.optional(z.string()), 716 + file_type: z.optional(z.enum([ 717 + 'MP4', 718 + 'M4A', 719 + 'CHAT', 720 + 'TRANSCRIPT', 721 + 'CSV', 722 + 'CC', 723 + 'TB', 724 + 'CHAT_MESSAGE' 725 + ])), 726 + file_size: z.optional(z.number()), 727 + file_extension: z.optional(z.enum([ 728 + 'MP4', 729 + 'M4A', 730 + 'TXT', 731 + 'VTT', 732 + 'CSV', 733 + 'JSON', 734 + 'JPG' 735 + ])), 736 + download_url: z.optional(z.string()), 737 + status: z.optional(z.enum([ 738 + 'completed' 739 + ])), 740 + recording_type: z.optional(z.enum([ 741 + 'shared_screen_with_speaker_view(CC)', 742 + 'shared_screen_with_speaker_view', 743 + 'shared_screen_with_gallery_view', 744 + 'gallery_view', 745 + 'shared_screen', 746 + 'audio_only', 747 + 'audio_transcript', 748 + 'chat_file', 749 + 'active_speaker', 750 + 'host_video', 751 + 'audio_only_each_participant', 752 + 'cc_transcript', 753 + 'closed_caption', 754 + 'poll', 755 + 'timeline', 756 + 'thumbnail', 757 + 'chat_message' 758 + ])), 759 + user_id: z.optional(z.string()), 760 + user_key: z.optional(z.string()) 761 + }))), 762 + participant_video_files: z.optional(z.array(z.object({ 763 + id: z.optional(z.string()), 764 + recording_start: z.optional(z.string()), 765 + recording_end: z.optional(z.string()), 766 + file_name: z.optional(z.string()), 767 + file_path: z.optional(z.string()), 768 + file_type: z.optional(z.enum([ 769 + 'MP4' 770 + ])), 771 + file_size: z.optional(z.number()), 772 + file_extension: z.optional(z.enum([ 773 + 'MP4' 774 + ])), 775 + download_url: z.optional(z.string()), 776 + status: z.optional(z.enum([ 777 + 'completed' 778 + ])), 779 + recording_type: z.optional(z.enum([ 780 + 'individual_user', 781 + 'individual_shared_screen' 782 + ])), 783 + user_id: z.optional(z.string()), 784 + user_key: z.optional(z.string()) 785 + }))) 786 + }) 787 + }) 788 + })), 789 + path: z.optional(z.never()), 790 + query: z.optional(z.never()) 791 + }); 792 + 793 + export const zSessionRecordingTranscriptFailedWebhookRequest = z.object({ 794 + body: z.optional(z.object({ 795 + event: z.enum([ 796 + 'session.recording_transcript_failed' 797 + ]), 798 + event_ts: z.coerce.bigint(), 799 + payload: z.object({ 800 + account_id: z.string(), 801 + object: z.object({ 802 + session_id: z.string(), 803 + session_name: z.string(), 804 + session_key: z.string(), 805 + start_time: z.iso.datetime(), 806 + timezone: z.string() 807 + }) 808 + }) 809 + })), 810 + path: z.optional(z.never()), 811 + query: z.optional(z.never()) 812 + }); 813 + 814 + export const zSessionRecordingTrashedWebhookRequest = z.object({ 815 + body: z.optional(z.object({ 816 + event: z.enum([ 817 + 'session.recording_trashed' 818 + ]), 819 + event_ts: z.coerce.bigint(), 820 + payload: z.object({ 821 + account_id: z.string(), 822 + operator: z.email(), 823 + operator_id: z.string(), 824 + object: z.object({ 825 + session_id: z.string(), 826 + session_name: z.string(), 827 + session_key: z.string(), 828 + start_time: z.iso.datetime(), 829 + timezone: z.string() 830 + }) 831 + }) 832 + })), 833 + path: z.optional(z.never()), 834 + query: z.optional(z.never()) 835 + }); 836 + 837 + export const zSessionUserJoinedWebhookRequest = z.object({ 838 + body: z.optional(z.object({ 839 + event: z.enum([ 840 + 'session.user_joined' 841 + ]), 842 + event_ts: z.coerce.bigint(), 843 + payload: z.object({ 844 + account_id: z.string(), 845 + object: z.object({ 846 + id: z.string(), 847 + session_id: z.string(), 848 + session_name: z.string(), 849 + session_key: z.optional(z.string()), 850 + user: z.object({ 851 + id: z.string(), 852 + name: z.string(), 853 + join_time: z.iso.datetime(), 854 + user_key: z.optional(z.string()), 855 + phone_number: z.optional(z.string()), 856 + participant_uuid: z.string() 857 + }) 858 + }) 859 + }) 860 + })), 861 + path: z.optional(z.never()), 862 + query: z.optional(z.never()) 863 + }); 864 + 865 + export const zSessionStreamIngestionStartedWebhookRequest = z.object({ 866 + body: z.optional(z.object({ 867 + event: z.enum([ 868 + 'session.stream_ingestion_started' 869 + ]), 870 + event_ts: z.coerce.bigint(), 871 + payload: z.object({ 872 + account_id: z.string(), 873 + object: z.object({ 874 + session_id: z.string(), 875 + session_name: z.string(), 876 + session_key: z.optional(z.string()), 877 + stream_ingestion: z.object({ 878 + stream_id: z.string(), 879 + stream_name: z.string(), 880 + stream_description: z.optional(z.string()), 881 + stream_key: z.string(), 882 + stream_url: z.string(), 883 + backup_stream_url: z.string() 884 + }) 885 + }) 886 + }) 887 + })), 888 + path: z.optional(z.never()), 889 + query: z.optional(z.never()) 890 + }); 891 + 892 + export const zSessionStreamIngestionConnectedWebhookRequest = z.object({ 893 + body: z.optional(z.object({ 894 + event: z.enum([ 895 + 'session.stream_ingestion_connected' 896 + ]), 897 + event_ts: z.coerce.bigint(), 898 + payload: z.object({ 899 + account_id: z.string(), 900 + object: z.object({ 901 + session_id: z.string(), 902 + session_name: z.string(), 903 + session_key: z.optional(z.string()), 904 + stream_ingestion: z.object({ 905 + stream_id: z.string(), 906 + stream_name: z.string(), 907 + stream_description: z.optional(z.string()), 908 + stream_key: z.string(), 909 + stream_url: z.string(), 910 + backup_stream_url: z.string() 911 + }) 912 + }) 913 + }) 914 + })), 915 + path: z.optional(z.never()), 916 + query: z.optional(z.never()) 917 + }); 918 + 919 + export const zSessionStreamIngestionDisconnectedWebhookRequest = z.object({ 920 + body: z.optional(z.object({ 921 + event: z.enum([ 922 + 'session.stream_ingestion_disconnected' 923 + ]), 924 + event_ts: z.coerce.bigint(), 925 + payload: z.object({ 926 + account_id: z.string(), 927 + object: z.object({ 928 + session_id: z.string(), 929 + session_name: z.string(), 930 + session_key: z.optional(z.string()), 931 + stream_ingestion: z.object({ 932 + stream_id: z.string(), 933 + stream_name: z.string(), 934 + stream_description: z.optional(z.string()), 935 + stream_key: z.string(), 936 + stream_url: z.string(), 937 + backup_stream_url: z.string() 938 + }) 939 + }) 940 + }) 941 + })), 942 + path: z.optional(z.never()), 943 + query: z.optional(z.never()) 944 + }); 945 + 946 + export const zSessionRecordingRecoveredWebhookRequest = z.object({ 947 + body: z.optional(z.object({ 948 + event: z.enum([ 949 + 'session.recording_recovered' 950 + ]), 951 + event_ts: z.coerce.bigint(), 952 + payload: z.object({ 953 + account_id: z.string(), 954 + operator: z.email(), 955 + operator_id: z.string(), 956 + object: z.object({ 957 + session_id: z.string(), 958 + session_name: z.string(), 959 + session_key: z.string(), 960 + start_time: z.iso.datetime(), 961 + timezone: z.string() 962 + }) 963 + }) 964 + })), 965 + path: z.optional(z.never()), 966 + query: z.optional(z.never()) 967 + }); 968 + 969 + export const zSessionUserPhoneCalloutMissedWebhookRequest = z.object({ 970 + body: z.optional(z.object({ 971 + event: z.string(), 972 + event_ts: z.coerce.bigint(), 973 + payload: z.object({ 974 + account_id: z.string(), 975 + object: z.object({ 976 + id: z.optional(z.coerce.bigint()), 977 + uuid: z.optional(z.string()), 978 + session_id: z.string(), 979 + session_name: z.string(), 980 + session_key: z.string(), 981 + user_key: z.string(), 982 + host_id: z.string(), 983 + participant: z.object({ 984 + invitee_name: z.string(), 985 + phone_number: z.coerce.bigint(), 986 + from_number: z.coerce.bigint() 987 + }) 988 + }) 989 + }) 990 + })), 991 + path: z.optional(z.never()), 992 + query: z.optional(z.never()) 993 + }); 994 + 995 + export const zSessionUserPhoneCalloutRejectedWebhookRequest = z.object({ 996 + body: z.optional(z.object({ 997 + event: z.string(), 998 + event_ts: z.coerce.bigint(), 999 + payload: z.object({ 1000 + account_id: z.string(), 1001 + object: z.object({ 1002 + id: z.optional(z.coerce.bigint()), 1003 + uuid: z.optional(z.string()), 1004 + session_id: z.string(), 1005 + session_name: z.string(), 1006 + session_key: z.string(), 1007 + user_key: z.string(), 1008 + host_id: z.string(), 1009 + participant: z.object({ 1010 + invitee_name: z.string(), 1011 + phone_number: z.coerce.bigint(), 1012 + from_number: z.coerce.bigint() 1013 + }) 1014 + }) 1015 + }) 1016 + })), 1017 + path: z.optional(z.never()), 1018 + query: z.optional(z.never()) 1019 + }); 1020 + 1021 + export const zSessionUserRoomSystemCalloutAcceptedWebhookRequest = z.object({ 1022 + body: z.optional(z.object({ 1023 + event: z.string(), 1024 + event_ts: z.coerce.bigint(), 1025 + payload: z.object({ 1026 + account_id: z.string(), 1027 + object: z.object({ 1028 + id: z.optional(z.coerce.bigint()), 1029 + uuid: z.optional(z.string()), 1030 + session_id: z.string(), 1031 + session_name: z.string(), 1032 + host_id: z.string(), 1033 + message_id: z.string(), 1034 + inviter_name: z.string(), 1035 + participant: z.object({ 1036 + call_type: z.string(), 1037 + device_ip: z.string() 1038 + }) 1039 + }) 1040 + }) 1041 + })), 1042 + path: z.optional(z.never()), 1043 + query: z.optional(z.never()) 1044 + }); 1045 + 1046 + export const zSessionRecordingStoppedWebhookRequest = z.object({ 1047 + body: z.optional(z.object({ 1048 + event: z.enum([ 1049 + 'session.recording_stopped' 1050 + ]), 1051 + event_ts: z.coerce.bigint(), 1052 + payload: z.object({ 1053 + account_id: z.string(), 1054 + object: z.object({ 1055 + session_id: z.string(), 1056 + session_name: z.string(), 1057 + session_key: z.string(), 1058 + start_time: z.iso.datetime(), 1059 + timezone: z.string(), 1060 + recording_file: z.object({ 1061 + recording_start: z.optional(z.string()), 1062 + recording_end: z.optional(z.string()) 1063 + }) 1064 + }) 1065 + }) 1066 + })), 1067 + path: z.optional(z.never()), 1068 + query: z.optional(z.never()) 1069 + });
+10 -3
packages/openapi-ts-tests/main/test/openapi-ts.config.ts
··· 37 37 // 'invalid', 38 38 // 'openai.yaml', 39 39 // 'full.yaml', 40 - 'opencode.yaml', 41 - // 'validators-circular-ref.json', 40 + // 'opencode.yaml', 41 + 'zoom-video-sdk.json', 42 42 ), 43 43 // https://registry.scalar.com/@lubos-heyapi-dev-team/apis/demo-api-scalar-galaxy/latest?format=json 44 44 // path: 'scalar:@lubos-heyapi-dev-team/demo-api-scalar-galaxy', ··· 145 145 // error: '他們_error_{{name}}', 146 146 // name: '你們_errors_{{name}}', 147 147 // }, 148 - // name: '@hey-api/typescript', 148 + name: '@hey-api/typescript', 149 149 // requests: '我們_data_{{name}}', 150 150 // responses: { 151 151 // name: '我_responses_{{name}}', 152 152 // response: '他_response_{{name}}', 153 153 // }, 154 154 // tree: true, 155 + webhooks: { 156 + name: 'Webby{{name}}Hook', 157 + payload: '{{name}}WebhookEvent', 158 + }, 155 159 }, 156 160 { 157 161 // asClass: true, ··· 216 220 responses: { 217 221 // case: 'snake_case', 218 222 name: 'z{{name}}TestResponse', 223 + }, 224 + webhooks: { 225 + name: 'q{{name}}CoolWebhook', 219 226 }, 220 227 }, 221 228 {
+7776
packages/openapi-ts-tests/specs/3.1.x/zoom-video-sdk.json
··· 1 + { 2 + "openapi": "3.1.0", 3 + "info": { 4 + "title": "Video SDK", 5 + "description": "**Subscribe to webhook events** \n\nOn your [Video SDK account page on the App Marketplace](/docs/video-sdk/developer-accounts/), under **Add feature**, toggle **Event Subscriptions** to subscribe to events [using webhooks](/docs/api/rest/webhook-reference/).\n\n Configure webhooks to send [Video SDK events](/docs/video-sdk/webhooks/) to your server as HTTP POST requests. This is useful for tracking events or building out business logic. For example, when you receive a Video SDK session ended webhook, you could kick off an email to thank the participants for joining. \n\nSee [Make API requests](/docs/video-sdk/api-request/) for details or our [webhook sample code (Node.js)](https://github.com/zoom/webhook-sample).", 6 + "version": "1.0.0" 7 + }, 8 + "webhooks": { 9 + "session.user_phone_callout_ringing": { 10 + "post": { 11 + "tags": ["session"], 12 + "operationId": "session.user_phone_callout_ringing", 13 + "requestBody": { 14 + "description": "# session.user_phone_callout_ringing\n\nThe **Invited party's phone (call out) ringing** event is triggered every time a user's phone is ringing when they were invited to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Invited party's phone (call out) ringing** subscription enabled under the **Session** event.\n\n\n\n\n**Event type**: `session.user_phone_callout_ringing`\n", 15 + "content": { 16 + "application/json": { 17 + "schema": { 18 + "type": "object", 19 + "required": ["event", "event_ts", "payload"], 20 + "properties": { 21 + "event": { 22 + "type": "string", 23 + "description": "The name of the event." 24 + }, 25 + "event_ts": { 26 + "type": "integer", 27 + "format": "int64", 28 + "description": "A timestamp at which the event occurred." 29 + }, 30 + "payload": { 31 + "type": "object", 32 + "required": ["account_id", "object"], 33 + "properties": { 34 + "account_id": { 35 + "type": "string", 36 + "description": "The account ID of the session host." 37 + }, 38 + "object": { 39 + "type": "object", 40 + "description": "Information about the session.", 41 + "required": [ 42 + "session_id", 43 + "session_name", 44 + "session_key", 45 + "user_key", 46 + "host_id", 47 + "participant" 48 + ], 49 + "properties": { 50 + "id": { 51 + "type": "integer", 52 + "format": "int64", 53 + "description": "The session ID.", 54 + "deprecated": true 55 + }, 56 + "uuid": { 57 + "type": "string", 58 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 59 + "deprecated": true 60 + }, 61 + "session_id": { 62 + "type": "string", 63 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 64 + }, 65 + "session_name": { 66 + "type": "string", 67 + "description": "Session name." 68 + }, 69 + "session_key": { 70 + "type": "string", 71 + "description": "The Video SDK custom session ID." 72 + }, 73 + "user_key": { 74 + "type": "string", 75 + "description": "Another identifier for the inviter. Can be a number or characters." 76 + }, 77 + "host_id": { 78 + "type": "string", 79 + "description": "The user ID of the session host." 80 + }, 81 + "participant": { 82 + "type": "object", 83 + "description": "Information about the invited user.", 84 + "required": [ 85 + "invitee_name", 86 + "phone_number", 87 + "from_number" 88 + ], 89 + "properties": { 90 + "invitee_name": { 91 + "type": "string", 92 + "description": "The user's name to display in the session." 93 + }, 94 + "phone_number": { 95 + "type": "integer", 96 + "format": "int64", 97 + "description": "The user's phone number." 98 + }, 99 + "from_number": { 100 + "type": "integer", 101 + "format": "int64", 102 + "description": "The number used to call out to the invited user." 103 + } 104 + }, 105 + "additionalProperties": false 106 + } 107 + }, 108 + "additionalProperties": false 109 + } 110 + }, 111 + "additionalProperties": false 112 + } 113 + }, 114 + "additionalProperties": false 115 + }, 116 + "examples": { 117 + "json-example": { 118 + "summary": "JSON example", 119 + "value": "{\n \"event\": \"session.user_phone_callout_ringing\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 120 + } 121 + } 122 + } 123 + } 124 + }, 125 + "responses": { 126 + "200": { 127 + "content": { 128 + "application/json": { 129 + "schema": { 130 + "type": "object", 131 + "required": ["event", "event_ts", "payload"], 132 + "properties": { 133 + "event": { 134 + "type": "string", 135 + "description": "The name of the event." 136 + }, 137 + "event_ts": { 138 + "type": "integer", 139 + "format": "int64", 140 + "description": "A timestamp at which the event occurred." 141 + }, 142 + "payload": { 143 + "type": "object", 144 + "required": ["account_id", "object"], 145 + "properties": { 146 + "account_id": { 147 + "type": "string", 148 + "description": "The account ID of the session host." 149 + }, 150 + "object": { 151 + "type": "object", 152 + "description": "Information about the session.", 153 + "required": [ 154 + "session_id", 155 + "session_name", 156 + "session_key", 157 + "user_key", 158 + "host_id", 159 + "participant" 160 + ], 161 + "properties": { 162 + "id": { 163 + "type": "integer", 164 + "format": "int64", 165 + "description": "The session ID.", 166 + "deprecated": true 167 + }, 168 + "uuid": { 169 + "type": "string", 170 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 171 + "deprecated": true 172 + }, 173 + "session_id": { 174 + "type": "string", 175 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 176 + }, 177 + "session_name": { 178 + "type": "string", 179 + "description": "Session name." 180 + }, 181 + "session_key": { 182 + "type": "string", 183 + "description": "The Video SDK custom session ID." 184 + }, 185 + "user_key": { 186 + "type": "string", 187 + "description": "Another identifier for the inviter. Can be a number or characters." 188 + }, 189 + "host_id": { 190 + "type": "string", 191 + "description": "The user ID of the session host." 192 + }, 193 + "participant": { 194 + "type": "object", 195 + "description": "Information about the invited user.", 196 + "required": [ 197 + "invitee_name", 198 + "phone_number", 199 + "from_number" 200 + ], 201 + "properties": { 202 + "invitee_name": { 203 + "type": "string", 204 + "description": "The user's name to display in the session." 205 + }, 206 + "phone_number": { 207 + "type": "integer", 208 + "format": "int64", 209 + "description": "The user's phone number." 210 + }, 211 + "from_number": { 212 + "type": "integer", 213 + "format": "int64", 214 + "description": "The number used to call out to the invited user." 215 + } 216 + }, 217 + "additionalProperties": false 218 + } 219 + }, 220 + "additionalProperties": false 221 + } 222 + }, 223 + "additionalProperties": false 224 + } 225 + }, 226 + "additionalProperties": false 227 + }, 228 + "examples": { 229 + "json-example": { 230 + "summary": "JSON example", 231 + "value": "{\n \"event\": \"session.user_phone_callout_ringing\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 232 + } 233 + } 234 + } 235 + } 236 + } 237 + } 238 + } 239 + }, 240 + "session.user_room_system_callout_ringing": { 241 + "post": { 242 + "tags": ["session"], 243 + "operationId": "session.user_room_system_callout_ringing", 244 + "requestBody": { 245 + "description": "# session.user_room_system_callout_ringing\n\nThe **Invited party's phone (call out) ringing in Zoom room** event is triggered every time a user's phone is ringing when they were invited to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n* A valid **Event Notification Endpoint URL**.\n* The **Invited party's phone (call out) ringing in Zoom room** subscription enabled under the **Session** event.\n\n\n\n**Event type**: `session.user_room_system_callout_ringing`\n", 246 + "content": { 247 + "application/json": { 248 + "schema": { 249 + "type": "object", 250 + "required": ["event", "event_ts", "payload"], 251 + "properties": { 252 + "event": { 253 + "type": "string", 254 + "description": "The name of the event." 255 + }, 256 + "event_ts": { 257 + "type": "integer", 258 + "format": "int64", 259 + "description": "A timestamp at which the event occurred." 260 + }, 261 + "payload": { 262 + "type": "object", 263 + "required": ["account_id", "object"], 264 + "properties": { 265 + "account_id": { 266 + "type": "string", 267 + "description": "The account ID of the session host." 268 + }, 269 + "object": { 270 + "type": "object", 271 + "description": "Information about the session.", 272 + "required": [ 273 + "session_id", 274 + "session_name", 275 + "host_id", 276 + "message_id", 277 + "inviter_name", 278 + "participant" 279 + ], 280 + "properties": { 281 + "id": { 282 + "type": "integer", 283 + "format": "int64", 284 + "description": "The session ID.", 285 + "deprecated": true 286 + }, 287 + "uuid": { 288 + "type": "string", 289 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 290 + "deprecated": true 291 + }, 292 + "session_id": { 293 + "type": "string", 294 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 295 + }, 296 + "session_name": { 297 + "type": "string", 298 + "description": "Session name." 299 + }, 300 + "host_id": { 301 + "type": "string", 302 + "description": "The user ID of the session host." 303 + }, 304 + "message_id": { 305 + "type": "string", 306 + "description": "The request unique identifier (UUID)." 307 + }, 308 + "inviter_name": { 309 + "type": "string", 310 + "description": "The user name of the event's trigger." 311 + }, 312 + "participant": { 313 + "type": "object", 314 + "description": "Information about the invited participant.", 315 + "required": ["call_type", "device_ip"], 316 + "properties": { 317 + "call_type": { 318 + "type": "string", 319 + "description": "The type of call out. Use a value of h323 or sip." 320 + }, 321 + "device_ip": { 322 + "type": "string", 323 + "description": "The user's device IP address." 324 + } 325 + }, 326 + "additionalProperties": true 327 + } 328 + }, 329 + "additionalProperties": false 330 + } 331 + }, 332 + "additionalProperties": false 333 + } 334 + }, 335 + "additionalProperties": false 336 + }, 337 + "examples": { 338 + "json-example": { 339 + "summary": "JSON example", 340 + "value": "{\n \"event\": \"session.user_room_system_callout_ringing\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 341 + } 342 + } 343 + } 344 + } 345 + }, 346 + "responses": { 347 + "200": { 348 + "content": { 349 + "application/json": { 350 + "schema": { 351 + "type": "object", 352 + "required": ["event", "event_ts", "payload"], 353 + "properties": { 354 + "event": { 355 + "type": "string", 356 + "description": "The name of the event." 357 + }, 358 + "event_ts": { 359 + "type": "integer", 360 + "format": "int64", 361 + "description": "A timestamp at which the event occurred." 362 + }, 363 + "payload": { 364 + "type": "object", 365 + "required": ["account_id", "object"], 366 + "properties": { 367 + "account_id": { 368 + "type": "string", 369 + "description": "The account ID of the session host." 370 + }, 371 + "object": { 372 + "type": "object", 373 + "description": "Information about the session.", 374 + "required": [ 375 + "session_id", 376 + "session_name", 377 + "host_id", 378 + "message_id", 379 + "inviter_name", 380 + "participant" 381 + ], 382 + "properties": { 383 + "id": { 384 + "type": "integer", 385 + "format": "int64", 386 + "description": "The session ID.", 387 + "deprecated": true 388 + }, 389 + "uuid": { 390 + "type": "string", 391 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 392 + "deprecated": true 393 + }, 394 + "session_id": { 395 + "type": "string", 396 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 397 + }, 398 + "session_name": { 399 + "type": "string", 400 + "description": "Session name." 401 + }, 402 + "host_id": { 403 + "type": "string", 404 + "description": "The user ID of the session host." 405 + }, 406 + "message_id": { 407 + "type": "string", 408 + "description": "The request unique identifier (UUID)." 409 + }, 410 + "inviter_name": { 411 + "type": "string", 412 + "description": "The user name of the event's trigger." 413 + }, 414 + "participant": { 415 + "type": "object", 416 + "description": "Information about the invited participant.", 417 + "required": ["call_type", "device_ip"], 418 + "properties": { 419 + "call_type": { 420 + "type": "string", 421 + "description": "The type of call out. Use a value of h323 or sip." 422 + }, 423 + "device_ip": { 424 + "type": "string", 425 + "description": "The user's device IP address." 426 + } 427 + }, 428 + "additionalProperties": true 429 + } 430 + }, 431 + "additionalProperties": false 432 + } 433 + }, 434 + "additionalProperties": false 435 + } 436 + }, 437 + "additionalProperties": false 438 + }, 439 + "examples": { 440 + "json-example": { 441 + "summary": "JSON example", 442 + "value": "{\n \"event\": \"session.user_room_system_callout_ringing\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 443 + } 444 + } 445 + } 446 + } 447 + } 448 + } 449 + } 450 + }, 451 + "session.recording_started": { 452 + "post": { 453 + "tags": ["session"], 454 + "operationId": "session.recording_started", 455 + "requestBody": { 456 + "description": "# session.recording_started\n---\n\nEvent: `session.recording_started`\n\n## Event description\n\nThe **Session recording started** event is triggered every time a recording is started by one of your app users or account users.\n\nOnly a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n * A valid Event Notification Endpoint URL.\n * **Session recording started** subscription enabled under the **Recording** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_started` event notification:\n\n\n\n**Event type**: `session.recording_started`\n", 457 + "content": { 458 + "application/json": { 459 + "schema": { 460 + "type": "object", 461 + "required": ["event", "event_ts", "payload"], 462 + "properties": { 463 + "event": { 464 + "type": "string", 465 + "enum": ["session.recording_started"], 466 + "description": "The event's name." 467 + }, 468 + "event_ts": { 469 + "type": "integer", 470 + "format": "int64", 471 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 472 + }, 473 + "payload": { 474 + "type": "object", 475 + "required": ["account_id", "object"], 476 + "properties": { 477 + "account_id": { 478 + "type": "string", 479 + "description": "The Video SDK account ID." 480 + }, 481 + "object": { 482 + "type": "object", 483 + "description": "Information about the session. This object only returns updated properties.", 484 + "required": [ 485 + "session_id", 486 + "session_name", 487 + "session_key", 488 + "start_time", 489 + "timezone", 490 + "recording_file" 491 + ], 492 + "properties": { 493 + "session_id": { 494 + "type": "string", 495 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 496 + }, 497 + "session_name": { 498 + "type": "string", 499 + "description": "Session name." 500 + }, 501 + "session_key": { 502 + "type": "string", 503 + "description": "The Video SDK custom session ID." 504 + }, 505 + "start_time": { 506 + "type": "string", 507 + "format": "date-time", 508 + "description": "The time at which the session started." 509 + }, 510 + "timezone": { 511 + "type": "string", 512 + "description": "The user's timezone." 513 + }, 514 + "recording_file": { 515 + "type": "object", 516 + "properties": { 517 + "recording_start": { 518 + "type": "string", 519 + "description": "The recording start time." 520 + }, 521 + "recording_end": { 522 + "type": "string", 523 + "description": "The recording end time. Response in general query." 524 + } 525 + } 526 + } 527 + }, 528 + "additionalProperties": false 529 + } 530 + }, 531 + "additionalProperties": false 532 + } 533 + }, 534 + "additionalProperties": false 535 + }, 536 + "examples": { 537 + "json-example": { 538 + "summary": "JSON example", 539 + "value": "{\n \"event\": \"session.recording_started\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 540 + } 541 + } 542 + } 543 + } 544 + }, 545 + "responses": { 546 + "200": { 547 + "content": { 548 + "application/json": { 549 + "schema": { 550 + "type": "object", 551 + "required": ["event", "event_ts", "payload"], 552 + "properties": { 553 + "event": { 554 + "type": "string", 555 + "enum": ["session.recording_started"], 556 + "description": "The event's name." 557 + }, 558 + "event_ts": { 559 + "type": "integer", 560 + "format": "int64", 561 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 562 + }, 563 + "payload": { 564 + "type": "object", 565 + "required": ["account_id", "object"], 566 + "properties": { 567 + "account_id": { 568 + "type": "string", 569 + "description": "The Video SDK account ID." 570 + }, 571 + "object": { 572 + "type": "object", 573 + "description": "Information about the session. This object only returns updated properties.", 574 + "required": [ 575 + "session_id", 576 + "session_name", 577 + "session_key", 578 + "start_time", 579 + "timezone", 580 + "recording_file" 581 + ], 582 + "properties": { 583 + "session_id": { 584 + "type": "string", 585 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 586 + }, 587 + "session_name": { 588 + "type": "string", 589 + "description": "Session name." 590 + }, 591 + "session_key": { 592 + "type": "string", 593 + "description": "The Video SDK custom session ID." 594 + }, 595 + "start_time": { 596 + "type": "string", 597 + "format": "date-time", 598 + "description": "The time at which the session started." 599 + }, 600 + "timezone": { 601 + "type": "string", 602 + "description": "The user's timezone." 603 + }, 604 + "recording_file": { 605 + "type": "object", 606 + "properties": { 607 + "recording_start": { 608 + "type": "string", 609 + "description": "The recording start time." 610 + }, 611 + "recording_end": { 612 + "type": "string", 613 + "description": "The recording end time. Response in general query." 614 + } 615 + } 616 + } 617 + }, 618 + "additionalProperties": false 619 + } 620 + }, 621 + "additionalProperties": false 622 + } 623 + }, 624 + "additionalProperties": false 625 + }, 626 + "examples": { 627 + "json-example": { 628 + "summary": "JSON example", 629 + "value": "{\n \"event\": \"session.recording_started\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 630 + } 631 + } 632 + } 633 + } 634 + } 635 + } 636 + } 637 + }, 638 + "session.recording_resumed": { 639 + "post": { 640 + "tags": ["session"], 641 + "operationId": "session.recording_resumed", 642 + "requestBody": { 643 + "description": "# session.recording_resumed\n---\n\nEvent: `session.recording_resumed`\n\n## Event description\n\nThe **Session recording resumed** event is triggered every time a previously paused recording of a session is resumed.\n\nOnly a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n * A valid Event Notification Endpoint URL.\n * **Session recording resumed** subscription enabled under the **Recording** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_resumed` event notification:\n\n\n\n**Event type**: `session.recording_resumed`\n", 644 + "content": { 645 + "application/json": { 646 + "schema": { 647 + "type": "object", 648 + "required": ["event", "event_ts", "payload"], 649 + "properties": { 650 + "event": { 651 + "type": "string", 652 + "enum": ["session.recording_resumed"], 653 + "description": "The event's name." 654 + }, 655 + "event_ts": { 656 + "type": "integer", 657 + "format": "int64", 658 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 659 + }, 660 + "payload": { 661 + "type": "object", 662 + "required": ["account_id", "object"], 663 + "properties": { 664 + "account_id": { 665 + "type": "string", 666 + "description": "The Video SDK account ID." 667 + }, 668 + "object": { 669 + "type": "object", 670 + "description": "Information about the session. This object only returns updated properties.", 671 + "required": [ 672 + "session_id", 673 + "session_name", 674 + "session_key", 675 + "start_time", 676 + "timezone", 677 + "recording_file" 678 + ], 679 + "properties": { 680 + "session_id": { 681 + "type": "string", 682 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 683 + }, 684 + "session_name": { 685 + "type": "string", 686 + "description": "Session name." 687 + }, 688 + "session_key": { 689 + "type": "string", 690 + "description": "The Video SDK custom session ID." 691 + }, 692 + "start_time": { 693 + "type": "string", 694 + "format": "date-time", 695 + "description": "The time at which the session started." 696 + }, 697 + "timezone": { 698 + "type": "string", 699 + "description": "The user's timezone." 700 + }, 701 + "recording_file": { 702 + "type": "object", 703 + "properties": { 704 + "recording_start": { 705 + "type": "string", 706 + "description": "The recording start time." 707 + }, 708 + "recording_end": { 709 + "type": "string", 710 + "description": "The recording end time. Response in general query." 711 + } 712 + } 713 + } 714 + }, 715 + "additionalProperties": false 716 + } 717 + }, 718 + "additionalProperties": false 719 + } 720 + }, 721 + "additionalProperties": false 722 + }, 723 + "examples": { 724 + "json-example": { 725 + "summary": "JSON example", 726 + "value": "{\n \"event\": \"session.recording_resumed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 727 + } 728 + } 729 + } 730 + } 731 + }, 732 + "responses": { 733 + "200": { 734 + "content": { 735 + "application/json": { 736 + "schema": { 737 + "type": "object", 738 + "required": ["event", "event_ts", "payload"], 739 + "properties": { 740 + "event": { 741 + "type": "string", 742 + "enum": ["session.recording_resumed"], 743 + "description": "The event's name." 744 + }, 745 + "event_ts": { 746 + "type": "integer", 747 + "format": "int64", 748 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 749 + }, 750 + "payload": { 751 + "type": "object", 752 + "required": ["account_id", "object"], 753 + "properties": { 754 + "account_id": { 755 + "type": "string", 756 + "description": "The Video SDK account ID." 757 + }, 758 + "object": { 759 + "type": "object", 760 + "description": "Information about the session. This object only returns updated properties.", 761 + "required": [ 762 + "session_id", 763 + "session_name", 764 + "session_key", 765 + "start_time", 766 + "timezone", 767 + "recording_file" 768 + ], 769 + "properties": { 770 + "session_id": { 771 + "type": "string", 772 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 773 + }, 774 + "session_name": { 775 + "type": "string", 776 + "description": "Session name." 777 + }, 778 + "session_key": { 779 + "type": "string", 780 + "description": "The Video SDK custom session ID." 781 + }, 782 + "start_time": { 783 + "type": "string", 784 + "format": "date-time", 785 + "description": "The time at which the session started." 786 + }, 787 + "timezone": { 788 + "type": "string", 789 + "description": "The user's timezone." 790 + }, 791 + "recording_file": { 792 + "type": "object", 793 + "properties": { 794 + "recording_start": { 795 + "type": "string", 796 + "description": "The recording start time." 797 + }, 798 + "recording_end": { 799 + "type": "string", 800 + "description": "The recording end time. Response in general query." 801 + } 802 + } 803 + } 804 + }, 805 + "additionalProperties": false 806 + } 807 + }, 808 + "additionalProperties": false 809 + } 810 + }, 811 + "additionalProperties": false 812 + }, 813 + "examples": { 814 + "json-example": { 815 + "summary": "JSON example", 816 + "value": "{\n \"event\": \"session.recording_resumed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 817 + } 818 + } 819 + } 820 + } 821 + } 822 + } 823 + } 824 + }, 825 + "session.live_streaming_stopped": { 826 + "post": { 827 + "tags": ["session"], 828 + "operationId": "session.live_streaming_stopped", 829 + "requestBody": { 830 + "description": "# session.live_streaming_stopped\n---\n\n\nThe Session Live Streaming Stopped event is triggered every time a user stops a live stream.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your app with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* **Session Live Streaming Stopped** subscription enabled under the **Video SDK** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.live_streaming_stopped` event notification:\n\n\n\n**Event type**: `session.live_streaming_stopped`\n", 831 + "content": { 832 + "application/json": { 833 + "schema": { 834 + "type": "object", 835 + "required": ["event", "event_ts", "payload"], 836 + "properties": { 837 + "event": { 838 + "type": "string", 839 + "enum": ["session.live_streaming_stopped"], 840 + "description": "The name of the event." 841 + }, 842 + "event_ts": { 843 + "type": "integer", 844 + "format": "int64", 845 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format." 846 + }, 847 + "payload": { 848 + "type": "object", 849 + "required": ["account_id", "object"], 850 + "properties": { 851 + "account_id": { 852 + "type": "string", 853 + "description": "The Video SDK account ID." 854 + }, 855 + "object": { 856 + "type": "object", 857 + "description": "Information about the session.", 858 + "required": [ 859 + "id", 860 + "session_id", 861 + "session_name", 862 + "start_time", 863 + "live_streaming" 864 + ], 865 + "properties": { 866 + "id": { 867 + "type": "string", 868 + "description": "The session ID.", 869 + "deprecated": true 870 + }, 871 + "session_id": { 872 + "type": "string", 873 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 874 + }, 875 + "session_name": { 876 + "type": "string", 877 + "description": "Session name." 878 + }, 879 + "session_key": { 880 + "type": "string", 881 + "description": "The Video SDK custom session ID." 882 + }, 883 + "start_time": { 884 + "type": "string", 885 + "description": "The session's start time.", 886 + "format": "date-time" 887 + }, 888 + "live_streaming": { 889 + "type": "object", 890 + "description": "Information about the participant.", 891 + "required": [ 892 + "service", 893 + "custom_live_streaming_settings", 894 + "date_time" 895 + ], 896 + "properties": { 897 + "service": { 898 + "type": "string", 899 + "description": "The name of the Live Streaming service.", 900 + "enum": [ 901 + "Facebook", 902 + "Workplace_by_Facebook", 903 + "YouTube", 904 + "Custom_Live_Streaming_Service" 905 + ] 906 + }, 907 + "custom_live_streaming_settings": { 908 + "type": "object", 909 + "description": "The live stream settings.", 910 + "required": [ 911 + "stream_url", 912 + "stream_key", 913 + "page_url" 914 + ], 915 + "properties": { 916 + "stream_url": { 917 + "type": "string", 918 + "description": "The stream's URL." 919 + }, 920 + "stream_key": { 921 + "type": "string", 922 + "description": "The stream's Key." 923 + }, 924 + "page_url": { 925 + "type": "string", 926 + "description": "The live stream's page URL." 927 + }, 928 + "resolution": { 929 + "type": "string", 930 + "description": "The number of pixels in each dimension that the video camera can display." 931 + } 932 + } 933 + }, 934 + "date_time": { 935 + "type": "string", 936 + "description": "The live stream's stop time.", 937 + "format": "date-time" 938 + } 939 + } 940 + } 941 + }, 942 + "additionalProperties": false 943 + } 944 + }, 945 + "additionalProperties": false 946 + } 947 + }, 948 + "additionalProperties": false 949 + }, 950 + "examples": { 951 + "json-example": { 952 + "summary": "JSON example", 953 + "value": "{\n \"event\": \"session.live_streaming_stopped\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:03:32Z\",\n \"live_streaming\": {\n \"service\": \"Custom_Live_Streaming_Service\",\n \"custom_live_streaming_settings\": {\n \"stream_url\": \"https://example.com/livestream\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"page_url\": \"https://example.com/livestream/123\",\n\t\t \"resolution\": \"1080p\"\n },\n \"date_time\": \"2021-08-02T12:22:45Z\"\n }\n }\n }\n}" 954 + } 955 + } 956 + } 957 + } 958 + }, 959 + "responses": { 960 + "200": { 961 + "content": { 962 + "application/json": { 963 + "schema": { 964 + "type": "object", 965 + "required": ["event", "event_ts", "payload"], 966 + "properties": { 967 + "event": { 968 + "type": "string", 969 + "enum": ["session.live_streaming_stopped"], 970 + "description": "The name of the event." 971 + }, 972 + "event_ts": { 973 + "type": "integer", 974 + "format": "int64", 975 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format." 976 + }, 977 + "payload": { 978 + "type": "object", 979 + "required": ["account_id", "object"], 980 + "properties": { 981 + "account_id": { 982 + "type": "string", 983 + "description": "The Video SDK account ID." 984 + }, 985 + "object": { 986 + "type": "object", 987 + "description": "Information about the session.", 988 + "required": [ 989 + "id", 990 + "session_id", 991 + "session_name", 992 + "start_time", 993 + "live_streaming" 994 + ], 995 + "properties": { 996 + "id": { 997 + "type": "string", 998 + "description": "The session ID.", 999 + "deprecated": true 1000 + }, 1001 + "session_id": { 1002 + "type": "string", 1003 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1004 + }, 1005 + "session_name": { 1006 + "type": "string", 1007 + "description": "Session name." 1008 + }, 1009 + "session_key": { 1010 + "type": "string", 1011 + "description": "The Video SDK custom session ID." 1012 + }, 1013 + "start_time": { 1014 + "type": "string", 1015 + "description": "The session's start time.", 1016 + "format": "date-time" 1017 + }, 1018 + "live_streaming": { 1019 + "type": "object", 1020 + "description": "Information about the participant.", 1021 + "required": [ 1022 + "service", 1023 + "custom_live_streaming_settings", 1024 + "date_time" 1025 + ], 1026 + "properties": { 1027 + "service": { 1028 + "type": "string", 1029 + "description": "The name of the Live Streaming service.", 1030 + "enum": [ 1031 + "Facebook", 1032 + "Workplace_by_Facebook", 1033 + "YouTube", 1034 + "Custom_Live_Streaming_Service" 1035 + ] 1036 + }, 1037 + "custom_live_streaming_settings": { 1038 + "type": "object", 1039 + "description": "The live stream settings.", 1040 + "required": [ 1041 + "stream_url", 1042 + "stream_key", 1043 + "page_url" 1044 + ], 1045 + "properties": { 1046 + "stream_url": { 1047 + "type": "string", 1048 + "description": "The stream's URL." 1049 + }, 1050 + "stream_key": { 1051 + "type": "string", 1052 + "description": "The stream's Key." 1053 + }, 1054 + "page_url": { 1055 + "type": "string", 1056 + "description": "The live stream's page URL." 1057 + }, 1058 + "resolution": { 1059 + "type": "string", 1060 + "description": "The number of pixels in each dimension that the video camera can display." 1061 + } 1062 + } 1063 + }, 1064 + "date_time": { 1065 + "type": "string", 1066 + "description": "The live stream's stop time.", 1067 + "format": "date-time" 1068 + } 1069 + } 1070 + } 1071 + }, 1072 + "additionalProperties": false 1073 + } 1074 + }, 1075 + "additionalProperties": false 1076 + } 1077 + }, 1078 + "additionalProperties": false 1079 + }, 1080 + "examples": { 1081 + "json-example": { 1082 + "summary": "JSON example", 1083 + "value": "{\n \"event\": \"session.live_streaming_stopped\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:03:32Z\",\n \"live_streaming\": {\n \"service\": \"Custom_Live_Streaming_Service\",\n \"custom_live_streaming_settings\": {\n \"stream_url\": \"https://example.com/livestream\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"page_url\": \"https://example.com/livestream/123\",\n\t\t \"resolution\": \"1080p\"\n },\n \"date_time\": \"2021-08-02T12:22:45Z\"\n }\n }\n }\n}" 1084 + } 1085 + } 1086 + } 1087 + } 1088 + } 1089 + } 1090 + } 1091 + }, 1092 + "session.stream_ingestion_stopped": { 1093 + "post": { 1094 + "tags": ["session"], 1095 + "operationId": "session.stream_ingestion_stopped", 1096 + "requestBody": { 1097 + "description": "# session.stream_ingestion_stopped\nZoom triggers the **Session stream ingestion stopped** event every time a user stops sending live incoming streams.\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Session stream ingestion stopped** subscription enabled under the **Video SDK** event.\n\n\n**Event type**: `session.stream_ingestion_stopped`\n", 1098 + "content": { 1099 + "application/json": { 1100 + "schema": { 1101 + "type": "object", 1102 + "required": ["event", "event_ts", "payload"], 1103 + "properties": { 1104 + "event": { 1105 + "type": "string", 1106 + "enum": ["session.stream_ingestion_stopped"], 1107 + "description": "Event name." 1108 + }, 1109 + "event_ts": { 1110 + "type": "integer", 1111 + "format": "int64", 1112 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 1113 + }, 1114 + "payload": { 1115 + "type": "object", 1116 + "required": ["account_id", "object"], 1117 + "properties": { 1118 + "account_id": { 1119 + "type": "string", 1120 + "description": "The Video SDK account ID." 1121 + }, 1122 + "object": { 1123 + "type": "object", 1124 + "description": "Information about the session.", 1125 + "required": [ 1126 + "session_id", 1127 + "session_name", 1128 + "stream_ingestion" 1129 + ], 1130 + "properties": { 1131 + "session_id": { 1132 + "type": "string", 1133 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1134 + }, 1135 + "session_name": { 1136 + "type": "string", 1137 + "description": "Session name." 1138 + }, 1139 + "session_key": { 1140 + "type": "string", 1141 + "description": "The Video SDK custom session ID." 1142 + }, 1143 + "stream_ingestion": { 1144 + "type": "object", 1145 + "description": "Information about the stream ingestion.", 1146 + "required": [ 1147 + "stream_id", 1148 + "stream_name", 1149 + "stream_key", 1150 + "stream_url", 1151 + "backup_stream_url" 1152 + ], 1153 + "properties": { 1154 + "stream_id": { 1155 + "type": "string", 1156 + "description": "The stream ingestion ID." 1157 + }, 1158 + "stream_name": { 1159 + "type": "string", 1160 + "description": "The stream ingestion name." 1161 + }, 1162 + "stream_description": { 1163 + "type": "string", 1164 + "description": "The stream ingestion description." 1165 + }, 1166 + "stream_key": { 1167 + "type": "string", 1168 + "description": "The stream ingestion key." 1169 + }, 1170 + "stream_url": { 1171 + "type": "string", 1172 + "description": "The stream URL." 1173 + }, 1174 + "backup_stream_url": { 1175 + "type": "string", 1176 + "description": "The backup stream URL." 1177 + } 1178 + } 1179 + } 1180 + }, 1181 + "additionalProperties": false 1182 + } 1183 + }, 1184 + "additionalProperties": false 1185 + } 1186 + }, 1187 + "additionalProperties": false 1188 + }, 1189 + "examples": { 1190 + "json-example": { 1191 + "summary": "JSON example", 1192 + "value": "{\n \"event\": \"session.stream_ingestion_stopped\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 1193 + } 1194 + } 1195 + } 1196 + } 1197 + }, 1198 + "responses": { 1199 + "200": { 1200 + "content": { 1201 + "application/json": { 1202 + "schema": { 1203 + "type": "object", 1204 + "required": ["event", "event_ts", "payload"], 1205 + "properties": { 1206 + "event": { 1207 + "type": "string", 1208 + "enum": ["session.stream_ingestion_stopped"], 1209 + "description": "Event name." 1210 + }, 1211 + "event_ts": { 1212 + "type": "integer", 1213 + "format": "int64", 1214 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 1215 + }, 1216 + "payload": { 1217 + "type": "object", 1218 + "required": ["account_id", "object"], 1219 + "properties": { 1220 + "account_id": { 1221 + "type": "string", 1222 + "description": "The Video SDK account ID." 1223 + }, 1224 + "object": { 1225 + "type": "object", 1226 + "description": "Information about the session.", 1227 + "required": [ 1228 + "session_id", 1229 + "session_name", 1230 + "stream_ingestion" 1231 + ], 1232 + "properties": { 1233 + "session_id": { 1234 + "type": "string", 1235 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1236 + }, 1237 + "session_name": { 1238 + "type": "string", 1239 + "description": "Session name." 1240 + }, 1241 + "session_key": { 1242 + "type": "string", 1243 + "description": "The Video SDK custom session ID." 1244 + }, 1245 + "stream_ingestion": { 1246 + "type": "object", 1247 + "description": "Information about the stream ingestion.", 1248 + "required": [ 1249 + "stream_id", 1250 + "stream_name", 1251 + "stream_key", 1252 + "stream_url", 1253 + "backup_stream_url" 1254 + ], 1255 + "properties": { 1256 + "stream_id": { 1257 + "type": "string", 1258 + "description": "The stream ingestion ID." 1259 + }, 1260 + "stream_name": { 1261 + "type": "string", 1262 + "description": "The stream ingestion name." 1263 + }, 1264 + "stream_description": { 1265 + "type": "string", 1266 + "description": "The stream ingestion description." 1267 + }, 1268 + "stream_key": { 1269 + "type": "string", 1270 + "description": "The stream ingestion key." 1271 + }, 1272 + "stream_url": { 1273 + "type": "string", 1274 + "description": "The stream URL." 1275 + }, 1276 + "backup_stream_url": { 1277 + "type": "string", 1278 + "description": "The backup stream URL." 1279 + } 1280 + } 1281 + } 1282 + }, 1283 + "additionalProperties": false 1284 + } 1285 + }, 1286 + "additionalProperties": false 1287 + } 1288 + }, 1289 + "additionalProperties": false 1290 + }, 1291 + "examples": { 1292 + "json-example": { 1293 + "summary": "JSON example", 1294 + "value": "{\n \"event\": \"session.stream_ingestion_stopped\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 1295 + } 1296 + } 1297 + } 1298 + } 1299 + } 1300 + } 1301 + } 1302 + }, 1303 + "session.user_room_system_callout_rejected": { 1304 + "post": { 1305 + "tags": ["session"], 1306 + "operationId": "session.user_room_system_callout_rejected", 1307 + "requestBody": { 1308 + "description": "# session.user_room_system_callout_rejected\n\nThe **Invited party rejected a session invitation through phone (call out) via Zoom room** event is triggered every time a user rejects an invitation to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n* A valid **Event Notification Endpoint URL**.\n* The **Invited party rejected a session invitation through phone (call out) via Zoom room** subscription enabled under the **Session** event.\n\n\n\n**Event type**: `session.user_room_system_callout_rejected`\n", 1309 + "content": { 1310 + "application/json": { 1311 + "schema": { 1312 + "type": "object", 1313 + "required": ["event", "event_ts", "payload"], 1314 + "properties": { 1315 + "event": { 1316 + "type": "string", 1317 + "description": "The name of the event." 1318 + }, 1319 + "event_ts": { 1320 + "type": "integer", 1321 + "format": "int64", 1322 + "description": "A timestamp at which the event occurred." 1323 + }, 1324 + "payload": { 1325 + "type": "object", 1326 + "required": ["account_id", "object"], 1327 + "properties": { 1328 + "account_id": { 1329 + "type": "string", 1330 + "description": "The account ID of the session host." 1331 + }, 1332 + "object": { 1333 + "type": "object", 1334 + "description": "Information about the session.", 1335 + "required": [ 1336 + "session_id", 1337 + "session_name", 1338 + "host_id", 1339 + "message_id", 1340 + "inviter_name", 1341 + "participant" 1342 + ], 1343 + "properties": { 1344 + "id": { 1345 + "type": "integer", 1346 + "format": "int64", 1347 + "description": "The session ID.", 1348 + "deprecated": true 1349 + }, 1350 + "uuid": { 1351 + "type": "string", 1352 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 1353 + "deprecated": true 1354 + }, 1355 + "session_id": { 1356 + "type": "string", 1357 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1358 + }, 1359 + "session_name": { 1360 + "type": "string", 1361 + "description": "Session name." 1362 + }, 1363 + "host_id": { 1364 + "type": "string", 1365 + "description": "The user ID of the session host." 1366 + }, 1367 + "message_id": { 1368 + "type": "string", 1369 + "description": "The request unique identifier (UUID)." 1370 + }, 1371 + "inviter_name": { 1372 + "type": "string", 1373 + "description": "The user name of the event's trigger." 1374 + }, 1375 + "participant": { 1376 + "type": "object", 1377 + "description": "Information about the invited participant.", 1378 + "required": ["call_type", "device_ip"], 1379 + "properties": { 1380 + "call_type": { 1381 + "type": "string", 1382 + "description": "The type of call out. Use a value of h323 or sip." 1383 + }, 1384 + "device_ip": { 1385 + "type": "string", 1386 + "description": "The user's device IP address." 1387 + } 1388 + }, 1389 + "additionalProperties": true 1390 + } 1391 + }, 1392 + "additionalProperties": false 1393 + } 1394 + }, 1395 + "additionalProperties": false 1396 + } 1397 + }, 1398 + "additionalProperties": false 1399 + }, 1400 + "examples": { 1401 + "json-example": { 1402 + "summary": "JSON example", 1403 + "value": "{\n \"event\": \"session.user_room_system_callout_rejected\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 1404 + } 1405 + } 1406 + } 1407 + } 1408 + }, 1409 + "responses": { 1410 + "200": { 1411 + "content": { 1412 + "application/json": { 1413 + "schema": { 1414 + "type": "object", 1415 + "required": ["event", "event_ts", "payload"], 1416 + "properties": { 1417 + "event": { 1418 + "type": "string", 1419 + "description": "The name of the event." 1420 + }, 1421 + "event_ts": { 1422 + "type": "integer", 1423 + "format": "int64", 1424 + "description": "A timestamp at which the event occurred." 1425 + }, 1426 + "payload": { 1427 + "type": "object", 1428 + "required": ["account_id", "object"], 1429 + "properties": { 1430 + "account_id": { 1431 + "type": "string", 1432 + "description": "The account ID of the session host." 1433 + }, 1434 + "object": { 1435 + "type": "object", 1436 + "description": "Information about the session.", 1437 + "required": [ 1438 + "session_id", 1439 + "session_name", 1440 + "host_id", 1441 + "message_id", 1442 + "inviter_name", 1443 + "participant" 1444 + ], 1445 + "properties": { 1446 + "id": { 1447 + "type": "integer", 1448 + "format": "int64", 1449 + "description": "The session ID.", 1450 + "deprecated": true 1451 + }, 1452 + "uuid": { 1453 + "type": "string", 1454 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 1455 + "deprecated": true 1456 + }, 1457 + "session_id": { 1458 + "type": "string", 1459 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1460 + }, 1461 + "session_name": { 1462 + "type": "string", 1463 + "description": "Session name." 1464 + }, 1465 + "host_id": { 1466 + "type": "string", 1467 + "description": "The user ID of the session host." 1468 + }, 1469 + "message_id": { 1470 + "type": "string", 1471 + "description": "The request unique identifier (UUID)." 1472 + }, 1473 + "inviter_name": { 1474 + "type": "string", 1475 + "description": "The user name of the event's trigger." 1476 + }, 1477 + "participant": { 1478 + "type": "object", 1479 + "description": "Information about the invited participant.", 1480 + "required": ["call_type", "device_ip"], 1481 + "properties": { 1482 + "call_type": { 1483 + "type": "string", 1484 + "description": "The type of call out. Use a value of h323 or sip." 1485 + }, 1486 + "device_ip": { 1487 + "type": "string", 1488 + "description": "The user's device IP address." 1489 + } 1490 + }, 1491 + "additionalProperties": true 1492 + } 1493 + }, 1494 + "additionalProperties": false 1495 + } 1496 + }, 1497 + "additionalProperties": false 1498 + } 1499 + }, 1500 + "additionalProperties": false 1501 + }, 1502 + "examples": { 1503 + "json-example": { 1504 + "summary": "JSON example", 1505 + "value": "{\n \"event\": \"session.user_room_system_callout_rejected\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 1506 + } 1507 + } 1508 + } 1509 + } 1510 + } 1511 + } 1512 + } 1513 + }, 1514 + "session.alert": { 1515 + "post": { 1516 + "tags": ["session"], 1517 + "operationId": "session.alert", 1518 + "requestBody": { 1519 + "description": "# session.alert\n---\n\n\nThe Session Alert event is triggered every time a service issue is encountered during a session in your account.\n\nThe following quality metrics can trigger an alert:\n\n* Unstable audio quality\n* Unstable video quality\n* Unstable screen share quality\n* High CPU occupation\n* Call Reconnection\n\n## Prerequisites\nEvent Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* Session Alert subscription enabled under the Video SDK event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.alert` event notification:\n\n\n**Event type**: `session.alert`\n", 1520 + "content": { 1521 + "application/json": { 1522 + "schema": { 1523 + "type": "object", 1524 + "required": ["event", "event_ts", "payload"], 1525 + "properties": { 1526 + "event": { 1527 + "type": "string", 1528 + "enum": ["session.alert"], 1529 + "description": "The event's name." 1530 + }, 1531 + "event_ts": { 1532 + "type": "integer", 1533 + "format": "int64", 1534 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 1535 + }, 1536 + "payload": { 1537 + "type": "object", 1538 + "required": ["account_id", "object"], 1539 + "properties": { 1540 + "account_id": { 1541 + "type": "string", 1542 + "description": "The Video SDK account ID." 1543 + }, 1544 + "object": { 1545 + "type": "object", 1546 + "description": "Information about the session. This object only returns updated properties.", 1547 + "required": [ 1548 + "id", 1549 + "session_id", 1550 + "session_name", 1551 + "issues" 1552 + ], 1553 + "properties": { 1554 + "id": { 1555 + "type": "string", 1556 + "description": "The session ID." 1557 + }, 1558 + "session_id": { 1559 + "type": "string", 1560 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1561 + }, 1562 + "session_name": { 1563 + "type": "string", 1564 + "description": "Session name." 1565 + }, 1566 + "session_key": { 1567 + "type": "string", 1568 + "description": "The Video SDK custom session ID." 1569 + }, 1570 + "issues": { 1571 + "type": "array", 1572 + "items": { 1573 + "type": "string", 1574 + "enum": [ 1575 + "Unstable audio quality", 1576 + "Unstable video quality", 1577 + "Unstable screen share quality", 1578 + "High CPU occupation", 1579 + "Call Reconnection" 1580 + ] 1581 + }, 1582 + "description": "Issues that occurred during the session." 1583 + } 1584 + }, 1585 + "additionalProperties": false 1586 + } 1587 + }, 1588 + "additionalProperties": false 1589 + } 1590 + }, 1591 + "additionalProperties": false 1592 + }, 1593 + "examples": { 1594 + "json-example": { 1595 + "summary": "JSON example", 1596 + "value": "{\n \"event\": \"session.alert\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"account_id\": \"EFgHiJABC000DEfGHI\",\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"issues\": \"Unstable audio quality\"\n }\n }\n}" 1597 + } 1598 + } 1599 + } 1600 + } 1601 + }, 1602 + "responses": { 1603 + "200": { 1604 + "content": { 1605 + "application/json": { 1606 + "schema": { 1607 + "type": "object", 1608 + "required": ["event", "event_ts", "payload"], 1609 + "properties": { 1610 + "event": { 1611 + "type": "string", 1612 + "enum": ["session.alert"], 1613 + "description": "The event's name." 1614 + }, 1615 + "event_ts": { 1616 + "type": "integer", 1617 + "format": "int64", 1618 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 1619 + }, 1620 + "payload": { 1621 + "type": "object", 1622 + "required": ["account_id", "object"], 1623 + "properties": { 1624 + "account_id": { 1625 + "type": "string", 1626 + "description": "The Video SDK account ID." 1627 + }, 1628 + "object": { 1629 + "type": "object", 1630 + "description": "Information about the session. This object only returns updated properties.", 1631 + "required": [ 1632 + "id", 1633 + "session_id", 1634 + "session_name", 1635 + "issues" 1636 + ], 1637 + "properties": { 1638 + "id": { 1639 + "type": "string", 1640 + "description": "The session ID." 1641 + }, 1642 + "session_id": { 1643 + "type": "string", 1644 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1645 + }, 1646 + "session_name": { 1647 + "type": "string", 1648 + "description": "Session name." 1649 + }, 1650 + "session_key": { 1651 + "type": "string", 1652 + "description": "The Video SDK custom session ID." 1653 + }, 1654 + "issues": { 1655 + "type": "array", 1656 + "items": { 1657 + "type": "string", 1658 + "enum": [ 1659 + "Unstable audio quality", 1660 + "Unstable video quality", 1661 + "Unstable screen share quality", 1662 + "High CPU occupation", 1663 + "Call Reconnection" 1664 + ] 1665 + }, 1666 + "description": "Issues that occurred during the session." 1667 + } 1668 + }, 1669 + "additionalProperties": false 1670 + } 1671 + }, 1672 + "additionalProperties": false 1673 + } 1674 + }, 1675 + "additionalProperties": false 1676 + }, 1677 + "examples": { 1678 + "json-example": { 1679 + "summary": "JSON example", 1680 + "value": "{\n \"event\": \"session.alert\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"account_id\": \"EFgHiJABC000DEfGHI\",\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"issues\": \"Unstable audio quality\"\n }\n }\n}" 1681 + } 1682 + } 1683 + } 1684 + } 1685 + } 1686 + } 1687 + } 1688 + }, 1689 + "session.sharing_ended": { 1690 + "post": { 1691 + "tags": ["session"], 1692 + "operationId": "session.sharing_ended", 1693 + "requestBody": { 1694 + "description": "# session.sharing_ended\n---\n\n\nThe Session Sharing Ended event is triggered every time a user stops sharing the screen during a session.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* **Session Sharing Ended** subscription enabled under the **Video SDK** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.sharing_ended` event notification:\n\n\n\n**Event type**: `session.sharing_ended`\n", 1695 + "content": { 1696 + "application/json": { 1697 + "schema": { 1698 + "type": "object", 1699 + "required": ["event", "event_ts", "payload"], 1700 + "properties": { 1701 + "event": { 1702 + "type": "string", 1703 + "enum": ["session.sharing_ended"], 1704 + "description": "The event's name." 1705 + }, 1706 + "event_ts": { 1707 + "type": "integer", 1708 + "format": "int64", 1709 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 1710 + }, 1711 + "payload": { 1712 + "type": "object", 1713 + "required": ["account_id", "object"], 1714 + "properties": { 1715 + "account_id": { 1716 + "type": "string", 1717 + "description": "The Video SDK account ID." 1718 + }, 1719 + "object": { 1720 + "type": "object", 1721 + "description": "Information about the session. This object only returns updated properties.", 1722 + "required": [ 1723 + "id", 1724 + "session_id", 1725 + "session_name", 1726 + "user" 1727 + ], 1728 + "properties": { 1729 + "id": { 1730 + "type": "string", 1731 + "description": "The session ID.", 1732 + "deprecated": true 1733 + }, 1734 + "session_id": { 1735 + "type": "string", 1736 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1737 + }, 1738 + "session_name": { 1739 + "type": "string", 1740 + "description": "Session name." 1741 + }, 1742 + "session_key": { 1743 + "type": "string", 1744 + "description": "The Video SDK custom session ID." 1745 + }, 1746 + "user": { 1747 + "type": "object", 1748 + "description": "Information about the user.", 1749 + "required": ["id", "name", "sharing_details"], 1750 + "properties": { 1751 + "id": { 1752 + "type": "string", 1753 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 1754 + }, 1755 + "name": { 1756 + "type": "string", 1757 + "description": "The user's username." 1758 + }, 1759 + "user_key": { 1760 + "type": "string", 1761 + "description": "Another identifier for the user. Can be a number or characters." 1762 + }, 1763 + "sharing_details": { 1764 + "type": "object", 1765 + "description": "Information about the session's screen sharing.", 1766 + "required": ["content", "date_time"], 1767 + "properties": { 1768 + "content": { 1769 + "type": "string", 1770 + "description": "The type of shared content:\n* application — An application. For example, a web browser.\n* whiteboard — The Zoom [whiteboard](https://support.zoom.us/hc/en-us/articles/205677665-Sharing-a-whiteboard).\n* desktop — A user's desktop.\n* unknown — An unrecognized application, such as a third party app.", 1771 + "enum": [ 1772 + "application", 1773 + "whiteboard", 1774 + "desktop", 1775 + "unknown" 1776 + ] 1777 + }, 1778 + "date_time": { 1779 + "type": "string", 1780 + "format": "date-time", 1781 + "description": "The session's screen sharing date and time." 1782 + } 1783 + }, 1784 + "additionalProperties": false 1785 + } 1786 + }, 1787 + "additionalProperties": false 1788 + } 1789 + }, 1790 + "additionalProperties": false 1791 + } 1792 + }, 1793 + "additionalProperties": false 1794 + } 1795 + }, 1796 + "additionalProperties": false 1797 + }, 1798 + "examples": { 1799 + "json-example": { 1800 + "summary": "JSON example", 1801 + "value": "{\n \"event\": \"session.sharing_ended\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"username\",\n \"user_key\": \"ASD74dfDI854\",\n \"sharing_details\": {\n \"content\": \"application\",\n \"date_time\": \"2021-07-16T17:19:11Z\"\n }\n }\n },\n \"account_id\": \"EFgHiJABC000DEfGHI\"\n }\n}" 1802 + } 1803 + } 1804 + } 1805 + } 1806 + }, 1807 + "responses": { 1808 + "200": { 1809 + "content": { 1810 + "application/json": { 1811 + "schema": { 1812 + "type": "object", 1813 + "required": ["event", "event_ts", "payload"], 1814 + "properties": { 1815 + "event": { 1816 + "type": "string", 1817 + "enum": ["session.sharing_ended"], 1818 + "description": "The event's name." 1819 + }, 1820 + "event_ts": { 1821 + "type": "integer", 1822 + "format": "int64", 1823 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 1824 + }, 1825 + "payload": { 1826 + "type": "object", 1827 + "required": ["account_id", "object"], 1828 + "properties": { 1829 + "account_id": { 1830 + "type": "string", 1831 + "description": "The Video SDK account ID." 1832 + }, 1833 + "object": { 1834 + "type": "object", 1835 + "description": "Information about the session. This object only returns updated properties.", 1836 + "required": [ 1837 + "id", 1838 + "session_id", 1839 + "session_name", 1840 + "user" 1841 + ], 1842 + "properties": { 1843 + "id": { 1844 + "type": "string", 1845 + "description": "The session ID.", 1846 + "deprecated": true 1847 + }, 1848 + "session_id": { 1849 + "type": "string", 1850 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1851 + }, 1852 + "session_name": { 1853 + "type": "string", 1854 + "description": "Session name." 1855 + }, 1856 + "session_key": { 1857 + "type": "string", 1858 + "description": "The Video SDK custom session ID." 1859 + }, 1860 + "user": { 1861 + "type": "object", 1862 + "description": "Information about the user.", 1863 + "required": ["id", "name", "sharing_details"], 1864 + "properties": { 1865 + "id": { 1866 + "type": "string", 1867 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 1868 + }, 1869 + "name": { 1870 + "type": "string", 1871 + "description": "The user's username." 1872 + }, 1873 + "user_key": { 1874 + "type": "string", 1875 + "description": "Another identifier for the user. Can be a number or characters." 1876 + }, 1877 + "sharing_details": { 1878 + "type": "object", 1879 + "description": "Information about the session's screen sharing.", 1880 + "required": ["content", "date_time"], 1881 + "properties": { 1882 + "content": { 1883 + "type": "string", 1884 + "description": "The type of shared content:\n* application — An application. For example, a web browser.\n* whiteboard — The Zoom [whiteboard](https://support.zoom.us/hc/en-us/articles/205677665-Sharing-a-whiteboard).\n* desktop — A user's desktop.\n* unknown — An unrecognized application, such as a third party app.", 1885 + "enum": [ 1886 + "application", 1887 + "whiteboard", 1888 + "desktop", 1889 + "unknown" 1890 + ] 1891 + }, 1892 + "date_time": { 1893 + "type": "string", 1894 + "format": "date-time", 1895 + "description": "The session's screen sharing date and time." 1896 + } 1897 + }, 1898 + "additionalProperties": false 1899 + } 1900 + }, 1901 + "additionalProperties": false 1902 + } 1903 + }, 1904 + "additionalProperties": false 1905 + } 1906 + }, 1907 + "additionalProperties": false 1908 + } 1909 + }, 1910 + "additionalProperties": false 1911 + }, 1912 + "examples": { 1913 + "json-example": { 1914 + "summary": "JSON example", 1915 + "value": "{\n \"event\": \"session.sharing_ended\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"username\",\n \"user_key\": \"ASD74dfDI854\",\n \"sharing_details\": {\n \"content\": \"application\",\n \"date_time\": \"2021-07-16T17:19:11Z\"\n }\n }\n },\n \"account_id\": \"EFgHiJABC000DEfGHI\"\n }\n}" 1916 + } 1917 + } 1918 + } 1919 + } 1920 + } 1921 + } 1922 + } 1923 + }, 1924 + "session.recording_paused": { 1925 + "post": { 1926 + "tags": ["session"], 1927 + "operationId": "session.recording_paused", 1928 + "requestBody": { 1929 + "description": "# session.recording_paused\n---\n\nEvent: `session.recording_paused`\n\n## Event description\n\nThe **Session recording paused** event is triggered every time a recording is paused by one of your app or account users.\n\nOnly a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n * A valid Event Notification Endpoint URL.\n * \"**Session recording paused**\" subscription enabled under the **Recording** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_paused` event notification:\n\n\n\n**Event type**: `session.recording_paused`\n", 1930 + "content": { 1931 + "application/json": { 1932 + "schema": { 1933 + "type": "object", 1934 + "required": ["event", "event_ts", "payload"], 1935 + "properties": { 1936 + "event": { 1937 + "type": "string", 1938 + "enum": ["session.recording_paused"], 1939 + "description": "The event's name." 1940 + }, 1941 + "event_ts": { 1942 + "type": "integer", 1943 + "format": "int64", 1944 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 1945 + }, 1946 + "payload": { 1947 + "type": "object", 1948 + "required": ["account_id", "object"], 1949 + "properties": { 1950 + "account_id": { 1951 + "type": "string", 1952 + "description": "The Video SDK account ID." 1953 + }, 1954 + "object": { 1955 + "type": "object", 1956 + "description": "Information about the session. This object only returns updated properties.", 1957 + "required": [ 1958 + "session_id", 1959 + "session_name", 1960 + "session_key", 1961 + "start_time", 1962 + "timezone", 1963 + "recording_file" 1964 + ], 1965 + "properties": { 1966 + "session_id": { 1967 + "type": "string", 1968 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 1969 + }, 1970 + "session_name": { 1971 + "type": "string", 1972 + "description": "Session name." 1973 + }, 1974 + "session_key": { 1975 + "type": "string", 1976 + "description": "The Video SDK custom session ID." 1977 + }, 1978 + "start_time": { 1979 + "type": "string", 1980 + "format": "date-time", 1981 + "description": "The time at which the session started." 1982 + }, 1983 + "timezone": { 1984 + "type": "string", 1985 + "description": "The user's timezone." 1986 + }, 1987 + "recording_file": { 1988 + "type": "object", 1989 + "properties": { 1990 + "recording_start": { 1991 + "type": "string", 1992 + "description": "The recording start time." 1993 + }, 1994 + "recording_end": { 1995 + "type": "string", 1996 + "description": "The recording end time. Response in general query." 1997 + } 1998 + } 1999 + } 2000 + }, 2001 + "additionalProperties": false 2002 + } 2003 + }, 2004 + "additionalProperties": false 2005 + } 2006 + }, 2007 + "additionalProperties": false 2008 + }, 2009 + "examples": { 2010 + "json-example": { 2011 + "summary": "JSON example", 2012 + "value": "{\n \"event\": \"session.recording_paused\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 2013 + } 2014 + } 2015 + } 2016 + } 2017 + }, 2018 + "responses": { 2019 + "200": { 2020 + "content": { 2021 + "application/json": { 2022 + "schema": { 2023 + "type": "object", 2024 + "required": ["event", "event_ts", "payload"], 2025 + "properties": { 2026 + "event": { 2027 + "type": "string", 2028 + "enum": ["session.recording_paused"], 2029 + "description": "The event's name." 2030 + }, 2031 + "event_ts": { 2032 + "type": "integer", 2033 + "format": "int64", 2034 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 2035 + }, 2036 + "payload": { 2037 + "type": "object", 2038 + "required": ["account_id", "object"], 2039 + "properties": { 2040 + "account_id": { 2041 + "type": "string", 2042 + "description": "The Video SDK account ID." 2043 + }, 2044 + "object": { 2045 + "type": "object", 2046 + "description": "Information about the session. This object only returns updated properties.", 2047 + "required": [ 2048 + "session_id", 2049 + "session_name", 2050 + "session_key", 2051 + "start_time", 2052 + "timezone", 2053 + "recording_file" 2054 + ], 2055 + "properties": { 2056 + "session_id": { 2057 + "type": "string", 2058 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2059 + }, 2060 + "session_name": { 2061 + "type": "string", 2062 + "description": "Session name." 2063 + }, 2064 + "session_key": { 2065 + "type": "string", 2066 + "description": "The Video SDK custom session ID." 2067 + }, 2068 + "start_time": { 2069 + "type": "string", 2070 + "format": "date-time", 2071 + "description": "The time at which the session started." 2072 + }, 2073 + "timezone": { 2074 + "type": "string", 2075 + "description": "The user's timezone." 2076 + }, 2077 + "recording_file": { 2078 + "type": "object", 2079 + "properties": { 2080 + "recording_start": { 2081 + "type": "string", 2082 + "description": "The recording start time." 2083 + }, 2084 + "recording_end": { 2085 + "type": "string", 2086 + "description": "The recording end time. Response in general query." 2087 + } 2088 + } 2089 + } 2090 + }, 2091 + "additionalProperties": false 2092 + } 2093 + }, 2094 + "additionalProperties": false 2095 + } 2096 + }, 2097 + "additionalProperties": false 2098 + }, 2099 + "examples": { 2100 + "json-example": { 2101 + "summary": "JSON example", 2102 + "value": "{\n \"event\": \"session.recording_paused\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 2103 + } 2104 + } 2105 + } 2106 + } 2107 + } 2108 + } 2109 + } 2110 + }, 2111 + "session.ended": { 2112 + "post": { 2113 + "tags": ["session"], 2114 + "operationId": "session.ended", 2115 + "requestBody": { 2116 + "description": "# session.ended\n---\n\n\nThe Session Ended event is triggered when the host ends the session, or when all users have left the session.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your app with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* **Session Ended** subscription enabled under the **Video SDK** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.ended` event notification:\n\n\n\n**Event type**: `session.ended`\n", 2117 + "content": { 2118 + "application/json": { 2119 + "schema": { 2120 + "type": "object", 2121 + "required": ["event", "event_ts", "payload"], 2122 + "properties": { 2123 + "event": { 2124 + "type": "string", 2125 + "enum": ["session.ended"], 2126 + "description": "The name of the event." 2127 + }, 2128 + "event_ts": { 2129 + "type": "integer", 2130 + "format": "int64", 2131 + "description": "Timestamp at which the event occurred, in milliseconds since epoch. The value of this field is returned in long(int64) format." 2132 + }, 2133 + "payload": { 2134 + "type": "object", 2135 + "required": ["account_id", "object"], 2136 + "properties": { 2137 + "account_id": { 2138 + "type": "string", 2139 + "description": "The Video SDK account ID." 2140 + }, 2141 + "object": { 2142 + "type": "object", 2143 + "description": "Information about the session.", 2144 + "required": [ 2145 + "id", 2146 + "session_id", 2147 + "session_name", 2148 + "start_time", 2149 + "end_time" 2150 + ], 2151 + "properties": { 2152 + "id": { 2153 + "type": "string", 2154 + "description": "The session ID.", 2155 + "deprecated": true 2156 + }, 2157 + "session_id": { 2158 + "type": "string", 2159 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2160 + }, 2161 + "session_name": { 2162 + "type": "string", 2163 + "description": "Session name." 2164 + }, 2165 + "session_key": { 2166 + "type": "string", 2167 + "description": "The Video SDK custom session ID." 2168 + }, 2169 + "start_time": { 2170 + "type": "string", 2171 + "description": "The session's start time.", 2172 + "format": "date-time" 2173 + }, 2174 + "end_time": { 2175 + "type": "string", 2176 + "description": "The session's end time.", 2177 + "format": "date-time" 2178 + } 2179 + }, 2180 + "additionalProperties": false 2181 + } 2182 + }, 2183 + "additionalProperties": false 2184 + } 2185 + }, 2186 + "additionalProperties": false 2187 + }, 2188 + "examples": { 2189 + "json-example": { 2190 + "summary": "JSON example", 2191 + "value": "{\n \"event\": \"session.ended\",\n \"event_ts\": 1627906944384,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:22:24Z\",\n \"end_time\": \"2021-08-02T13:22:24Z\"\n }\n }\n}" 2192 + } 2193 + } 2194 + } 2195 + } 2196 + }, 2197 + "responses": { 2198 + "200": { 2199 + "content": { 2200 + "application/json": { 2201 + "schema": { 2202 + "type": "object", 2203 + "required": ["event", "event_ts", "payload"], 2204 + "properties": { 2205 + "event": { 2206 + "type": "string", 2207 + "enum": ["session.ended"], 2208 + "description": "The name of the event." 2209 + }, 2210 + "event_ts": { 2211 + "type": "integer", 2212 + "format": "int64", 2213 + "description": "Timestamp at which the event occurred, in milliseconds since epoch. The value of this field is returned in long(int64) format." 2214 + }, 2215 + "payload": { 2216 + "type": "object", 2217 + "required": ["account_id", "object"], 2218 + "properties": { 2219 + "account_id": { 2220 + "type": "string", 2221 + "description": "The Video SDK account ID." 2222 + }, 2223 + "object": { 2224 + "type": "object", 2225 + "description": "Information about the session.", 2226 + "required": [ 2227 + "id", 2228 + "session_id", 2229 + "session_name", 2230 + "start_time", 2231 + "end_time" 2232 + ], 2233 + "properties": { 2234 + "id": { 2235 + "type": "string", 2236 + "description": "The session ID.", 2237 + "deprecated": true 2238 + }, 2239 + "session_id": { 2240 + "type": "string", 2241 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2242 + }, 2243 + "session_name": { 2244 + "type": "string", 2245 + "description": "Session name." 2246 + }, 2247 + "session_key": { 2248 + "type": "string", 2249 + "description": "The Video SDK custom session ID." 2250 + }, 2251 + "start_time": { 2252 + "type": "string", 2253 + "description": "The session's start time.", 2254 + "format": "date-time" 2255 + }, 2256 + "end_time": { 2257 + "type": "string", 2258 + "description": "The session's end time.", 2259 + "format": "date-time" 2260 + } 2261 + }, 2262 + "additionalProperties": false 2263 + } 2264 + }, 2265 + "additionalProperties": false 2266 + } 2267 + }, 2268 + "additionalProperties": false 2269 + }, 2270 + "examples": { 2271 + "json-example": { 2272 + "summary": "JSON example", 2273 + "value": "{\n \"event\": \"session.ended\",\n \"event_ts\": 1627906944384,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:22:24Z\",\n \"end_time\": \"2021-08-02T13:22:24Z\"\n }\n }\n}" 2274 + } 2275 + } 2276 + } 2277 + } 2278 + } 2279 + } 2280 + } 2281 + }, 2282 + "session.started": { 2283 + "post": { 2284 + "tags": ["session"], 2285 + "operationId": "session.started", 2286 + "requestBody": { 2287 + "description": "# session.started\n---\n\n\nThe Session Start event is triggered when the first user (including host and co-host) joins.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your app with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* **Session Started** subscription enabled under the **Video SDK** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.started` event notification:\n\n\n\n**Event type**: `session.started`\n", 2288 + "content": { 2289 + "application/json": { 2290 + "schema": { 2291 + "type": "object", 2292 + "required": ["event", "event_ts", "payload"], 2293 + "properties": { 2294 + "event": { 2295 + "type": "string", 2296 + "enum": ["session.started"], 2297 + "description": "The name of the event." 2298 + }, 2299 + "event_ts": { 2300 + "type": "integer", 2301 + "format": "int64", 2302 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format." 2303 + }, 2304 + "payload": { 2305 + "type": "object", 2306 + "required": ["account_id", "object"], 2307 + "properties": { 2308 + "account_id": { 2309 + "type": "string", 2310 + "description": "The Video SDK account ID." 2311 + }, 2312 + "object": { 2313 + "type": "object", 2314 + "description": "Information about the session.", 2315 + "required": [ 2316 + "id", 2317 + "session_id", 2318 + "session_name", 2319 + "start_time" 2320 + ], 2321 + "properties": { 2322 + "id": { 2323 + "type": "string", 2324 + "description": "The session's ID.", 2325 + "deprecated": true 2326 + }, 2327 + "session_id": { 2328 + "type": "string", 2329 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2330 + }, 2331 + "session_name": { 2332 + "type": "string", 2333 + "description": "Session name." 2334 + }, 2335 + "session_key": { 2336 + "type": "string", 2337 + "description": "The Video SDK custom session ID." 2338 + }, 2339 + "start_time": { 2340 + "type": "string", 2341 + "description": "The session's start time.", 2342 + "format": "date-time" 2343 + } 2344 + }, 2345 + "additionalProperties": false 2346 + } 2347 + }, 2348 + "additionalProperties": false 2349 + } 2350 + }, 2351 + "additionalProperties": false 2352 + }, 2353 + "examples": { 2354 + "json-example": { 2355 + "summary": "JSON example", 2356 + "value": "{\n \"event\": \"session.started\",\n \"event_ts\": 1627906944384,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:22:24Z\"\n }\n }\n}" 2357 + } 2358 + } 2359 + } 2360 + } 2361 + }, 2362 + "responses": { 2363 + "200": { 2364 + "content": { 2365 + "application/json": { 2366 + "schema": { 2367 + "type": "object", 2368 + "required": ["event", "event_ts", "payload"], 2369 + "properties": { 2370 + "event": { 2371 + "type": "string", 2372 + "enum": ["session.started"], 2373 + "description": "The name of the event." 2374 + }, 2375 + "event_ts": { 2376 + "type": "integer", 2377 + "format": "int64", 2378 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format." 2379 + }, 2380 + "payload": { 2381 + "type": "object", 2382 + "required": ["account_id", "object"], 2383 + "properties": { 2384 + "account_id": { 2385 + "type": "string", 2386 + "description": "The Video SDK account ID." 2387 + }, 2388 + "object": { 2389 + "type": "object", 2390 + "description": "Information about the session.", 2391 + "required": [ 2392 + "id", 2393 + "session_id", 2394 + "session_name", 2395 + "start_time" 2396 + ], 2397 + "properties": { 2398 + "id": { 2399 + "type": "string", 2400 + "description": "The session's ID.", 2401 + "deprecated": true 2402 + }, 2403 + "session_id": { 2404 + "type": "string", 2405 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2406 + }, 2407 + "session_name": { 2408 + "type": "string", 2409 + "description": "Session name." 2410 + }, 2411 + "session_key": { 2412 + "type": "string", 2413 + "description": "The Video SDK custom session ID." 2414 + }, 2415 + "start_time": { 2416 + "type": "string", 2417 + "description": "The session's start time.", 2418 + "format": "date-time" 2419 + } 2420 + }, 2421 + "additionalProperties": false 2422 + } 2423 + }, 2424 + "additionalProperties": false 2425 + } 2426 + }, 2427 + "additionalProperties": false 2428 + }, 2429 + "examples": { 2430 + "json-example": { 2431 + "summary": "JSON example", 2432 + "value": "{\n \"event\": \"session.started\",\n \"event_ts\": 1627906944384,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:22:24Z\"\n }\n }\n}" 2433 + } 2434 + } 2435 + } 2436 + } 2437 + } 2438 + } 2439 + } 2440 + }, 2441 + "session.stream_ingestion_unbind": { 2442 + "post": { 2443 + "tags": ["session"], 2444 + "operationId": "session.stream_ingestion_unbind", 2445 + "requestBody": { 2446 + "description": "# session.stream_ingestion_unbind\nZoom triggers the **Session stream ingestion unbind** event every time a session unbinds a stream key.\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Session stream ingestion unbind** subscription enabled under the **Video SDK** event.\n\n\n**Event type**: `session.stream_ingestion_unbind`\n", 2447 + "content": { 2448 + "application/json": { 2449 + "schema": { 2450 + "type": "object", 2451 + "required": ["event", "event_ts", "payload"], 2452 + "properties": { 2453 + "event": { 2454 + "type": "string", 2455 + "enum": ["session.stream_ingestion_unbind"], 2456 + "description": "Event name." 2457 + }, 2458 + "event_ts": { 2459 + "type": "integer", 2460 + "format": "int64", 2461 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long (int64) format." 2462 + }, 2463 + "payload": { 2464 + "type": "object", 2465 + "required": ["account_id", "object"], 2466 + "properties": { 2467 + "account_id": { 2468 + "type": "string", 2469 + "description": "The Video SDK account ID." 2470 + }, 2471 + "object": { 2472 + "type": "object", 2473 + "description": "Information about the session.", 2474 + "required": [ 2475 + "session_id", 2476 + "session_name", 2477 + "stream_ingestion" 2478 + ], 2479 + "properties": { 2480 + "session_id": { 2481 + "type": "string", 2482 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2483 + }, 2484 + "session_name": { 2485 + "type": "string", 2486 + "description": "Session name." 2487 + }, 2488 + "session_key": { 2489 + "type": "string", 2490 + "description": "The Video SDK custom session ID." 2491 + }, 2492 + "stream_ingestion": { 2493 + "type": "object", 2494 + "description": "Information about the stream ingestion.", 2495 + "required": [ 2496 + "stream_id", 2497 + "stream_name", 2498 + "stream_key", 2499 + "stream_url", 2500 + "backup_stream_url" 2501 + ], 2502 + "properties": { 2503 + "stream_id": { 2504 + "type": "string", 2505 + "description": "The stream ingestion ID." 2506 + }, 2507 + "stream_name": { 2508 + "type": "string", 2509 + "description": "The stream ingestion name." 2510 + }, 2511 + "stream_description": { 2512 + "type": "string", 2513 + "description": "The stream ingestion description." 2514 + }, 2515 + "stream_key": { 2516 + "type": "string", 2517 + "description": "The stream ingestion key." 2518 + }, 2519 + "stream_url": { 2520 + "type": "string", 2521 + "description": "The stream URL." 2522 + }, 2523 + "backup_stream_url": { 2524 + "type": "string", 2525 + "description": "The backup stream URL." 2526 + } 2527 + } 2528 + } 2529 + }, 2530 + "additionalProperties": false 2531 + } 2532 + }, 2533 + "additionalProperties": false 2534 + } 2535 + }, 2536 + "additionalProperties": false 2537 + }, 2538 + "examples": { 2539 + "json-example": { 2540 + "summary": "JSON example", 2541 + "value": "{\n \"event\": \"session.stream_ingestion_unbind\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 2542 + } 2543 + } 2544 + } 2545 + } 2546 + }, 2547 + "responses": { 2548 + "200": { 2549 + "content": { 2550 + "application/json": { 2551 + "schema": { 2552 + "type": "object", 2553 + "required": ["event", "event_ts", "payload"], 2554 + "properties": { 2555 + "event": { 2556 + "type": "string", 2557 + "enum": ["session.stream_ingestion_unbind"], 2558 + "description": "Event name." 2559 + }, 2560 + "event_ts": { 2561 + "type": "integer", 2562 + "format": "int64", 2563 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long (int64) format." 2564 + }, 2565 + "payload": { 2566 + "type": "object", 2567 + "required": ["account_id", "object"], 2568 + "properties": { 2569 + "account_id": { 2570 + "type": "string", 2571 + "description": "The Video SDK account ID." 2572 + }, 2573 + "object": { 2574 + "type": "object", 2575 + "description": "Information about the session.", 2576 + "required": [ 2577 + "session_id", 2578 + "session_name", 2579 + "stream_ingestion" 2580 + ], 2581 + "properties": { 2582 + "session_id": { 2583 + "type": "string", 2584 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2585 + }, 2586 + "session_name": { 2587 + "type": "string", 2588 + "description": "Session name." 2589 + }, 2590 + "session_key": { 2591 + "type": "string", 2592 + "description": "The Video SDK custom session ID." 2593 + }, 2594 + "stream_ingestion": { 2595 + "type": "object", 2596 + "description": "Information about the stream ingestion.", 2597 + "required": [ 2598 + "stream_id", 2599 + "stream_name", 2600 + "stream_key", 2601 + "stream_url", 2602 + "backup_stream_url" 2603 + ], 2604 + "properties": { 2605 + "stream_id": { 2606 + "type": "string", 2607 + "description": "The stream ingestion ID." 2608 + }, 2609 + "stream_name": { 2610 + "type": "string", 2611 + "description": "The stream ingestion name." 2612 + }, 2613 + "stream_description": { 2614 + "type": "string", 2615 + "description": "The stream ingestion description." 2616 + }, 2617 + "stream_key": { 2618 + "type": "string", 2619 + "description": "The stream ingestion key." 2620 + }, 2621 + "stream_url": { 2622 + "type": "string", 2623 + "description": "The stream URL." 2624 + }, 2625 + "backup_stream_url": { 2626 + "type": "string", 2627 + "description": "The backup stream URL." 2628 + } 2629 + } 2630 + } 2631 + }, 2632 + "additionalProperties": false 2633 + } 2634 + }, 2635 + "additionalProperties": false 2636 + } 2637 + }, 2638 + "additionalProperties": false 2639 + }, 2640 + "examples": { 2641 + "json-example": { 2642 + "summary": "JSON example", 2643 + "value": "{\n \"event\": \"session.stream_ingestion_unbind\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 2644 + } 2645 + } 2646 + } 2647 + } 2648 + } 2649 + } 2650 + } 2651 + }, 2652 + "session.live_streaming_started": { 2653 + "post": { 2654 + "tags": ["session"], 2655 + "operationId": "session.live_streaming_started", 2656 + "requestBody": { 2657 + "description": "# session.live_streaming_started\n---\n\n\nThe Session Live Streaming Started event is triggered every time a user starts a live stream.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your app with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* **Session Live Streaming Started** subscription enabled under the **Video SDK** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.live_streaming_started` event notification:\n\n\n\n**Event type**: `session.live_streaming_started`\n", 2658 + "content": { 2659 + "application/json": { 2660 + "schema": { 2661 + "type": "object", 2662 + "required": ["event", "event_ts", "payload"], 2663 + "properties": { 2664 + "event": { 2665 + "type": "string", 2666 + "enum": ["session.live_streaming_started"], 2667 + "description": "Name of the event." 2668 + }, 2669 + "event_ts": { 2670 + "type": "integer", 2671 + "format": "int64", 2672 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format." 2673 + }, 2674 + "payload": { 2675 + "type": "object", 2676 + "required": ["account_id", "object"], 2677 + "properties": { 2678 + "account_id": { 2679 + "type": "string", 2680 + "description": "The Video SDK account ID." 2681 + }, 2682 + "object": { 2683 + "type": "object", 2684 + "description": "Information about the session.", 2685 + "required": [ 2686 + "id", 2687 + "session_id", 2688 + "session_name", 2689 + "start_time", 2690 + "live_streaming" 2691 + ], 2692 + "properties": { 2693 + "id": { 2694 + "type": "string", 2695 + "description": "The session ID.", 2696 + "deprecated": true 2697 + }, 2698 + "session_id": { 2699 + "type": "string", 2700 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2701 + }, 2702 + "session_name": { 2703 + "type": "string", 2704 + "description": "Session name." 2705 + }, 2706 + "session_key": { 2707 + "type": "string", 2708 + "description": "The Video SDK custom session ID." 2709 + }, 2710 + "start_time": { 2711 + "type": "string", 2712 + "description": "The session's start time.", 2713 + "format": "date-time" 2714 + }, 2715 + "live_streaming": { 2716 + "type": "object", 2717 + "description": "Information about the participant.", 2718 + "required": [ 2719 + "service", 2720 + "custom_live_streaming_settings", 2721 + "date_time" 2722 + ], 2723 + "properties": { 2724 + "service": { 2725 + "type": "string", 2726 + "description": "The name of the Live Streaming service.", 2727 + "enum": [ 2728 + "Facebook", 2729 + "Workplace_by_Facebook", 2730 + "YouTube", 2731 + "Custom_Live_Streaming_Service" 2732 + ] 2733 + }, 2734 + "custom_live_streaming_settings": { 2735 + "type": "object", 2736 + "description": "The live stream settings.", 2737 + "required": [ 2738 + "stream_url", 2739 + "stream_key", 2740 + "page_url" 2741 + ], 2742 + "properties": { 2743 + "stream_url": { 2744 + "type": "string", 2745 + "description": "The stream's URL." 2746 + }, 2747 + "stream_key": { 2748 + "type": "string", 2749 + "description": "The stream's key." 2750 + }, 2751 + "page_url": { 2752 + "type": "string", 2753 + "description": "The live stream's page URL." 2754 + }, 2755 + "resolution": { 2756 + "type": "string", 2757 + "description": "The number of pixels in each dimension that the video camera can display." 2758 + } 2759 + } 2760 + }, 2761 + "date_time": { 2762 + "type": "string", 2763 + "description": "The live stream's start time.", 2764 + "format": "date-time" 2765 + } 2766 + } 2767 + } 2768 + }, 2769 + "additionalProperties": false 2770 + } 2771 + }, 2772 + "additionalProperties": false 2773 + } 2774 + }, 2775 + "additionalProperties": false 2776 + }, 2777 + "examples": { 2778 + "json-example": { 2779 + "summary": "JSON example", 2780 + "value": "{\n \"event\": \"session.live_streaming_started\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:03:32Z\",\n \"live_streaming\": {\n \"service\": \"Custom_Live_Streaming_Service\",\n \"custom_live_streaming_settings\": {\n \"stream_url\": \"https://example.com/livestream\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"page_url\": \"https://example.com/livestream/123\",\n\t\t \"resolution\": \"1080p\"\n },\n \"date_time\": \"2021-08-02T12:22:45Z\"\n }\n }\n }\n}" 2781 + } 2782 + } 2783 + } 2784 + } 2785 + }, 2786 + "responses": { 2787 + "200": { 2788 + "content": { 2789 + "application/json": { 2790 + "schema": { 2791 + "type": "object", 2792 + "required": ["event", "event_ts", "payload"], 2793 + "properties": { 2794 + "event": { 2795 + "type": "string", 2796 + "enum": ["session.live_streaming_started"], 2797 + "description": "Name of the event." 2798 + }, 2799 + "event_ts": { 2800 + "type": "integer", 2801 + "format": "int64", 2802 + "description": "Timestamp (in milliseconds since epoch) at which the event occurred. The value of this field is returned in long(int64) format." 2803 + }, 2804 + "payload": { 2805 + "type": "object", 2806 + "required": ["account_id", "object"], 2807 + "properties": { 2808 + "account_id": { 2809 + "type": "string", 2810 + "description": "The Video SDK account ID." 2811 + }, 2812 + "object": { 2813 + "type": "object", 2814 + "description": "Information about the session.", 2815 + "required": [ 2816 + "id", 2817 + "session_id", 2818 + "session_name", 2819 + "start_time", 2820 + "live_streaming" 2821 + ], 2822 + "properties": { 2823 + "id": { 2824 + "type": "string", 2825 + "description": "The session ID.", 2826 + "deprecated": true 2827 + }, 2828 + "session_id": { 2829 + "type": "string", 2830 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2831 + }, 2832 + "session_name": { 2833 + "type": "string", 2834 + "description": "Session name." 2835 + }, 2836 + "session_key": { 2837 + "type": "string", 2838 + "description": "The Video SDK custom session ID." 2839 + }, 2840 + "start_time": { 2841 + "type": "string", 2842 + "description": "The session's start time.", 2843 + "format": "date-time" 2844 + }, 2845 + "live_streaming": { 2846 + "type": "object", 2847 + "description": "Information about the participant.", 2848 + "required": [ 2849 + "service", 2850 + "custom_live_streaming_settings", 2851 + "date_time" 2852 + ], 2853 + "properties": { 2854 + "service": { 2855 + "type": "string", 2856 + "description": "The name of the Live Streaming service.", 2857 + "enum": [ 2858 + "Facebook", 2859 + "Workplace_by_Facebook", 2860 + "YouTube", 2861 + "Custom_Live_Streaming_Service" 2862 + ] 2863 + }, 2864 + "custom_live_streaming_settings": { 2865 + "type": "object", 2866 + "description": "The live stream settings.", 2867 + "required": [ 2868 + "stream_url", 2869 + "stream_key", 2870 + "page_url" 2871 + ], 2872 + "properties": { 2873 + "stream_url": { 2874 + "type": "string", 2875 + "description": "The stream's URL." 2876 + }, 2877 + "stream_key": { 2878 + "type": "string", 2879 + "description": "The stream's key." 2880 + }, 2881 + "page_url": { 2882 + "type": "string", 2883 + "description": "The live stream's page URL." 2884 + }, 2885 + "resolution": { 2886 + "type": "string", 2887 + "description": "The number of pixels in each dimension that the video camera can display." 2888 + } 2889 + } 2890 + }, 2891 + "date_time": { 2892 + "type": "string", 2893 + "description": "The live stream's start time.", 2894 + "format": "date-time" 2895 + } 2896 + } 2897 + } 2898 + }, 2899 + "additionalProperties": false 2900 + } 2901 + }, 2902 + "additionalProperties": false 2903 + } 2904 + }, 2905 + "additionalProperties": false 2906 + }, 2907 + "examples": { 2908 + "json-example": { 2909 + "summary": "JSON example", 2910 + "value": "{\n \"event\": \"session.live_streaming_started\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"id\": \"BrgGrWeZSwaXkLBTpvmmvg==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-08-02T12:03:32Z\",\n \"live_streaming\": {\n \"service\": \"Custom_Live_Streaming_Service\",\n \"custom_live_streaming_settings\": {\n \"stream_url\": \"https://example.com/livestream\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"page_url\": \"https://example.com/livestream/123\",\n\t\t \"resolution\": \"1080p\"\n },\n \"date_time\": \"2021-08-02T12:22:45Z\"\n }\n }\n }\n}" 2911 + } 2912 + } 2913 + } 2914 + } 2915 + } 2916 + } 2917 + } 2918 + }, 2919 + "session.user_room_system_callout_missed": { 2920 + "post": { 2921 + "tags": ["session"], 2922 + "operationId": "session.user_room_system_callout_missed", 2923 + "requestBody": { 2924 + "description": "# session.user_room_system_callout_missed\n\nThe **Invited party missed a session invitation through phone (call out) via Zoom room** event is triggered every time an invitation to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035) times out.\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n* A valid **Event Notification Endpoint URL**.\n* The **Invited party missed a session invitation through phone (call out) via Zoom room** subscription enabled under the **Session** event.\n\n\n\n**Event type**: `session.user_room_system_callout_missed`\n", 2925 + "content": { 2926 + "application/json": { 2927 + "schema": { 2928 + "type": "object", 2929 + "required": ["event", "event_ts", "payload"], 2930 + "properties": { 2931 + "event": { 2932 + "type": "string", 2933 + "description": "The name of the event." 2934 + }, 2935 + "event_ts": { 2936 + "type": "integer", 2937 + "format": "int64", 2938 + "description": "A timestamp at which the event occurred." 2939 + }, 2940 + "payload": { 2941 + "type": "object", 2942 + "required": ["account_id", "object"], 2943 + "properties": { 2944 + "account_id": { 2945 + "type": "string", 2946 + "description": "The account ID of the session host." 2947 + }, 2948 + "object": { 2949 + "type": "object", 2950 + "description": "Information about the session.", 2951 + "required": [ 2952 + "session_id", 2953 + "session_name", 2954 + "host_id", 2955 + "message_id", 2956 + "inviter_name", 2957 + "participant" 2958 + ], 2959 + "properties": { 2960 + "id": { 2961 + "type": "integer", 2962 + "format": "int64", 2963 + "description": "The session ID.", 2964 + "deprecated": true 2965 + }, 2966 + "uuid": { 2967 + "type": "string", 2968 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 2969 + "deprecated": true 2970 + }, 2971 + "session_id": { 2972 + "type": "string", 2973 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 2974 + }, 2975 + "session_name": { 2976 + "type": "string", 2977 + "description": "Session name." 2978 + }, 2979 + "host_id": { 2980 + "type": "string", 2981 + "description": "The user ID of the session host." 2982 + }, 2983 + "message_id": { 2984 + "type": "string", 2985 + "description": "The request unique identifier (UUID)." 2986 + }, 2987 + "inviter_name": { 2988 + "type": "string", 2989 + "description": "The user name of the event's trigger." 2990 + }, 2991 + "participant": { 2992 + "type": "object", 2993 + "description": "Information about the invited participant.", 2994 + "required": ["call_type", "device_ip"], 2995 + "properties": { 2996 + "call_type": { 2997 + "type": "string", 2998 + "description": "The type of call out. Use a value of h323 or sip." 2999 + }, 3000 + "device_ip": { 3001 + "type": "string", 3002 + "description": "The user's device IP address." 3003 + } 3004 + }, 3005 + "additionalProperties": true 3006 + } 3007 + }, 3008 + "additionalProperties": false 3009 + } 3010 + }, 3011 + "additionalProperties": false 3012 + } 3013 + }, 3014 + "additionalProperties": false 3015 + }, 3016 + "examples": { 3017 + "json-example": { 3018 + "summary": "JSON example", 3019 + "value": "{\n \"event\": \"session.user_room_system_callout_missed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 3020 + } 3021 + } 3022 + } 3023 + } 3024 + }, 3025 + "responses": { 3026 + "200": { 3027 + "content": { 3028 + "application/json": { 3029 + "schema": { 3030 + "type": "object", 3031 + "required": ["event", "event_ts", "payload"], 3032 + "properties": { 3033 + "event": { 3034 + "type": "string", 3035 + "description": "The name of the event." 3036 + }, 3037 + "event_ts": { 3038 + "type": "integer", 3039 + "format": "int64", 3040 + "description": "A timestamp at which the event occurred." 3041 + }, 3042 + "payload": { 3043 + "type": "object", 3044 + "required": ["account_id", "object"], 3045 + "properties": { 3046 + "account_id": { 3047 + "type": "string", 3048 + "description": "The account ID of the session host." 3049 + }, 3050 + "object": { 3051 + "type": "object", 3052 + "description": "Information about the session.", 3053 + "required": [ 3054 + "session_id", 3055 + "session_name", 3056 + "host_id", 3057 + "message_id", 3058 + "inviter_name", 3059 + "participant" 3060 + ], 3061 + "properties": { 3062 + "id": { 3063 + "type": "integer", 3064 + "format": "int64", 3065 + "description": "The session ID.", 3066 + "deprecated": true 3067 + }, 3068 + "uuid": { 3069 + "type": "string", 3070 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 3071 + "deprecated": true 3072 + }, 3073 + "session_id": { 3074 + "type": "string", 3075 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3076 + }, 3077 + "session_name": { 3078 + "type": "string", 3079 + "description": "Session name." 3080 + }, 3081 + "host_id": { 3082 + "type": "string", 3083 + "description": "The user ID of the session host." 3084 + }, 3085 + "message_id": { 3086 + "type": "string", 3087 + "description": "The request unique identifier (UUID)." 3088 + }, 3089 + "inviter_name": { 3090 + "type": "string", 3091 + "description": "The user name of the event's trigger." 3092 + }, 3093 + "participant": { 3094 + "type": "object", 3095 + "description": "Information about the invited participant.", 3096 + "required": ["call_type", "device_ip"], 3097 + "properties": { 3098 + "call_type": { 3099 + "type": "string", 3100 + "description": "The type of call out. Use a value of h323 or sip." 3101 + }, 3102 + "device_ip": { 3103 + "type": "string", 3104 + "description": "The user's device IP address." 3105 + } 3106 + }, 3107 + "additionalProperties": true 3108 + } 3109 + }, 3110 + "additionalProperties": false 3111 + } 3112 + }, 3113 + "additionalProperties": false 3114 + } 3115 + }, 3116 + "additionalProperties": false 3117 + }, 3118 + "examples": { 3119 + "json-example": { 3120 + "summary": "JSON example", 3121 + "value": "{\n \"event\": \"session.user_room_system_callout_missed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 3122 + } 3123 + } 3124 + } 3125 + } 3126 + } 3127 + } 3128 + } 3129 + }, 3130 + "session.user_phone_callout_accepted": { 3131 + "post": { 3132 + "tags": ["session"], 3133 + "operationId": "session.user_phone_callout_accepted", 3134 + "requestBody": { 3135 + "description": "# session.user_phone_callout_accepted\n\nThe **Invited party answered a session invitation through phone (call out)** event is triggered every time a user accepts an invitation to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Invited party answered a session invitation through phone (call out)** subscription enabled under the **Session** event.\n\n\n\n**Event type**: `session.user_phone_callout_accepted`\n", 3136 + "content": { 3137 + "application/json": { 3138 + "schema": { 3139 + "type": "object", 3140 + "required": ["event", "event_ts", "payload"], 3141 + "properties": { 3142 + "event": { 3143 + "type": "string", 3144 + "description": "The name of the event." 3145 + }, 3146 + "event_ts": { 3147 + "type": "integer", 3148 + "format": "int64", 3149 + "description": "A timestamp at which the event occurred." 3150 + }, 3151 + "payload": { 3152 + "type": "object", 3153 + "required": ["account_id", "object"], 3154 + "properties": { 3155 + "account_id": { 3156 + "type": "string", 3157 + "description": "The account ID of the session host." 3158 + }, 3159 + "object": { 3160 + "type": "object", 3161 + "description": "Information about the session.", 3162 + "required": [ 3163 + "session_id", 3164 + "session_name", 3165 + "session_key", 3166 + "user_key", 3167 + "host_id", 3168 + "participant" 3169 + ], 3170 + "properties": { 3171 + "id": { 3172 + "type": "integer", 3173 + "format": "int64", 3174 + "description": "The session ID.", 3175 + "deprecated": true 3176 + }, 3177 + "uuid": { 3178 + "type": "string", 3179 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 3180 + "deprecated": true 3181 + }, 3182 + "session_id": { 3183 + "type": "string", 3184 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3185 + }, 3186 + "session_name": { 3187 + "type": "string", 3188 + "description": "Session name." 3189 + }, 3190 + "session_key": { 3191 + "type": "string", 3192 + "description": "The Video SDK custom session ID." 3193 + }, 3194 + "user_key": { 3195 + "type": "string", 3196 + "description": "Another identifier for the inviter. Can be a number or characters." 3197 + }, 3198 + "host_id": { 3199 + "type": "string", 3200 + "description": "The user ID of the session host." 3201 + }, 3202 + "participant": { 3203 + "type": "object", 3204 + "description": "Information about the invited participant.", 3205 + "required": [ 3206 + "invitee_name", 3207 + "phone_number", 3208 + "from_number" 3209 + ], 3210 + "properties": { 3211 + "invitee_name": { 3212 + "type": "string", 3213 + "description": "The user's name to display in the session." 3214 + }, 3215 + "phone_number": { 3216 + "type": "integer", 3217 + "format": "int64", 3218 + "description": "The user's phone number." 3219 + }, 3220 + "from_number": { 3221 + "type": "integer", 3222 + "format": "int64", 3223 + "description": "The number used to call out to the invited user." 3224 + } 3225 + }, 3226 + "additionalProperties": false 3227 + } 3228 + }, 3229 + "additionalProperties": false 3230 + } 3231 + }, 3232 + "additionalProperties": false 3233 + } 3234 + }, 3235 + "additionalProperties": false 3236 + }, 3237 + "examples": { 3238 + "json-example": { 3239 + "summary": "JSON example", 3240 + "value": "{\n \"event\": \"session.user_phone_callout_accepted\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 3241 + } 3242 + } 3243 + } 3244 + } 3245 + }, 3246 + "responses": { 3247 + "200": { 3248 + "content": { 3249 + "application/json": { 3250 + "schema": { 3251 + "type": "object", 3252 + "required": ["event", "event_ts", "payload"], 3253 + "properties": { 3254 + "event": { 3255 + "type": "string", 3256 + "description": "The name of the event." 3257 + }, 3258 + "event_ts": { 3259 + "type": "integer", 3260 + "format": "int64", 3261 + "description": "A timestamp at which the event occurred." 3262 + }, 3263 + "payload": { 3264 + "type": "object", 3265 + "required": ["account_id", "object"], 3266 + "properties": { 3267 + "account_id": { 3268 + "type": "string", 3269 + "description": "The account ID of the session host." 3270 + }, 3271 + "object": { 3272 + "type": "object", 3273 + "description": "Information about the session.", 3274 + "required": [ 3275 + "session_id", 3276 + "session_name", 3277 + "session_key", 3278 + "user_key", 3279 + "host_id", 3280 + "participant" 3281 + ], 3282 + "properties": { 3283 + "id": { 3284 + "type": "integer", 3285 + "format": "int64", 3286 + "description": "The session ID.", 3287 + "deprecated": true 3288 + }, 3289 + "uuid": { 3290 + "type": "string", 3291 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 3292 + "deprecated": true 3293 + }, 3294 + "session_id": { 3295 + "type": "string", 3296 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3297 + }, 3298 + "session_name": { 3299 + "type": "string", 3300 + "description": "Session name." 3301 + }, 3302 + "session_key": { 3303 + "type": "string", 3304 + "description": "The Video SDK custom session ID." 3305 + }, 3306 + "user_key": { 3307 + "type": "string", 3308 + "description": "Another identifier for the inviter. Can be a number or characters." 3309 + }, 3310 + "host_id": { 3311 + "type": "string", 3312 + "description": "The user ID of the session host." 3313 + }, 3314 + "participant": { 3315 + "type": "object", 3316 + "description": "Information about the invited participant.", 3317 + "required": [ 3318 + "invitee_name", 3319 + "phone_number", 3320 + "from_number" 3321 + ], 3322 + "properties": { 3323 + "invitee_name": { 3324 + "type": "string", 3325 + "description": "The user's name to display in the session." 3326 + }, 3327 + "phone_number": { 3328 + "type": "integer", 3329 + "format": "int64", 3330 + "description": "The user's phone number." 3331 + }, 3332 + "from_number": { 3333 + "type": "integer", 3334 + "format": "int64", 3335 + "description": "The number used to call out to the invited user." 3336 + } 3337 + }, 3338 + "additionalProperties": false 3339 + } 3340 + }, 3341 + "additionalProperties": false 3342 + } 3343 + }, 3344 + "additionalProperties": false 3345 + } 3346 + }, 3347 + "additionalProperties": false 3348 + }, 3349 + "examples": { 3350 + "json-example": { 3351 + "summary": "JSON example", 3352 + "value": "{\n \"event\": \"session.user_phone_callout_accepted\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 3353 + } 3354 + } 3355 + } 3356 + } 3357 + } 3358 + } 3359 + } 3360 + }, 3361 + "session.user_left": { 3362 + "post": { 3363 + "tags": ["session"], 3364 + "operationId": "session.user_left", 3365 + "requestBody": { 3366 + "description": "# session.user_left\n\n\nThe Session User Left event is triggered every time a user (including host and co-host) leaves a session.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* Session User Left subscription enabled under the Video SDK event.\n\n\n\n**Event type**: `session.user_left`\n", 3367 + "content": { 3368 + "application/json": { 3369 + "schema": { 3370 + "type": "object", 3371 + "required": ["event", "event_ts", "payload"], 3372 + "properties": { 3373 + "event": { 3374 + "type": "string", 3375 + "enum": ["session.user_left"], 3376 + "description": "The event's name." 3377 + }, 3378 + "event_ts": { 3379 + "type": "integer", 3380 + "format": "int64", 3381 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 3382 + }, 3383 + "payload": { 3384 + "type": "object", 3385 + "required": ["account_id", "object"], 3386 + "properties": { 3387 + "account_id": { 3388 + "type": "string", 3389 + "description": "The Video SDK account ID." 3390 + }, 3391 + "object": { 3392 + "type": "object", 3393 + "description": "Information about the session. This object only returns updated properties.", 3394 + "required": [ 3395 + "id", 3396 + "session_id", 3397 + "session_name", 3398 + "user" 3399 + ], 3400 + "properties": { 3401 + "id": { 3402 + "type": "string", 3403 + "description": "The session ID." 3404 + }, 3405 + "session_id": { 3406 + "type": "string", 3407 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3408 + }, 3409 + "session_name": { 3410 + "type": "string", 3411 + "description": "Session name." 3412 + }, 3413 + "session_key": { 3414 + "type": "string", 3415 + "description": "The Video SDK custom session ID." 3416 + }, 3417 + "user": { 3418 + "type": "object", 3419 + "description": "Information about the user.", 3420 + "required": [ 3421 + "id", 3422 + "name", 3423 + "leave_time", 3424 + "participant_uuid" 3425 + ], 3426 + "properties": { 3427 + "id": { 3428 + "type": "string", 3429 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 3430 + }, 3431 + "name": { 3432 + "type": "string", 3433 + "description": "The user's username." 3434 + }, 3435 + "leave_time": { 3436 + "type": "string", 3437 + "description": "The time at which the user left the session.", 3438 + "format": "date-time" 3439 + }, 3440 + "leave_reason": { 3441 + "type": "string", 3442 + "description": "The reason why the user left the session, where $name is the participant's username: \n* $name left the session. \n* $name got disconnected from the session. \n* Host ended the session. \n* Host closed the session. \n* Host started a new session. \n* Network connection error. \n* Host did not join. \n* Exceeded free session minutes limit. \n* Removed by host. \n* Unknown reason. \n* Leave waiting room. \n* Removed by host from waiting room.", 3443 + "x-enum": [ 3444 + "$name left the session.", 3445 + "$name got disconnected from the session.", 3446 + "Host ended the session.", 3447 + "Host closed the session.", 3448 + "Host started a new session.", 3449 + "Network connection error.", 3450 + "Host did not join.", 3451 + "Exceeded free session minutes limit.", 3452 + "Removed by host.", 3453 + "Unknown reason.", 3454 + "Leave waiting room.", 3455 + "Removed by host from waiting room." 3456 + ] 3457 + }, 3458 + "user_key": { 3459 + "type": "string", 3460 + "description": "Another identifier for the user. Can be a number or characters." 3461 + }, 3462 + "phone_number": { 3463 + "type": "string", 3464 + "description": "Phone number of participant joined via PSTN." 3465 + }, 3466 + "participant_uuid": { 3467 + "type": "string", 3468 + "description": "The participant's UUID. This value is assigned to a participant upon joining a session and is only valid for the session's duration." 3469 + } 3470 + }, 3471 + "additionalProperties": false 3472 + } 3473 + }, 3474 + "additionalProperties": false 3475 + } 3476 + }, 3477 + "additionalProperties": false 3478 + } 3479 + }, 3480 + "additionalProperties": false 3481 + }, 3482 + "examples": { 3483 + "json-example": { 3484 + "summary": "JSON example", 3485 + "value": "{\n \"event\": \"session.user_left\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"account_id\": \"EFgHiJABC000DEfGHI\",\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"example\",\n \"leave_time\": \"2021-07-16T17:19:11Z\",\n \"leave_reason\": \"Jill Chill left the session.<br>Reason: Host ended the session.\",\n \"user_key\": \"ASD74dfDI854\",\n \"phone_number\": \"8615250064084\",\n \"participant_uuid\": \"55555AAAiAAAAAiAiAiiAii\"\n }\n }\n }\n}" 3486 + } 3487 + } 3488 + } 3489 + } 3490 + }, 3491 + "responses": { 3492 + "200": { 3493 + "content": { 3494 + "application/json": { 3495 + "schema": { 3496 + "type": "object", 3497 + "required": ["event", "event_ts", "payload"], 3498 + "properties": { 3499 + "event": { 3500 + "type": "string", 3501 + "enum": ["session.user_left"], 3502 + "description": "The event's name." 3503 + }, 3504 + "event_ts": { 3505 + "type": "integer", 3506 + "format": "int64", 3507 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 3508 + }, 3509 + "payload": { 3510 + "type": "object", 3511 + "required": ["account_id", "object"], 3512 + "properties": { 3513 + "account_id": { 3514 + "type": "string", 3515 + "description": "The Video SDK account ID." 3516 + }, 3517 + "object": { 3518 + "type": "object", 3519 + "description": "Information about the session. This object only returns updated properties.", 3520 + "required": [ 3521 + "id", 3522 + "session_id", 3523 + "session_name", 3524 + "user" 3525 + ], 3526 + "properties": { 3527 + "id": { 3528 + "type": "string", 3529 + "description": "The session ID." 3530 + }, 3531 + "session_id": { 3532 + "type": "string", 3533 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3534 + }, 3535 + "session_name": { 3536 + "type": "string", 3537 + "description": "Session name." 3538 + }, 3539 + "session_key": { 3540 + "type": "string", 3541 + "description": "The Video SDK custom session ID." 3542 + }, 3543 + "user": { 3544 + "type": "object", 3545 + "description": "Information about the user.", 3546 + "required": [ 3547 + "id", 3548 + "name", 3549 + "leave_time", 3550 + "participant_uuid" 3551 + ], 3552 + "properties": { 3553 + "id": { 3554 + "type": "string", 3555 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 3556 + }, 3557 + "name": { 3558 + "type": "string", 3559 + "description": "The user's username." 3560 + }, 3561 + "leave_time": { 3562 + "type": "string", 3563 + "description": "The time at which the user left the session.", 3564 + "format": "date-time" 3565 + }, 3566 + "leave_reason": { 3567 + "type": "string", 3568 + "description": "The reason why the user left the session, where $name is the participant's username: \n* $name left the session. \n* $name got disconnected from the session. \n* Host ended the session. \n* Host closed the session. \n* Host started a new session. \n* Network connection error. \n* Host did not join. \n* Exceeded free session minutes limit. \n* Removed by host. \n* Unknown reason. \n* Leave waiting room. \n* Removed by host from waiting room.", 3569 + "x-enum": [ 3570 + "$name left the session.", 3571 + "$name got disconnected from the session.", 3572 + "Host ended the session.", 3573 + "Host closed the session.", 3574 + "Host started a new session.", 3575 + "Network connection error.", 3576 + "Host did not join.", 3577 + "Exceeded free session minutes limit.", 3578 + "Removed by host.", 3579 + "Unknown reason.", 3580 + "Leave waiting room.", 3581 + "Removed by host from waiting room." 3582 + ] 3583 + }, 3584 + "user_key": { 3585 + "type": "string", 3586 + "description": "Another identifier for the user. Can be a number or characters." 3587 + }, 3588 + "phone_number": { 3589 + "type": "string", 3590 + "description": "Phone number of participant joined via PSTN." 3591 + }, 3592 + "participant_uuid": { 3593 + "type": "string", 3594 + "description": "The participant's UUID. This value is assigned to a participant upon joining a session and is only valid for the session's duration." 3595 + } 3596 + }, 3597 + "additionalProperties": false 3598 + } 3599 + }, 3600 + "additionalProperties": false 3601 + } 3602 + }, 3603 + "additionalProperties": false 3604 + } 3605 + }, 3606 + "additionalProperties": false 3607 + }, 3608 + "examples": { 3609 + "json-example": { 3610 + "summary": "JSON example", 3611 + "value": "{\n \"event\": \"session.user_left\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"account_id\": \"EFgHiJABC000DEfGHI\",\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"example\",\n \"leave_time\": \"2021-07-16T17:19:11Z\",\n \"leave_reason\": \"Jill Chill left the session.<br>Reason: Host ended the session.\",\n \"user_key\": \"ASD74dfDI854\",\n \"phone_number\": \"8615250064084\",\n \"participant_uuid\": \"55555AAAiAAAAAiAiAiiAii\"\n }\n }\n }\n}" 3612 + } 3613 + } 3614 + } 3615 + } 3616 + } 3617 + } 3618 + } 3619 + }, 3620 + "session.sharing_started": { 3621 + "post": { 3622 + "tags": ["session"], 3623 + "operationId": "session.sharing_started", 3624 + "requestBody": { 3625 + "description": "# session.sharing_started\n\n\nThe Session Sharing Started event is triggered every time a user starts sharing the screen during a session.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* **Session Sharing Started** subscription enabled under the **Video SDK** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.sharing_started` event notification:\n\n\n\n**Event type**: `session.sharing_started`\n", 3626 + "content": { 3627 + "application/json": { 3628 + "schema": { 3629 + "type": "object", 3630 + "required": ["event", "event_ts", "payload"], 3631 + "properties": { 3632 + "event": { 3633 + "type": "string", 3634 + "enum": ["session.sharing_started"], 3635 + "description": "The event's name." 3636 + }, 3637 + "event_ts": { 3638 + "type": "integer", 3639 + "format": "int64", 3640 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 3641 + }, 3642 + "payload": { 3643 + "type": "object", 3644 + "required": ["account_id", "object"], 3645 + "properties": { 3646 + "account_id": { 3647 + "type": "string", 3648 + "description": "The Video SDK account ID." 3649 + }, 3650 + "object": { 3651 + "type": "object", 3652 + "description": "Information about the session. This object only returns updated properties.", 3653 + "required": [ 3654 + "id", 3655 + "session_id", 3656 + "session_name", 3657 + "user" 3658 + ], 3659 + "properties": { 3660 + "id": { 3661 + "type": "string", 3662 + "description": "The session ID." 3663 + }, 3664 + "session_id": { 3665 + "type": "string", 3666 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3667 + }, 3668 + "session_name": { 3669 + "type": "string", 3670 + "description": "Session name." 3671 + }, 3672 + "session_key": { 3673 + "type": "string", 3674 + "description": "The Video SDK custom session ID." 3675 + }, 3676 + "user": { 3677 + "type": "object", 3678 + "description": "Information about the user.", 3679 + "required": ["id", "name", "sharing_details"], 3680 + "properties": { 3681 + "id": { 3682 + "type": "string", 3683 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 3684 + }, 3685 + "name": { 3686 + "type": "string", 3687 + "description": "The user's username." 3688 + }, 3689 + "user_key": { 3690 + "type": "string", 3691 + "description": "Another identifier for the user. Can be a number or characters." 3692 + }, 3693 + "sharing_details": { 3694 + "type": "object", 3695 + "description": "Information about the session's screen sharing.", 3696 + "required": ["content", "date_time"], 3697 + "properties": { 3698 + "content": { 3699 + "type": "string", 3700 + "description": "The type of shared content:\n* application — An application. For example, a web browser.\n* whiteboard — The Zoom [whiteboard](https://support.zoom.us/hc/en-us/articles/205677665-Sharing-a-whiteboard).\n* desktop — A user's desktop.\n* unknown — An unrecognized application, such as a third party app.", 3701 + "enum": [ 3702 + "application", 3703 + "whiteboard", 3704 + "desktop", 3705 + "unknown" 3706 + ] 3707 + }, 3708 + "date_time": { 3709 + "type": "string", 3710 + "format": "date-time", 3711 + "description": "The session's screen sharing date and time." 3712 + } 3713 + }, 3714 + "additionalProperties": false 3715 + } 3716 + }, 3717 + "additionalProperties": false 3718 + } 3719 + }, 3720 + "additionalProperties": false 3721 + } 3722 + }, 3723 + "additionalProperties": false 3724 + } 3725 + }, 3726 + "additionalProperties": false 3727 + }, 3728 + "examples": { 3729 + "json-example": { 3730 + "summary": "JSON example", 3731 + "value": "{\n \"event\": \"session.sharing_started\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"object\": {\n \"id\": \"4118UHIiRCAAAtBlDkcVyw==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"username\",\n \"user_key\": \"ASD74dfDI854\",\n \"sharing_details\": {\n \"date_time\": \"2019-07-16T17:19:11Z\",\n \"content\": \"application\"\n }\n }\n },\n \"account_id\": \"EPeQtiABC000VYxHMA\"\n }\n}" 3732 + } 3733 + } 3734 + } 3735 + } 3736 + }, 3737 + "responses": { 3738 + "200": { 3739 + "content": { 3740 + "application/json": { 3741 + "schema": { 3742 + "type": "object", 3743 + "required": ["event", "event_ts", "payload"], 3744 + "properties": { 3745 + "event": { 3746 + "type": "string", 3747 + "enum": ["session.sharing_started"], 3748 + "description": "The event's name." 3749 + }, 3750 + "event_ts": { 3751 + "type": "integer", 3752 + "format": "int64", 3753 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 3754 + }, 3755 + "payload": { 3756 + "type": "object", 3757 + "required": ["account_id", "object"], 3758 + "properties": { 3759 + "account_id": { 3760 + "type": "string", 3761 + "description": "The Video SDK account ID." 3762 + }, 3763 + "object": { 3764 + "type": "object", 3765 + "description": "Information about the session. This object only returns updated properties.", 3766 + "required": [ 3767 + "id", 3768 + "session_id", 3769 + "session_name", 3770 + "user" 3771 + ], 3772 + "properties": { 3773 + "id": { 3774 + "type": "string", 3775 + "description": "The session ID." 3776 + }, 3777 + "session_id": { 3778 + "type": "string", 3779 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3780 + }, 3781 + "session_name": { 3782 + "type": "string", 3783 + "description": "Session name." 3784 + }, 3785 + "session_key": { 3786 + "type": "string", 3787 + "description": "The Video SDK custom session ID." 3788 + }, 3789 + "user": { 3790 + "type": "object", 3791 + "description": "Information about the user.", 3792 + "required": ["id", "name", "sharing_details"], 3793 + "properties": { 3794 + "id": { 3795 + "type": "string", 3796 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 3797 + }, 3798 + "name": { 3799 + "type": "string", 3800 + "description": "The user's username." 3801 + }, 3802 + "user_key": { 3803 + "type": "string", 3804 + "description": "Another identifier for the user. Can be a number or characters." 3805 + }, 3806 + "sharing_details": { 3807 + "type": "object", 3808 + "description": "Information about the session's screen sharing.", 3809 + "required": ["content", "date_time"], 3810 + "properties": { 3811 + "content": { 3812 + "type": "string", 3813 + "description": "The type of shared content:\n* application — An application. For example, a web browser.\n* whiteboard — The Zoom [whiteboard](https://support.zoom.us/hc/en-us/articles/205677665-Sharing-a-whiteboard).\n* desktop — A user's desktop.\n* unknown — An unrecognized application, such as a third party app.", 3814 + "enum": [ 3815 + "application", 3816 + "whiteboard", 3817 + "desktop", 3818 + "unknown" 3819 + ] 3820 + }, 3821 + "date_time": { 3822 + "type": "string", 3823 + "format": "date-time", 3824 + "description": "The session's screen sharing date and time." 3825 + } 3826 + }, 3827 + "additionalProperties": false 3828 + } 3829 + }, 3830 + "additionalProperties": false 3831 + } 3832 + }, 3833 + "additionalProperties": false 3834 + } 3835 + }, 3836 + "additionalProperties": false 3837 + } 3838 + }, 3839 + "additionalProperties": false 3840 + }, 3841 + "examples": { 3842 + "json-example": { 3843 + "summary": "JSON example", 3844 + "value": "{\n \"event\": \"session.sharing_started\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"object\": {\n \"id\": \"4118UHIiRCAAAtBlDkcVyw==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"username\",\n \"user_key\": \"ASD74dfDI854\",\n \"sharing_details\": {\n \"date_time\": \"2019-07-16T17:19:11Z\",\n \"content\": \"application\"\n }\n }\n },\n \"account_id\": \"EPeQtiABC000VYxHMA\"\n }\n}" 3845 + } 3846 + } 3847 + } 3848 + } 3849 + } 3850 + } 3851 + } 3852 + }, 3853 + "session.user_phone_callout_canceled": { 3854 + "post": { 3855 + "tags": ["session"], 3856 + "operationId": "session.user_phone_callout_canceled", 3857 + "requestBody": { 3858 + "description": "# session.user_phone_callout_canceled\nThe **Invited party's phone (call out) canceled** event is triggered every time the inviter cancels the call out when they were invited to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Invited party's phone (call out) canceled** subscription enabled under the **Session** event.\n\n\n**Event type**: `session.user_phone_callout_canceled`\n", 3859 + "content": { 3860 + "application/json": { 3861 + "schema": { 3862 + "type": "object", 3863 + "required": ["event", "event_ts", "payload"], 3864 + "properties": { 3865 + "event": { 3866 + "type": "string", 3867 + "description": "The name of the event." 3868 + }, 3869 + "event_ts": { 3870 + "type": "integer", 3871 + "format": "int64", 3872 + "description": "A timestamp at which the event occurred." 3873 + }, 3874 + "payload": { 3875 + "type": "object", 3876 + "required": ["account_id", "object"], 3877 + "properties": { 3878 + "account_id": { 3879 + "type": "string", 3880 + "description": "The account ID of the session host." 3881 + }, 3882 + "object": { 3883 + "type": "object", 3884 + "description": "Information about the session.", 3885 + "required": [ 3886 + "session_id", 3887 + "session_name", 3888 + "session_key", 3889 + "user_key", 3890 + "participant" 3891 + ], 3892 + "properties": { 3893 + "session_id": { 3894 + "type": "string", 3895 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3896 + }, 3897 + "session_name": { 3898 + "type": "string", 3899 + "description": "Session name." 3900 + }, 3901 + "session_key": { 3902 + "type": "string", 3903 + "description": "The Video SDK custom session ID." 3904 + }, 3905 + "user_key": { 3906 + "type": "string", 3907 + "description": "Another identifier for the inviter. Can be a number or characters." 3908 + }, 3909 + "participant": { 3910 + "type": "object", 3911 + "description": "Information about the invited participant.", 3912 + "required": [ 3913 + "invitee_name", 3914 + "phone_number", 3915 + "from_number" 3916 + ], 3917 + "properties": { 3918 + "invitee_name": { 3919 + "type": "string", 3920 + "description": "The user's name to display in the session." 3921 + }, 3922 + "phone_number": { 3923 + "type": "integer", 3924 + "format": "int64", 3925 + "description": "The user's phone number." 3926 + }, 3927 + "from_number": { 3928 + "type": "integer", 3929 + "format": "int64", 3930 + "description": "The number used to call out to the invited user." 3931 + } 3932 + }, 3933 + "additionalProperties": false 3934 + } 3935 + }, 3936 + "additionalProperties": false 3937 + } 3938 + }, 3939 + "additionalProperties": false 3940 + } 3941 + }, 3942 + "additionalProperties": false 3943 + }, 3944 + "examples": { 3945 + "json-example": { 3946 + "summary": "JSON example", 3947 + "value": "{\n \"event\": \"session.user_phone_callout_canceled\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 3948 + } 3949 + } 3950 + } 3951 + } 3952 + }, 3953 + "responses": { 3954 + "200": { 3955 + "content": { 3956 + "application/json": { 3957 + "schema": { 3958 + "type": "object", 3959 + "required": ["event", "event_ts", "payload"], 3960 + "properties": { 3961 + "event": { 3962 + "type": "string", 3963 + "description": "The name of the event." 3964 + }, 3965 + "event_ts": { 3966 + "type": "integer", 3967 + "format": "int64", 3968 + "description": "A timestamp at which the event occurred." 3969 + }, 3970 + "payload": { 3971 + "type": "object", 3972 + "required": ["account_id", "object"], 3973 + "properties": { 3974 + "account_id": { 3975 + "type": "string", 3976 + "description": "The account ID of the session host." 3977 + }, 3978 + "object": { 3979 + "type": "object", 3980 + "description": "Information about the session.", 3981 + "required": [ 3982 + "session_id", 3983 + "session_name", 3984 + "session_key", 3985 + "user_key", 3986 + "participant" 3987 + ], 3988 + "properties": { 3989 + "session_id": { 3990 + "type": "string", 3991 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 3992 + }, 3993 + "session_name": { 3994 + "type": "string", 3995 + "description": "Session name." 3996 + }, 3997 + "session_key": { 3998 + "type": "string", 3999 + "description": "The Video SDK custom session ID." 4000 + }, 4001 + "user_key": { 4002 + "type": "string", 4003 + "description": "Another identifier for the inviter. Can be a number or characters." 4004 + }, 4005 + "participant": { 4006 + "type": "object", 4007 + "description": "Information about the invited participant.", 4008 + "required": [ 4009 + "invitee_name", 4010 + "phone_number", 4011 + "from_number" 4012 + ], 4013 + "properties": { 4014 + "invitee_name": { 4015 + "type": "string", 4016 + "description": "The user's name to display in the session." 4017 + }, 4018 + "phone_number": { 4019 + "type": "integer", 4020 + "format": "int64", 4021 + "description": "The user's phone number." 4022 + }, 4023 + "from_number": { 4024 + "type": "integer", 4025 + "format": "int64", 4026 + "description": "The number used to call out to the invited user." 4027 + } 4028 + }, 4029 + "additionalProperties": false 4030 + } 4031 + }, 4032 + "additionalProperties": false 4033 + } 4034 + }, 4035 + "additionalProperties": false 4036 + } 4037 + }, 4038 + "additionalProperties": false 4039 + }, 4040 + "examples": { 4041 + "json-example": { 4042 + "summary": "JSON example", 4043 + "value": "{\n \"event\": \"session.user_phone_callout_canceled\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 4044 + } 4045 + } 4046 + } 4047 + } 4048 + } 4049 + } 4050 + } 4051 + }, 4052 + "session.recording_transcript_completed": { 4053 + "post": { 4054 + "tags": ["session"], 4055 + "operationId": "session.recording_transcript_completed", 4056 + "requestBody": { 4057 + "description": "# session.recording_transcript_completed\n---\n\nEvent: `session.recording_transcript_completed`\n\n## Event description\n\nThe **Session recording transcript completed** event is triggered every time the transcript of the recording of a session becomes available to view or download.\n\nOnly a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n * A valid Event Notification Endpoint URL.\n * Session recording transcript completed subscription enabled under the Recording event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_transcript_completed` event notification:\n\n\n\n**Event type**: `session.recording_transcript_completed`\n", 4058 + "content": { 4059 + "application/json": { 4060 + "schema": { 4061 + "type": "object", 4062 + "required": ["event", "event_ts", "download_token", "payload"], 4063 + "properties": { 4064 + "event": { 4065 + "type": "string", 4066 + "enum": ["session.recording_transcript_completed"], 4067 + "description": "The event's name." 4068 + }, 4069 + "event_ts": { 4070 + "type": "integer", 4071 + "format": "int64", 4072 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 4073 + }, 4074 + "download_token": { 4075 + "type": "string", 4076 + "description": "A generated token used to download the recording. The download token only lasts for 24 hours after its creation and you can only download the file within 24 hours of receiving the event notification. You can either pass the download_token as a Bearer token in the Authorization header of your HTTP request (recommended) or include it as a query parameter. See the following for examples. \n\n **Using an Authorization header (Recommended)** \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {download_token} \\\n --header 'content-type: application/json'\n \n\n**Using a query parameter** \n\n \n{download_url}/?access_token={download_token}\n \n\n For example: https://zoom.us/recording/download/123456?access_token=abcdefgh" 4077 + }, 4078 + "payload": { 4079 + "type": "object", 4080 + "required": ["account_id", "object"], 4081 + "properties": { 4082 + "account_id": { 4083 + "type": "string", 4084 + "description": "The Video SDK account ID." 4085 + }, 4086 + "object": { 4087 + "type": "object", 4088 + "description": "Information about the session. This object only returns updated properties.", 4089 + "required": [ 4090 + "session_id", 4091 + "session_name", 4092 + "session_key", 4093 + "start_time", 4094 + "timezone", 4095 + "recording_files" 4096 + ], 4097 + "properties": { 4098 + "session_id": { 4099 + "type": "string", 4100 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 4101 + }, 4102 + "session_name": { 4103 + "type": "string", 4104 + "description": "Session name." 4105 + }, 4106 + "session_key": { 4107 + "type": "string", 4108 + "description": "The Video SDK custom session ID." 4109 + }, 4110 + "start_time": { 4111 + "type": "string", 4112 + "format": "date-time", 4113 + "description": "The time at which the session started." 4114 + }, 4115 + "timezone": { 4116 + "type": "string", 4117 + "description": "The user's timezone." 4118 + }, 4119 + "recording_files": { 4120 + "type": "array", 4121 + "title": "Recording file List", 4122 + "description": "List of recording file.", 4123 + "items": { 4124 + "type": "object", 4125 + "properties": { 4126 + "id": { 4127 + "type": "string", 4128 + "description": "The recording file ID. Included in the response of general query." 4129 + }, 4130 + "recording_start": { 4131 + "type": "string", 4132 + "description": "The recording start time." 4133 + }, 4134 + "recording_end": { 4135 + "type": "string", 4136 + "description": "The recording end time. Response in general query." 4137 + }, 4138 + "file_name": { 4139 + "type": "string", 4140 + "description": "Name of the file." 4141 + }, 4142 + "file_path": { 4143 + "type": "string", 4144 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 4145 + }, 4146 + "file_type": { 4147 + "type": "string", 4148 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the \"Add a timestamp to the recording\" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile.\n<br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format.\n\n<br>\n\nA recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br>\n\tid, status, file_size, recording_type.", 4149 + "enum": [ 4150 + "MP4", 4151 + "M4A", 4152 + "CHAT", 4153 + "TRANSCRIPT", 4154 + "CSV", 4155 + "CC", 4156 + "TB", 4157 + "CHAT_MESSAGE", 4158 + "TIMELINE" 4159 + ] 4160 + }, 4161 + "file_size": { 4162 + "type": "number", 4163 + "description": "The recording file size." 4164 + }, 4165 + "file_extension": { 4166 + "type": "string", 4167 + "description": "The archived file's file extension.", 4168 + "enum": [ 4169 + "MP4", 4170 + "M4A", 4171 + "TXT", 4172 + "VTT", 4173 + "CSV", 4174 + "JSON", 4175 + "JPG" 4176 + ] 4177 + }, 4178 + "download_url": { 4179 + "type": "string", 4180 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). You can either pass the generated JWT as a Bearer token in the Authorization header of your HTTP request (recommended) or include it as a query parameter at the end of the URL. See the following for examples. \n\n **Using an Authorization header (Recommended)** \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n \n\n**Using a query parameter** \n\n \n{download_url}/?access_token={download_token}\n \n\n For example: https://{base-domain}/recording/download/{path-to-file-download}?access_token={JWT}." 4181 + }, 4182 + "status": { 4183 + "type": "string", 4184 + "description": "The recording status.", 4185 + "enum": ["completed"] 4186 + }, 4187 + "recording_type": { 4188 + "type": "string", 4189 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 4190 + "enum": [ 4191 + "shared_screen_with_speaker_view(CC)", 4192 + "shared_screen_with_speaker_view", 4193 + "shared_screen_with_gallery_view", 4194 + "gallery_view", 4195 + "shared_screen", 4196 + "audio_only", 4197 + "audio_transcript", 4198 + "chat_file", 4199 + "active_speaker", 4200 + "host_video", 4201 + "audio_only_each_participant", 4202 + "cc_transcript", 4203 + "closed_caption", 4204 + "poll", 4205 + "timeline", 4206 + "thumbnail", 4207 + "chat_message" 4208 + ] 4209 + } 4210 + } 4211 + } 4212 + } 4213 + }, 4214 + "additionalProperties": false 4215 + } 4216 + }, 4217 + "additionalProperties": false 4218 + } 4219 + }, 4220 + "additionalProperties": false 4221 + }, 4222 + "examples": { 4223 + "json-example": { 4224 + "summary": "JSON example", 4225 + "value": "{\n \"event\": \"session.recording_transcript_completed\",\n \"event_ts\": 1626230691572,\n \"download_token\": \"abJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJodHRwczovL2V2ZW50Lnpvb20udXMiLCJhY2NvdW50SWQiOiJNdDZzdjR1MFRBeVBrd2dzTDJseGlBIiwiYXVkIjoiaHR0cHM6Ly9vYXV0aC56b29tLnVzIiwibWlkIjoieFp3SEc0c3BRU2VuekdZWG16dnpiUT09IiwiZXhwIjoxNjI2MTM5NTA3LCJ1c2VySWQiOiJEWUhyZHBqclMzdWFPZjdkUGtrZzh3In0.a6KetiC6BlkDhf1dP4KBGUE1bb2brMeraoD45yhFx0eSSSTFdkHQnsKmlJQ-hdo9Zy-4vQw3rOxlyoHv583JyZ\",\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_files\": [\n {\n \"id\": \"ed6c2f27-2ae7-42f4-b3d0-835b493e4fa8\",\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\",\n \"recording_type\": \"audio_only\",\n \"file_type\": \"TRANSCRIPT\",\n \"file_size\": 246560,\n \"file_extension\": \"M4A\",\n \"download_url\": \"https://example.com/recording/download/Qg75t7xZBtEbAkjdlgbfdngBBBB\",\n \"status\": \"completed\",\n \"recording_type\": \"audio_transcript\"\n }\n ]\n }\n }\n}" 4226 + } 4227 + } 4228 + } 4229 + } 4230 + }, 4231 + "responses": { 4232 + "200": { 4233 + "content": { 4234 + "application/json": { 4235 + "schema": { 4236 + "type": "object", 4237 + "required": [ 4238 + "event", 4239 + "event_ts", 4240 + "download_token", 4241 + "payload" 4242 + ], 4243 + "properties": { 4244 + "event": { 4245 + "type": "string", 4246 + "enum": ["session.recording_transcript_completed"], 4247 + "description": "The event's name." 4248 + }, 4249 + "event_ts": { 4250 + "type": "integer", 4251 + "format": "int64", 4252 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 4253 + }, 4254 + "download_token": { 4255 + "type": "string", 4256 + "description": "A generated token used to download the recording. The download token only lasts for 24 hours after its creation and you can only download the file within 24 hours of receiving the event notification. You can either pass the download_token as a Bearer token in the Authorization header of your HTTP request (recommended) or include it as a query parameter. See the following for examples. \n\n **Using an Authorization header (Recommended)** \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {download_token} \\\n --header 'content-type: application/json'\n \n\n**Using a query parameter** \n\n \n{download_url}/?access_token={download_token}\n \n\n For example: https://zoom.us/recording/download/123456?access_token=abcdefgh" 4257 + }, 4258 + "payload": { 4259 + "type": "object", 4260 + "required": ["account_id", "object"], 4261 + "properties": { 4262 + "account_id": { 4263 + "type": "string", 4264 + "description": "The Video SDK account ID." 4265 + }, 4266 + "object": { 4267 + "type": "object", 4268 + "description": "Information about the session. This object only returns updated properties.", 4269 + "required": [ 4270 + "session_id", 4271 + "session_name", 4272 + "session_key", 4273 + "start_time", 4274 + "timezone", 4275 + "recording_files" 4276 + ], 4277 + "properties": { 4278 + "session_id": { 4279 + "type": "string", 4280 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 4281 + }, 4282 + "session_name": { 4283 + "type": "string", 4284 + "description": "Session name." 4285 + }, 4286 + "session_key": { 4287 + "type": "string", 4288 + "description": "The Video SDK custom session ID." 4289 + }, 4290 + "start_time": { 4291 + "type": "string", 4292 + "format": "date-time", 4293 + "description": "The time at which the session started." 4294 + }, 4295 + "timezone": { 4296 + "type": "string", 4297 + "description": "The user's timezone." 4298 + }, 4299 + "recording_files": { 4300 + "type": "array", 4301 + "title": "Recording file List", 4302 + "description": "List of recording file.", 4303 + "items": { 4304 + "type": "object", 4305 + "properties": { 4306 + "id": { 4307 + "type": "string", 4308 + "description": "The recording file ID. Included in the response of general query." 4309 + }, 4310 + "recording_start": { 4311 + "type": "string", 4312 + "description": "The recording start time." 4313 + }, 4314 + "recording_end": { 4315 + "type": "string", 4316 + "description": "The recording end time. Response in general query." 4317 + }, 4318 + "file_name": { 4319 + "type": "string", 4320 + "description": "Name of the file." 4321 + }, 4322 + "file_path": { 4323 + "type": "string", 4324 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 4325 + }, 4326 + "file_type": { 4327 + "type": "string", 4328 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the \"Add a timestamp to the recording\" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile.\n<br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format.\n\n<br>\n\nA recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br>\n\tid, status, file_size, recording_type.", 4329 + "enum": [ 4330 + "MP4", 4331 + "M4A", 4332 + "CHAT", 4333 + "TRANSCRIPT", 4334 + "CSV", 4335 + "CC", 4336 + "TB", 4337 + "CHAT_MESSAGE", 4338 + "TIMELINE" 4339 + ] 4340 + }, 4341 + "file_size": { 4342 + "type": "number", 4343 + "description": "The recording file size." 4344 + }, 4345 + "file_extension": { 4346 + "type": "string", 4347 + "description": "The archived file's file extension.", 4348 + "enum": [ 4349 + "MP4", 4350 + "M4A", 4351 + "TXT", 4352 + "VTT", 4353 + "CSV", 4354 + "JSON", 4355 + "JPG" 4356 + ] 4357 + }, 4358 + "download_url": { 4359 + "type": "string", 4360 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). You can either pass the generated JWT as a Bearer token in the Authorization header of your HTTP request (recommended) or include it as a query parameter at the end of the URL. See the following for examples. \n\n **Using an Authorization header (Recommended)** \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n \n\n**Using a query parameter** \n\n \n{download_url}/?access_token={download_token}\n \n\n For example: https://{base-domain}/recording/download/{path-to-file-download}?access_token={JWT}." 4361 + }, 4362 + "status": { 4363 + "type": "string", 4364 + "description": "The recording status.", 4365 + "enum": ["completed"] 4366 + }, 4367 + "recording_type": { 4368 + "type": "string", 4369 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 4370 + "enum": [ 4371 + "shared_screen_with_speaker_view(CC)", 4372 + "shared_screen_with_speaker_view", 4373 + "shared_screen_with_gallery_view", 4374 + "gallery_view", 4375 + "shared_screen", 4376 + "audio_only", 4377 + "audio_transcript", 4378 + "chat_file", 4379 + "active_speaker", 4380 + "host_video", 4381 + "audio_only_each_participant", 4382 + "cc_transcript", 4383 + "closed_caption", 4384 + "poll", 4385 + "timeline", 4386 + "thumbnail", 4387 + "chat_message" 4388 + ] 4389 + } 4390 + } 4391 + } 4392 + } 4393 + }, 4394 + "additionalProperties": false 4395 + } 4396 + }, 4397 + "additionalProperties": false 4398 + } 4399 + }, 4400 + "additionalProperties": false 4401 + }, 4402 + "examples": { 4403 + "json-example": { 4404 + "summary": "JSON example", 4405 + "value": "{\n \"event\": \"session.recording_transcript_completed\",\n \"event_ts\": 1626230691572,\n \"download_token\": \"abJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJodHRwczovL2V2ZW50Lnpvb20udXMiLCJhY2NvdW50SWQiOiJNdDZzdjR1MFRBeVBrd2dzTDJseGlBIiwiYXVkIjoiaHR0cHM6Ly9vYXV0aC56b29tLnVzIiwibWlkIjoieFp3SEc0c3BRU2VuekdZWG16dnpiUT09IiwiZXhwIjoxNjI2MTM5NTA3LCJ1c2VySWQiOiJEWUhyZHBqclMzdWFPZjdkUGtrZzh3In0.a6KetiC6BlkDhf1dP4KBGUE1bb2brMeraoD45yhFx0eSSSTFdkHQnsKmlJQ-hdo9Zy-4vQw3rOxlyoHv583JyZ\",\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_files\": [\n {\n \"id\": \"ed6c2f27-2ae7-42f4-b3d0-835b493e4fa8\",\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\",\n \"recording_type\": \"audio_only\",\n \"file_type\": \"TRANSCRIPT\",\n \"file_size\": 246560,\n \"file_extension\": \"M4A\",\n \"download_url\": \"https://example.com/recording/download/Qg75t7xZBtEbAkjdlgbfdngBBBB\",\n \"status\": \"completed\",\n \"recording_type\": \"audio_transcript\"\n }\n ]\n }\n }\n}" 4406 + } 4407 + } 4408 + } 4409 + } 4410 + } 4411 + } 4412 + } 4413 + }, 4414 + "session.recording_deleted": { 4415 + "post": { 4416 + "tags": ["session"], 4417 + "operationId": "session.recording_deleted", 4418 + "requestBody": { 4419 + "description": "# session.recording_deleted\n---\n\nEvent: `session.recording_deleted`\n\n## Event description\n\nThe **Session recording permanently deleted** event is triggered every time one of your app users or account users permanently deletes a cloud recording.\n\nWhen a user initially deletes a recording, it is sent to the trash. At this stage, the recording can still be recovered for up to 30 days after deletion. To permanently delete a recording, users must delete it from the trash. Users can permanently delete a recording using:\n\n* The [Delete session's recording API](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingDelete) **with the delete query parameter** or\n* The Zoom web portal. See [Video SDK account](https://developers.zoom.us/docs/video-sdk/account/) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n\t* A valid Event Notification Endpoint URL.\n\t* \"**Session recording permanently deleted**\" subscription enabled under the **Recording** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_deleted` event notification:\n\n\n\n**Event type**: `session.recording_deleted`\n", 4420 + "content": { 4421 + "application/json": { 4422 + "schema": { 4423 + "type": "object", 4424 + "required": ["event", "event_ts", "payload"], 4425 + "properties": { 4426 + "event": { 4427 + "type": "string", 4428 + "enum": ["session.recording_deleted"], 4429 + "description": "The event's name." 4430 + }, 4431 + "event_ts": { 4432 + "type": "integer", 4433 + "format": "int64", 4434 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 4435 + }, 4436 + "payload": { 4437 + "type": "object", 4438 + "required": [ 4439 + "account_id", 4440 + "operator", 4441 + "operator_id", 4442 + "object" 4443 + ], 4444 + "properties": { 4445 + "account_id": { 4446 + "type": "string", 4447 + "description": "The Video SDK account ID." 4448 + }, 4449 + "operator": { 4450 + "type": "string", 4451 + "format": "email", 4452 + "description": "The email address of the user who deleted the recording." 4453 + }, 4454 + "operator_id": { 4455 + "type": "string", 4456 + "description": "The user ID of the user who deleted the recording." 4457 + }, 4458 + "object": { 4459 + "type": "object", 4460 + "description": "Information about the session. This object only returns updated properties.", 4461 + "required": [ 4462 + "session_id", 4463 + "session_name", 4464 + "session_key", 4465 + "start_time", 4466 + "timezone" 4467 + ], 4468 + "properties": { 4469 + "session_id": { 4470 + "type": "string", 4471 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 4472 + }, 4473 + "session_name": { 4474 + "type": "string", 4475 + "description": "Session name." 4476 + }, 4477 + "session_key": { 4478 + "type": "string", 4479 + "description": "The Video SDK custom session ID." 4480 + }, 4481 + "start_time": { 4482 + "type": "string", 4483 + "format": "date-time", 4484 + "description": "The time at which the session started." 4485 + }, 4486 + "timezone": { 4487 + "type": "string", 4488 + "description": "The user's timezone." 4489 + } 4490 + }, 4491 + "additionalProperties": false 4492 + } 4493 + }, 4494 + "additionalProperties": false 4495 + } 4496 + }, 4497 + "additionalProperties": false 4498 + }, 4499 + "examples": { 4500 + "json-example": { 4501 + "summary": "JSON example", 4502 + "value": "{\n \"event\": \"session.recording_deleted\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n\t\"operator\" : \"user@example.com\",\n\t\"operator_id\" : \"I7zp-pYbTl22Z29H796Ixg\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 4503 + } 4504 + } 4505 + } 4506 + } 4507 + }, 4508 + "responses": { 4509 + "200": { 4510 + "content": { 4511 + "application/json": { 4512 + "schema": { 4513 + "type": "object", 4514 + "required": ["event", "event_ts", "payload"], 4515 + "properties": { 4516 + "event": { 4517 + "type": "string", 4518 + "enum": ["session.recording_deleted"], 4519 + "description": "The event's name." 4520 + }, 4521 + "event_ts": { 4522 + "type": "integer", 4523 + "format": "int64", 4524 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 4525 + }, 4526 + "payload": { 4527 + "type": "object", 4528 + "required": [ 4529 + "account_id", 4530 + "operator", 4531 + "operator_id", 4532 + "object" 4533 + ], 4534 + "properties": { 4535 + "account_id": { 4536 + "type": "string", 4537 + "description": "The Video SDK account ID." 4538 + }, 4539 + "operator": { 4540 + "type": "string", 4541 + "format": "email", 4542 + "description": "The email address of the user who deleted the recording." 4543 + }, 4544 + "operator_id": { 4545 + "type": "string", 4546 + "description": "The user ID of the user who deleted the recording." 4547 + }, 4548 + "object": { 4549 + "type": "object", 4550 + "description": "Information about the session. This object only returns updated properties.", 4551 + "required": [ 4552 + "session_id", 4553 + "session_name", 4554 + "session_key", 4555 + "start_time", 4556 + "timezone" 4557 + ], 4558 + "properties": { 4559 + "session_id": { 4560 + "type": "string", 4561 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 4562 + }, 4563 + "session_name": { 4564 + "type": "string", 4565 + "description": "Session name." 4566 + }, 4567 + "session_key": { 4568 + "type": "string", 4569 + "description": "The Video SDK custom session ID." 4570 + }, 4571 + "start_time": { 4572 + "type": "string", 4573 + "format": "date-time", 4574 + "description": "The time at which the session started." 4575 + }, 4576 + "timezone": { 4577 + "type": "string", 4578 + "description": "The user's timezone." 4579 + } 4580 + }, 4581 + "additionalProperties": false 4582 + } 4583 + }, 4584 + "additionalProperties": false 4585 + } 4586 + }, 4587 + "additionalProperties": false 4588 + }, 4589 + "examples": { 4590 + "json-example": { 4591 + "summary": "JSON example", 4592 + "value": "{\n \"event\": \"session.recording_deleted\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n\t\"operator\" : \"user@example.com\",\n\t\"operator_id\" : \"I7zp-pYbTl22Z29H796Ixg\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 4593 + } 4594 + } 4595 + } 4596 + } 4597 + } 4598 + } 4599 + } 4600 + }, 4601 + "session.user_room_system_callout_failed": { 4602 + "post": { 4603 + "tags": ["session"], 4604 + "operationId": "session.user_room_system_callout_failed", 4605 + "requestBody": { 4606 + "description": "# session.user_room_system_callout_failed\n\nThe **Session invitation through phone (call out) via Zoom room failed** event is triggered every time an invitation to [join a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035) fails.\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n* A valid **Event Notification Endpoint URL**.\n* The **Session invitation through phone (call out) via Zoom room failed** subscription enabled under the **Session** event.\n\n\n\n**Event type**: `session.user_room_system_callout_failed`\n", 4607 + "content": { 4608 + "application/json": { 4609 + "schema": { 4610 + "type": "object", 4611 + "required": ["event", "event_ts", "payload"], 4612 + "properties": { 4613 + "event": { 4614 + "type": "string", 4615 + "description": "The name of the event." 4616 + }, 4617 + "event_ts": { 4618 + "type": "integer", 4619 + "format": "int64", 4620 + "description": "A timestamp at which the event occurred." 4621 + }, 4622 + "payload": { 4623 + "type": "object", 4624 + "required": ["account_id", "object"], 4625 + "properties": { 4626 + "account_id": { 4627 + "type": "string", 4628 + "description": "The account ID of the session host." 4629 + }, 4630 + "object": { 4631 + "type": "object", 4632 + "description": "Information about the session.", 4633 + "required": [ 4634 + "session_id", 4635 + "session_name", 4636 + "host_id", 4637 + "message_id", 4638 + "inviter_name", 4639 + "reason_type", 4640 + "participant" 4641 + ], 4642 + "properties": { 4643 + "id": { 4644 + "type": "integer", 4645 + "format": "int64", 4646 + "description": "The session ID.", 4647 + "deprecated": true 4648 + }, 4649 + "uuid": { 4650 + "type": "string", 4651 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 4652 + "deprecated": true 4653 + }, 4654 + "session_id": { 4655 + "type": "string", 4656 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 4657 + }, 4658 + "session_name": { 4659 + "type": "string", 4660 + "description": "Session name." 4661 + }, 4662 + "host_id": { 4663 + "type": "string", 4664 + "description": "The user ID of the session host." 4665 + }, 4666 + "message_id": { 4667 + "type": "string", 4668 + "description": "The request unique identifier (UUID)." 4669 + }, 4670 + "inviter_name": { 4671 + "type": "string", 4672 + "description": "The user name of the event's trigger." 4673 + }, 4674 + "reason_type": { 4675 + "type": "integer", 4676 + "description": "reason type for failure: \n* 1 — Encryption_Fail. \n* 2 — Disconnected_By_Remote. \n* 3 — Retry. \n* 4 — Bad_Seq. \n* 5 — Call_Limit. \n* 6 — Not_Registered. \n* 7 — Timeout. \n* 8 — Bad_Addr. \n* 9 — Unreachable \n* 10 — Disconnect_By_Local \n* 11 — Server_Internal_Error \n* 12 — Exceed_Free_Port \n* 13 — Connect_Error \n* 14 — Proxy_Connect_Error \n* 0 — Other_Failed_Reason.", 4677 + "enum": [0, 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14] 4678 + }, 4679 + "participant": { 4680 + "type": "object", 4681 + "description": "Information about the invited participant.", 4682 + "required": ["call_type", "device_ip"], 4683 + "properties": { 4684 + "call_type": { 4685 + "type": "string", 4686 + "description": "The type of call out. Use a value of h323 or sip." 4687 + }, 4688 + "device_ip": { 4689 + "type": "string", 4690 + "description": "The user's device IP address." 4691 + } 4692 + }, 4693 + "additionalProperties": true 4694 + } 4695 + }, 4696 + "additionalProperties": false 4697 + } 4698 + }, 4699 + "additionalProperties": false 4700 + } 4701 + }, 4702 + "additionalProperties": false 4703 + }, 4704 + "examples": { 4705 + "json-example": { 4706 + "summary": "JSON example", 4707 + "value": "{\n \"event\": \"session.user_room_system_callout_failed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"reason_type\": 1,\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 4708 + } 4709 + } 4710 + } 4711 + } 4712 + }, 4713 + "responses": { 4714 + "200": { 4715 + "content": { 4716 + "application/json": { 4717 + "schema": { 4718 + "type": "object", 4719 + "required": ["event", "event_ts", "payload"], 4720 + "properties": { 4721 + "event": { 4722 + "type": "string", 4723 + "description": "The name of the event." 4724 + }, 4725 + "event_ts": { 4726 + "type": "integer", 4727 + "format": "int64", 4728 + "description": "A timestamp at which the event occurred." 4729 + }, 4730 + "payload": { 4731 + "type": "object", 4732 + "required": ["account_id", "object"], 4733 + "properties": { 4734 + "account_id": { 4735 + "type": "string", 4736 + "description": "The account ID of the session host." 4737 + }, 4738 + "object": { 4739 + "type": "object", 4740 + "description": "Information about the session.", 4741 + "required": [ 4742 + "session_id", 4743 + "session_name", 4744 + "host_id", 4745 + "message_id", 4746 + "inviter_name", 4747 + "reason_type", 4748 + "participant" 4749 + ], 4750 + "properties": { 4751 + "id": { 4752 + "type": "integer", 4753 + "format": "int64", 4754 + "description": "The session ID.", 4755 + "deprecated": true 4756 + }, 4757 + "uuid": { 4758 + "type": "string", 4759 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 4760 + "deprecated": true 4761 + }, 4762 + "session_id": { 4763 + "type": "string", 4764 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 4765 + }, 4766 + "session_name": { 4767 + "type": "string", 4768 + "description": "Session name." 4769 + }, 4770 + "host_id": { 4771 + "type": "string", 4772 + "description": "The user ID of the session host." 4773 + }, 4774 + "message_id": { 4775 + "type": "string", 4776 + "description": "The request unique identifier (UUID)." 4777 + }, 4778 + "inviter_name": { 4779 + "type": "string", 4780 + "description": "The user name of the event's trigger." 4781 + }, 4782 + "reason_type": { 4783 + "type": "integer", 4784 + "description": "reason type for failure: \n* 1 — Encryption_Fail. \n* 2 — Disconnected_By_Remote. \n* 3 — Retry. \n* 4 — Bad_Seq. \n* 5 — Call_Limit. \n* 6 — Not_Registered. \n* 7 — Timeout. \n* 8 — Bad_Addr. \n* 9 — Unreachable \n* 10 — Disconnect_By_Local \n* 11 — Server_Internal_Error \n* 12 — Exceed_Free_Port \n* 13 — Connect_Error \n* 14 — Proxy_Connect_Error \n* 0 — Other_Failed_Reason.", 4785 + "enum": [ 4786 + 0, 1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14 4787 + ] 4788 + }, 4789 + "participant": { 4790 + "type": "object", 4791 + "description": "Information about the invited participant.", 4792 + "required": ["call_type", "device_ip"], 4793 + "properties": { 4794 + "call_type": { 4795 + "type": "string", 4796 + "description": "The type of call out. Use a value of h323 or sip." 4797 + }, 4798 + "device_ip": { 4799 + "type": "string", 4800 + "description": "The user's device IP address." 4801 + } 4802 + }, 4803 + "additionalProperties": true 4804 + } 4805 + }, 4806 + "additionalProperties": false 4807 + } 4808 + }, 4809 + "additionalProperties": false 4810 + } 4811 + }, 4812 + "additionalProperties": false 4813 + }, 4814 + "examples": { 4815 + "json-example": { 4816 + "summary": "JSON example", 4817 + "value": "{\n \"event\": \"session.user_room_system_callout_failed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"reason_type\": 1,\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 4818 + } 4819 + } 4820 + } 4821 + } 4822 + } 4823 + } 4824 + } 4825 + }, 4826 + "session.recording_completed": { 4827 + "post": { 4828 + "tags": ["session"], 4829 + "operationId": "session.recording_completed", 4830 + "requestBody": { 4831 + "description": "# session.recording_completed\n---\n\nEvent: `session.recording_completed`\n\n## Event description\n\nThe **Session recording completed** event is triggered every time a recording of a session becomes available to view and/or download.\n\nOnly a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n * A valid Event Notification Endpoint URL.\n * Session recording completed subscription enabled under the Recording event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_completed` event notification:\n\n\n\n**Event type**: `session.recording_completed`\n", 4832 + "content": { 4833 + "application/json": { 4834 + "schema": { 4835 + "type": "object", 4836 + "required": ["event", "event_ts", "download_token", "payload"], 4837 + "properties": { 4838 + "event": { 4839 + "type": "string", 4840 + "enum": ["session.recording_completed"], 4841 + "description": "The event's name." 4842 + }, 4843 + "event_ts": { 4844 + "type": "integer", 4845 + "format": "int64", 4846 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 4847 + }, 4848 + "download_token": { 4849 + "type": "string", 4850 + "description": "A generated token used to download the recording. The download token only lasts for 24 hours after its creation and you can only download the file within 24 hours of receiving the event notification. Pass the download_token as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {download_token} \\\n --header 'content-type: application/json'\n" 4851 + }, 4852 + "payload": { 4853 + "type": "object", 4854 + "required": ["account_id", "object"], 4855 + "properties": { 4856 + "account_id": { 4857 + "type": "string", 4858 + "description": "The Video SDK account ID." 4859 + }, 4860 + "object": { 4861 + "type": "object", 4862 + "description": "Information about the session. This object only returns updated properties.", 4863 + "required": [ 4864 + "session_id", 4865 + "session_name", 4866 + "session_key", 4867 + "start_time", 4868 + "timezone", 4869 + "recording_files" 4870 + ], 4871 + "properties": { 4872 + "session_id": { 4873 + "type": "string", 4874 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 4875 + }, 4876 + "session_name": { 4877 + "type": "string", 4878 + "description": "Session name." 4879 + }, 4880 + "session_key": { 4881 + "type": "string", 4882 + "description": "The Video SDK custom session ID." 4883 + }, 4884 + "start_time": { 4885 + "type": "string", 4886 + "format": "date-time", 4887 + "description": "The time at which the session started." 4888 + }, 4889 + "timezone": { 4890 + "type": "string", 4891 + "description": "The user's timezone." 4892 + }, 4893 + "recording_files": { 4894 + "type": "array", 4895 + "title": "Recording file List", 4896 + "description": "List of recording file.", 4897 + "items": { 4898 + "type": "object", 4899 + "properties": { 4900 + "id": { 4901 + "type": "string", 4902 + "description": "The recording file ID. Included in the response of general query." 4903 + }, 4904 + "recording_start": { 4905 + "type": "string", 4906 + "description": "The recording start time." 4907 + }, 4908 + "recording_end": { 4909 + "type": "string", 4910 + "description": "The recording end time. Response in general query." 4911 + }, 4912 + "file_name": { 4913 + "type": "string", 4914 + "description": "Name of the file." 4915 + }, 4916 + "file_path": { 4917 + "type": "string", 4918 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 4919 + }, 4920 + "file_type": { 4921 + "type": "string", 4922 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the \"Add a timestamp to the recording\" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile.\n<br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format.\n\n<br>\n\nA recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br>\n\tid, status, file_size, recording_type.", 4923 + "enum": [ 4924 + "MP4", 4925 + "M4A", 4926 + "CHAT", 4927 + "TRANSCRIPT", 4928 + "CSV", 4929 + "CC", 4930 + "TB", 4931 + "CHAT_MESSAGE" 4932 + ] 4933 + }, 4934 + "file_size": { 4935 + "type": "number", 4936 + "description": "The recording file size." 4937 + }, 4938 + "file_extension": { 4939 + "type": "string", 4940 + "description": "The archived file's file extension.", 4941 + "enum": [ 4942 + "MP4", 4943 + "M4A", 4944 + "TXT", 4945 + "VTT", 4946 + "CSV", 4947 + "JSON", 4948 + "JPG" 4949 + ] 4950 + }, 4951 + "download_url": { 4952 + "type": "string", 4953 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n" 4954 + }, 4955 + "status": { 4956 + "type": "string", 4957 + "description": "The recording status.", 4958 + "enum": ["completed"] 4959 + }, 4960 + "recording_type": { 4961 + "type": "string", 4962 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 4963 + "enum": [ 4964 + "shared_screen_with_speaker_view(CC)", 4965 + "shared_screen_with_speaker_view", 4966 + "shared_screen_with_gallery_view", 4967 + "gallery_view", 4968 + "shared_screen", 4969 + "audio_only", 4970 + "audio_transcript", 4971 + "chat_file", 4972 + "active_speaker", 4973 + "host_video", 4974 + "audio_only_each_participant", 4975 + "cc_transcript", 4976 + "closed_caption", 4977 + "poll", 4978 + "timeline", 4979 + "thumbnail", 4980 + "chat_message" 4981 + ] 4982 + } 4983 + } 4984 + } 4985 + }, 4986 + "participant_audio_files": { 4987 + "type": "array", 4988 + "title": "Recording file List", 4989 + "description": "List of recording file.", 4990 + "items": { 4991 + "type": "object", 4992 + "properties": { 4993 + "id": { 4994 + "type": "string", 4995 + "description": "The recording file ID. Included in the response of general query." 4996 + }, 4997 + "recording_start": { 4998 + "type": "string", 4999 + "description": "The recording start time." 5000 + }, 5001 + "recording_end": { 5002 + "type": "string", 5003 + "description": "The recording end time. Response in general query." 5004 + }, 5005 + "file_name": { 5006 + "type": "string", 5007 + "description": "Name of the file." 5008 + }, 5009 + "file_path": { 5010 + "type": "string", 5011 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 5012 + }, 5013 + "file_type": { 5014 + "type": "string", 5015 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the \"Add a timestamp to the recording\" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile.\n<br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format.\n\n<br>\n\nA recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br>\n\tid, status, file_size, recording_type.", 5016 + "enum": [ 5017 + "MP4", 5018 + "M4A", 5019 + "CHAT", 5020 + "TRANSCRIPT", 5021 + "CSV", 5022 + "CC", 5023 + "TB", 5024 + "CHAT_MESSAGE" 5025 + ] 5026 + }, 5027 + "file_size": { 5028 + "type": "number", 5029 + "description": "The recording file size." 5030 + }, 5031 + "file_extension": { 5032 + "type": "string", 5033 + "description": "The archived file's file extension.", 5034 + "enum": [ 5035 + "MP4", 5036 + "M4A", 5037 + "TXT", 5038 + "VTT", 5039 + "CSV", 5040 + "JSON", 5041 + "JPG" 5042 + ] 5043 + }, 5044 + "download_url": { 5045 + "type": "string", 5046 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n" 5047 + }, 5048 + "status": { 5049 + "type": "string", 5050 + "description": "The recording status.", 5051 + "enum": ["completed"] 5052 + }, 5053 + "recording_type": { 5054 + "type": "string", 5055 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 5056 + "enum": [ 5057 + "shared_screen_with_speaker_view(CC)", 5058 + "shared_screen_with_speaker_view", 5059 + "shared_screen_with_gallery_view", 5060 + "gallery_view", 5061 + "shared_screen", 5062 + "audio_only", 5063 + "audio_transcript", 5064 + "chat_file", 5065 + "active_speaker", 5066 + "host_video", 5067 + "audio_only_each_participant", 5068 + "cc_transcript", 5069 + "closed_caption", 5070 + "poll", 5071 + "timeline", 5072 + "thumbnail", 5073 + "chat_message" 5074 + ] 5075 + }, 5076 + "user_id": { 5077 + "type": "string", 5078 + "description": "The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session." 5079 + }, 5080 + "user_key": { 5081 + "type": "string", 5082 + "description": "The participant's SDK identifier. Set with the user_identity key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 35 characters." 5083 + } 5084 + } 5085 + } 5086 + }, 5087 + "participant_video_files": { 5088 + "type": "array", 5089 + "title": "Recording file List", 5090 + "description": "List of recording file.", 5091 + "items": { 5092 + "type": "object", 5093 + "properties": { 5094 + "id": { 5095 + "type": "string", 5096 + "description": "The recording file ID. Included in the response of general query." 5097 + }, 5098 + "recording_start": { 5099 + "type": "string", 5100 + "description": "The recording start time." 5101 + }, 5102 + "recording_end": { 5103 + "type": "string", 5104 + "description": "The recording end time. Response in general query." 5105 + }, 5106 + "file_name": { 5107 + "type": "string", 5108 + "description": "Name of the file." 5109 + }, 5110 + "file_path": { 5111 + "type": "string", 5112 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 5113 + }, 5114 + "file_type": { 5115 + "type": "string", 5116 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.", 5117 + "enum": ["MP4"] 5118 + }, 5119 + "file_size": { 5120 + "type": "number", 5121 + "description": "The recording file size." 5122 + }, 5123 + "file_extension": { 5124 + "type": "string", 5125 + "description": "The archived file's file extension.", 5126 + "enum": ["MP4"] 5127 + }, 5128 + "download_url": { 5129 + "type": "string", 5130 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n" 5131 + }, 5132 + "status": { 5133 + "type": "string", 5134 + "description": "The recording status.", 5135 + "enum": ["completed"] 5136 + }, 5137 + "recording_type": { 5138 + "type": "string", 5139 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 5140 + "enum": [ 5141 + "individual_user", 5142 + "individual_shared_screen" 5143 + ] 5144 + }, 5145 + "user_id": { 5146 + "type": "string", 5147 + "description": "The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session." 5148 + }, 5149 + "user_key": { 5150 + "type": "string", 5151 + "description": "The participant's SDK identifier. Set with the user_identity key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 35 characters." 5152 + } 5153 + } 5154 + } 5155 + } 5156 + }, 5157 + "additionalProperties": false 5158 + } 5159 + }, 5160 + "additionalProperties": false 5161 + } 5162 + }, 5163 + "additionalProperties": false 5164 + }, 5165 + "examples": { 5166 + "json-example": { 5167 + "summary": "JSON example", 5168 + "value": "{\n \"event\": \"session.recording_completed\",\n \"event_ts\": 1626230691572,\n \"download_token\": \"abJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJodHRwczovL2V2ZW50Lnpvb20udXMiLCJhY2NvdW50SWQiOiJNdDZzdjR1MFRBeVBrd2dzTDJseGlBIiwiYXVkIjoiaHR0cHM6Ly9vYXV0aC56b29tLnVzIiwibWlkIjoieFp3SEc0c3BRU2VuekdZWG16dnpiUT09IiwiZXhwIjoxNjI2MTM5NTA3LCJ1c2VySWQiOiJEWUhyZHBqclMzdWFPZjdkUGtrZzh3In0.a6KetiC6BlkDhf1dP4KBGUE1bb2brMeraoD45yhFx0eSSSTFdkHQnsKmlJQ-hdo9Zy-4vQw3rOxlyoHv583JyZ\",\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_files\": [\n {\n \"id\": \"ed6c2f27-2ae7-42f4-b3d0-835b493e4fa8\",\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\",\n \"recording_type\": \"audio_only\",\n \"file_type\": \"M4A\",\n \"file_size\": 246560,\n \"file_extension\": \"M4A\",\n \"download_url\": \"https://example.com/recording/download/Qg75t7xZBtEbAkjdlgbfdngBBBB\",\n \"status\": \"completed\",\n \"recording_type\": \"audio_only\"\n }\n ],\n \"participant_audio_files\": [\n {\n \"id\": \"ed6c2f27-2ae7-42f4-b3d0-835b493e4fa8\",\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\",\n \"file_type\": \"M4A\",\n \"file_name\": \"MyRecording\",\n \"file_size\": 246560,\n \"file_extension\": \"MP4\",\n \"download_url\": \"https://example.com/recording/download/Qg75t7xZBtEbAkjdlgbfdngAAAA\",\n \"status\": \"completed\",\n \"recording_type\": \"audio_only\",\n \"user_id\": \"16778240\",\n \"user_key\": \"key1\"\n }\n ],\n \"participant_video_files\": [\n {\n \"id\": \"0a564312-edf7-495e-b916-6873a7b32c50\",\n \"status\": \"completed\",\n \"recording_start\": \"2022-12-06T01:01:30Z\",\n \"recording_end\": \"2022-12-06T01:10:32Z\",\n \"file_type\": \"MP4\",\n \"file_size\": 1200500,\n \"download_url\": \"https://example.com/rec/download/cWfE3Ye3UUFgTxbBcii5t\",\n \"recording_type\": \"individual_shared_screen\",\n \"file_name\": \"Separated Share Video - user@example.com\",\n \"file_extension\": \"MP4\",\n \"user_id\": \"16778240\",\n \"user_key\": \"key1\"\n }\n ]\n }\n }\n}" 5169 + } 5170 + } 5171 + } 5172 + } 5173 + }, 5174 + "responses": { 5175 + "200": { 5176 + "content": { 5177 + "application/json": { 5178 + "schema": { 5179 + "type": "object", 5180 + "required": [ 5181 + "event", 5182 + "event_ts", 5183 + "download_token", 5184 + "payload" 5185 + ], 5186 + "properties": { 5187 + "event": { 5188 + "type": "string", 5189 + "enum": ["session.recording_completed"], 5190 + "description": "The event's name." 5191 + }, 5192 + "event_ts": { 5193 + "type": "integer", 5194 + "format": "int64", 5195 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 5196 + }, 5197 + "download_token": { 5198 + "type": "string", 5199 + "description": "A generated token used to download the recording. The download token only lasts for 24 hours after its creation and you can only download the file within 24 hours of receiving the event notification. Pass the download_token as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {download_token} \\\n --header 'content-type: application/json'\n" 5200 + }, 5201 + "payload": { 5202 + "type": "object", 5203 + "required": ["account_id", "object"], 5204 + "properties": { 5205 + "account_id": { 5206 + "type": "string", 5207 + "description": "The Video SDK account ID." 5208 + }, 5209 + "object": { 5210 + "type": "object", 5211 + "description": "Information about the session. This object only returns updated properties.", 5212 + "required": [ 5213 + "session_id", 5214 + "session_name", 5215 + "session_key", 5216 + "start_time", 5217 + "timezone", 5218 + "recording_files" 5219 + ], 5220 + "properties": { 5221 + "session_id": { 5222 + "type": "string", 5223 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 5224 + }, 5225 + "session_name": { 5226 + "type": "string", 5227 + "description": "Session name." 5228 + }, 5229 + "session_key": { 5230 + "type": "string", 5231 + "description": "The Video SDK custom session ID." 5232 + }, 5233 + "start_time": { 5234 + "type": "string", 5235 + "format": "date-time", 5236 + "description": "The time at which the session started." 5237 + }, 5238 + "timezone": { 5239 + "type": "string", 5240 + "description": "The user's timezone." 5241 + }, 5242 + "recording_files": { 5243 + "type": "array", 5244 + "title": "Recording file List", 5245 + "description": "List of recording file.", 5246 + "items": { 5247 + "type": "object", 5248 + "properties": { 5249 + "id": { 5250 + "type": "string", 5251 + "description": "The recording file ID. Included in the response of general query." 5252 + }, 5253 + "recording_start": { 5254 + "type": "string", 5255 + "description": "The recording start time." 5256 + }, 5257 + "recording_end": { 5258 + "type": "string", 5259 + "description": "The recording end time. Response in general query." 5260 + }, 5261 + "file_name": { 5262 + "type": "string", 5263 + "description": "Name of the file." 5264 + }, 5265 + "file_path": { 5266 + "type": "string", 5267 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 5268 + }, 5269 + "file_type": { 5270 + "type": "string", 5271 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the \"Add a timestamp to the recording\" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile.\n<br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format.\n\n<br>\n\nA recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br>\n\tid, status, file_size, recording_type.", 5272 + "enum": [ 5273 + "MP4", 5274 + "M4A", 5275 + "CHAT", 5276 + "TRANSCRIPT", 5277 + "CSV", 5278 + "CC", 5279 + "TB", 5280 + "CHAT_MESSAGE" 5281 + ] 5282 + }, 5283 + "file_size": { 5284 + "type": "number", 5285 + "description": "The recording file size." 5286 + }, 5287 + "file_extension": { 5288 + "type": "string", 5289 + "description": "The archived file's file extension.", 5290 + "enum": [ 5291 + "MP4", 5292 + "M4A", 5293 + "TXT", 5294 + "VTT", 5295 + "CSV", 5296 + "JSON", 5297 + "JPG" 5298 + ] 5299 + }, 5300 + "download_url": { 5301 + "type": "string", 5302 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n" 5303 + }, 5304 + "status": { 5305 + "type": "string", 5306 + "description": "The recording status.", 5307 + "enum": ["completed"] 5308 + }, 5309 + "recording_type": { 5310 + "type": "string", 5311 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 5312 + "enum": [ 5313 + "shared_screen_with_speaker_view(CC)", 5314 + "shared_screen_with_speaker_view", 5315 + "shared_screen_with_gallery_view", 5316 + "gallery_view", 5317 + "shared_screen", 5318 + "audio_only", 5319 + "audio_transcript", 5320 + "chat_file", 5321 + "active_speaker", 5322 + "host_video", 5323 + "audio_only_each_participant", 5324 + "cc_transcript", 5325 + "closed_caption", 5326 + "poll", 5327 + "timeline", 5328 + "thumbnail", 5329 + "chat_message" 5330 + ] 5331 + } 5332 + } 5333 + } 5334 + }, 5335 + "participant_audio_files": { 5336 + "type": "array", 5337 + "title": "Recording file List", 5338 + "description": "List of recording file.", 5339 + "items": { 5340 + "type": "object", 5341 + "properties": { 5342 + "id": { 5343 + "type": "string", 5344 + "description": "The recording file ID. Included in the response of general query." 5345 + }, 5346 + "recording_start": { 5347 + "type": "string", 5348 + "description": "The recording start time." 5349 + }, 5350 + "recording_end": { 5351 + "type": "string", 5352 + "description": "The recording end time. Response in general query." 5353 + }, 5354 + "file_name": { 5355 + "type": "string", 5356 + "description": "Name of the file." 5357 + }, 5358 + "file_path": { 5359 + "type": "string", 5360 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 5361 + }, 5362 + "file_type": { 5363 + "type": "string", 5364 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.<br>M4A Audio-only file of the recording.<br>TIMELINE: Timestamp file of the recording in JSON file format. To get a timeline file, the \"Add a timestamp to the recording\" setting must be enabled in the [recording settings](https://support.zoom.us/hc/en-us/articles/360060316092). The time will display in the host's timezone, set on their Zoom profile.\n<br> TRANSCRIPT: Transcription file of the recording in VTT format.<br> CHAT: A TXT file containing in-session chat messages that were sent during the session.<br>CC: File containing closed captions of the recording in VTT file format.<br>CSV: File containing polling data in csv format.\n\n<br>\n\nA recording file object with file type of either CC or TIMELINE **does not have** the following properties:<br>\n\tid, status, file_size, recording_type.", 5365 + "enum": [ 5366 + "MP4", 5367 + "M4A", 5368 + "CHAT", 5369 + "TRANSCRIPT", 5370 + "CSV", 5371 + "CC", 5372 + "TB", 5373 + "CHAT_MESSAGE" 5374 + ] 5375 + }, 5376 + "file_size": { 5377 + "type": "number", 5378 + "description": "The recording file size." 5379 + }, 5380 + "file_extension": { 5381 + "type": "string", 5382 + "description": "The archived file's file extension.", 5383 + "enum": [ 5384 + "MP4", 5385 + "M4A", 5386 + "TXT", 5387 + "VTT", 5388 + "CSV", 5389 + "JSON", 5390 + "JPG" 5391 + ] 5392 + }, 5393 + "download_url": { 5394 + "type": "string", 5395 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n" 5396 + }, 5397 + "status": { 5398 + "type": "string", 5399 + "description": "The recording status.", 5400 + "enum": ["completed"] 5401 + }, 5402 + "recording_type": { 5403 + "type": "string", 5404 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 5405 + "enum": [ 5406 + "shared_screen_with_speaker_view(CC)", 5407 + "shared_screen_with_speaker_view", 5408 + "shared_screen_with_gallery_view", 5409 + "gallery_view", 5410 + "shared_screen", 5411 + "audio_only", 5412 + "audio_transcript", 5413 + "chat_file", 5414 + "active_speaker", 5415 + "host_video", 5416 + "audio_only_each_participant", 5417 + "cc_transcript", 5418 + "closed_caption", 5419 + "poll", 5420 + "timeline", 5421 + "thumbnail", 5422 + "chat_message" 5423 + ] 5424 + }, 5425 + "user_id": { 5426 + "type": "string", 5427 + "description": "The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session." 5428 + }, 5429 + "user_key": { 5430 + "type": "string", 5431 + "description": "The participant's SDK identifier. Set with the user_identity key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 35 characters." 5432 + } 5433 + } 5434 + } 5435 + }, 5436 + "participant_video_files": { 5437 + "type": "array", 5438 + "title": "Recording file List", 5439 + "description": "List of recording file.", 5440 + "items": { 5441 + "type": "object", 5442 + "properties": { 5443 + "id": { 5444 + "type": "string", 5445 + "description": "The recording file ID. Included in the response of general query." 5446 + }, 5447 + "recording_start": { 5448 + "type": "string", 5449 + "description": "The recording start time." 5450 + }, 5451 + "recording_end": { 5452 + "type": "string", 5453 + "description": "The recording end time. Response in general query." 5454 + }, 5455 + "file_name": { 5456 + "type": "string", 5457 + "description": "Name of the file." 5458 + }, 5459 + "file_path": { 5460 + "type": "string", 5461 + "description": "The file path to the On-Premise account recording. \n\n**Note:** This API only returns this field for [Zoom On-Premise accounts](https://support.zoom.us/hc/en-us/articles/360034064852-Zoom-On-Premise-Deployment). It does **not** return the download_url field." 5462 + }, 5463 + "file_type": { 5464 + "type": "string", 5465 + "description": "The recording file type. The value of this field could be one of the following:<br>\nMP4: Video file of the recording.", 5466 + "enum": ["MP4"] 5467 + }, 5468 + "file_size": { 5469 + "type": "number", 5470 + "description": "The recording file size." 5471 + }, 5472 + "file_extension": { 5473 + "type": "string", 5474 + "description": "The archived file's file extension.", 5475 + "enum": ["MP4"] 5476 + }, 5477 + "download_url": { 5478 + "type": "string", 5479 + "description": "The URL at which to download the the recording. \n\nTo access a private or password-protected cloud recording of a user in your account, use your [Video SDK API JWT](https://marketplace.zoom.us/docs/guides/build/video-sdk-app/#video-sdk-and-api-credentials). Pass the generated JWT as a Bearer token in the Authorization header of your HTTP request. For example: \n\n \ncurl --request GET \\\n --url {download_url} \\\n --header 'authorization: Bearer {JWT} \\\n --header 'content-type: application/json'\n" 5480 + }, 5481 + "status": { 5482 + "type": "string", 5483 + "description": "The recording status.", 5484 + "enum": ["completed"] 5485 + }, 5486 + "recording_type": { 5487 + "type": "string", 5488 + "description": "The recording type. The value of this field can be one of the following:<br>shared_screen_with_speaker_view(CC)<br>shared_screen_with_speaker_view<br>shared_screen_with_gallery_view<br>speaker_view<br>gallery_view<br>shared_screen<br>audio_only<br>audio_transcript<br>chat_file<br>active_speaker<br>poll<br>timeline<br>closed_caption", 5489 + "enum": [ 5490 + "individual_user", 5491 + "individual_shared_screen" 5492 + ] 5493 + }, 5494 + "user_id": { 5495 + "type": "string", 5496 + "description": "The participant's session user ID. This value is assigned to a participant upon joining a session and is only valid for the duration of the session." 5497 + }, 5498 + "user_key": { 5499 + "type": "string", 5500 + "description": "The participant's SDK identifier. Set with the user_identity key in the Video SDK JWT payload. This value can be alphanumeric, up to a maximum length of 35 characters." 5501 + } 5502 + } 5503 + } 5504 + } 5505 + }, 5506 + "additionalProperties": false 5507 + } 5508 + }, 5509 + "additionalProperties": false 5510 + } 5511 + }, 5512 + "additionalProperties": false 5513 + }, 5514 + "examples": { 5515 + "json-example": { 5516 + "summary": "JSON example", 5517 + "value": "{\n \"event\": \"session.recording_completed\",\n \"event_ts\": 1626230691572,\n \"download_token\": \"abJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJodHRwczovL2V2ZW50Lnpvb20udXMiLCJhY2NvdW50SWQiOiJNdDZzdjR1MFRBeVBrd2dzTDJseGlBIiwiYXVkIjoiaHR0cHM6Ly9vYXV0aC56b29tLnVzIiwibWlkIjoieFp3SEc0c3BRU2VuekdZWG16dnpiUT09IiwiZXhwIjoxNjI2MTM5NTA3LCJ1c2VySWQiOiJEWUhyZHBqclMzdWFPZjdkUGtrZzh3In0.a6KetiC6BlkDhf1dP4KBGUE1bb2brMeraoD45yhFx0eSSSTFdkHQnsKmlJQ-hdo9Zy-4vQw3rOxlyoHv583JyZ\",\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_files\": [\n {\n \"id\": \"ed6c2f27-2ae7-42f4-b3d0-835b493e4fa8\",\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\",\n \"recording_type\": \"audio_only\",\n \"file_type\": \"M4A\",\n \"file_size\": 246560,\n \"file_extension\": \"M4A\",\n \"download_url\": \"https://example.com/recording/download/Qg75t7xZBtEbAkjdlgbfdngBBBB\",\n \"status\": \"completed\",\n \"recording_type\": \"audio_only\"\n }\n ],\n \"participant_audio_files\": [\n {\n \"id\": \"ed6c2f27-2ae7-42f4-b3d0-835b493e4fa8\",\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\",\n \"file_type\": \"M4A\",\n \"file_name\": \"MyRecording\",\n \"file_size\": 246560,\n \"file_extension\": \"MP4\",\n \"download_url\": \"https://example.com/recording/download/Qg75t7xZBtEbAkjdlgbfdngAAAA\",\n \"status\": \"completed\",\n \"recording_type\": \"audio_only\",\n \"user_id\": \"16778240\",\n \"user_key\": \"key1\"\n }\n ],\n \"participant_video_files\": [\n {\n \"id\": \"0a564312-edf7-495e-b916-6873a7b32c50\",\n \"status\": \"completed\",\n \"recording_start\": \"2022-12-06T01:01:30Z\",\n \"recording_end\": \"2022-12-06T01:10:32Z\",\n \"file_type\": \"MP4\",\n \"file_size\": 1200500,\n \"download_url\": \"https://example.com/rec/download/cWfE3Ye3UUFgTxbBcii5t\",\n \"recording_type\": \"individual_shared_screen\",\n \"file_name\": \"Separated Share Video - user@example.com\",\n \"file_extension\": \"MP4\",\n \"user_id\": \"16778240\",\n \"user_key\": \"key1\"\n }\n ]\n }\n }\n}" 5518 + } 5519 + } 5520 + } 5521 + } 5522 + } 5523 + } 5524 + } 5525 + }, 5526 + "session.recording_transcript_failed": { 5527 + "post": { 5528 + "tags": ["session"], 5529 + "operationId": "session.recording_transcript_failed", 5530 + "requestBody": { 5531 + "description": "# session.recording_transcript_failed\n---\n\nEvent: `session.recording_transcript_failed`\n\n## Event description\n\nThe **Session recording transcript failed** event is triggered every time the transcript of the recording of a session generated failed.\n\nOnly a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details.\n\n## Prerequisites\n\n* Enable Cloud Recording on the Video SDK account.\n* Enable Event Subscriptions for your app with the following configurations:\n * A valid Event Notification Endpoint URL.\n * Enable session recording transcript completed subscription under the Recording event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_transcript_completed` event notification:\n\n\n\n**Event type**: `session.recording_transcript_failed`\n", 5532 + "content": { 5533 + "application/json": { 5534 + "schema": { 5535 + "type": "object", 5536 + "required": ["event", "event_ts", "payload"], 5537 + "properties": { 5538 + "event": { 5539 + "type": "string", 5540 + "enum": ["session.recording_transcript_failed"], 5541 + "description": "The event's name." 5542 + }, 5543 + "event_ts": { 5544 + "type": "integer", 5545 + "format": "int64", 5546 + "description": "A timestamp, in milliseconds since epoch, when the event occurred." 5547 + }, 5548 + "payload": { 5549 + "type": "object", 5550 + "required": ["account_id", "object"], 5551 + "properties": { 5552 + "account_id": { 5553 + "type": "string", 5554 + "description": "The Video SDK account ID." 5555 + }, 5556 + "object": { 5557 + "type": "object", 5558 + "description": "Information about the session. This object only returns updated properties.", 5559 + "required": [ 5560 + "session_id", 5561 + "session_name", 5562 + "session_key", 5563 + "start_time", 5564 + "timezone" 5565 + ], 5566 + "properties": { 5567 + "session_id": { 5568 + "type": "string", 5569 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 5570 + }, 5571 + "session_name": { 5572 + "type": "string", 5573 + "description": "Session name." 5574 + }, 5575 + "session_key": { 5576 + "type": "string", 5577 + "description": "The Video SDK custom session ID." 5578 + }, 5579 + "start_time": { 5580 + "type": "string", 5581 + "format": "date-time", 5582 + "description": "The time when the session started." 5583 + }, 5584 + "timezone": { 5585 + "type": "string", 5586 + "description": "The user's timezone." 5587 + } 5588 + }, 5589 + "additionalProperties": false 5590 + } 5591 + }, 5592 + "additionalProperties": false 5593 + } 5594 + }, 5595 + "additionalProperties": false 5596 + }, 5597 + "examples": { 5598 + "json-example": { 5599 + "summary": "JSON example", 5600 + "value": "{\n \"event\": \"session.recording_transcript_completed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 5601 + } 5602 + } 5603 + } 5604 + } 5605 + }, 5606 + "responses": { 5607 + "200": { 5608 + "content": { 5609 + "application/json": { 5610 + "schema": { 5611 + "type": "object", 5612 + "required": ["event", "event_ts", "payload"], 5613 + "properties": { 5614 + "event": { 5615 + "type": "string", 5616 + "enum": ["session.recording_transcript_failed"], 5617 + "description": "The event's name." 5618 + }, 5619 + "event_ts": { 5620 + "type": "integer", 5621 + "format": "int64", 5622 + "description": "A timestamp, in milliseconds since epoch, when the event occurred." 5623 + }, 5624 + "payload": { 5625 + "type": "object", 5626 + "required": ["account_id", "object"], 5627 + "properties": { 5628 + "account_id": { 5629 + "type": "string", 5630 + "description": "The Video SDK account ID." 5631 + }, 5632 + "object": { 5633 + "type": "object", 5634 + "description": "Information about the session. This object only returns updated properties.", 5635 + "required": [ 5636 + "session_id", 5637 + "session_name", 5638 + "session_key", 5639 + "start_time", 5640 + "timezone" 5641 + ], 5642 + "properties": { 5643 + "session_id": { 5644 + "type": "string", 5645 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 5646 + }, 5647 + "session_name": { 5648 + "type": "string", 5649 + "description": "Session name." 5650 + }, 5651 + "session_key": { 5652 + "type": "string", 5653 + "description": "The Video SDK custom session ID." 5654 + }, 5655 + "start_time": { 5656 + "type": "string", 5657 + "format": "date-time", 5658 + "description": "The time when the session started." 5659 + }, 5660 + "timezone": { 5661 + "type": "string", 5662 + "description": "The user's timezone." 5663 + } 5664 + }, 5665 + "additionalProperties": false 5666 + } 5667 + }, 5668 + "additionalProperties": false 5669 + } 5670 + }, 5671 + "additionalProperties": false 5672 + }, 5673 + "examples": { 5674 + "json-example": { 5675 + "summary": "JSON example", 5676 + "value": "{\n \"event\": \"session.recording_transcript_completed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 5677 + } 5678 + } 5679 + } 5680 + } 5681 + } 5682 + } 5683 + } 5684 + }, 5685 + "session.recording_trashed": { 5686 + "post": { 5687 + "tags": ["session"], 5688 + "operationId": "session.recording_trashed", 5689 + "requestBody": { 5690 + "description": "# session.recording_trashed\n---\n\nEvent: `session.recording_trashed`\n\n## Event description\n\nThe **Session recording deleted to trash** event is triggered every time one of your app users or account users temporarily delete a cloud recording.\n\nWhen a user initially deletes a recording, it is deleted to the trash. Recordings deleted to the trash can be recovered up to 30 days after deletion. Users can move a recording to the trash using:\n\n* The [Delete session's recording](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingDelete) API **with the trash query parameter** or\n* The Zoom web portal. See [Video SDK account](https://developers.zoom.us/docs/video-sdk/account/) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n\t* A valid Event Notification Endpoint URL.\n\t* **Session recording deleted to trash** subscription enabled under the **Recording** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_trashed` event notification:\n\n\n\n**Event type**: `session.recording_trashed`\n", 5691 + "content": { 5692 + "application/json": { 5693 + "schema": { 5694 + "type": "object", 5695 + "required": ["event", "event_ts", "payload"], 5696 + "properties": { 5697 + "event": { 5698 + "type": "string", 5699 + "enum": ["session.recording_trashed"], 5700 + "description": "The event's name." 5701 + }, 5702 + "event_ts": { 5703 + "type": "integer", 5704 + "format": "int64", 5705 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 5706 + }, 5707 + "payload": { 5708 + "type": "object", 5709 + "required": [ 5710 + "account_id", 5711 + "operator", 5712 + "operator_id", 5713 + "object" 5714 + ], 5715 + "properties": { 5716 + "account_id": { 5717 + "type": "string", 5718 + "description": "The Video SDK account ID." 5719 + }, 5720 + "operator": { 5721 + "type": "string", 5722 + "format": "email", 5723 + "description": "The email address of the user who deleted the recording." 5724 + }, 5725 + "operator_id": { 5726 + "type": "string", 5727 + "description": "The user ID of the user who deleted the recording." 5728 + }, 5729 + "object": { 5730 + "type": "object", 5731 + "description": "Information about the session. This object only returns updated properties.", 5732 + "required": [ 5733 + "session_id", 5734 + "session_name", 5735 + "session_key", 5736 + "start_time", 5737 + "timezone" 5738 + ], 5739 + "properties": { 5740 + "session_id": { 5741 + "type": "string", 5742 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 5743 + }, 5744 + "session_name": { 5745 + "type": "string", 5746 + "description": "Session name." 5747 + }, 5748 + "session_key": { 5749 + "type": "string", 5750 + "description": "The Video SDK custom session ID." 5751 + }, 5752 + "start_time": { 5753 + "type": "string", 5754 + "format": "date-time", 5755 + "description": "The time at which the session started." 5756 + }, 5757 + "timezone": { 5758 + "type": "string", 5759 + "description": "The user's timezone." 5760 + } 5761 + }, 5762 + "additionalProperties": false 5763 + } 5764 + }, 5765 + "additionalProperties": false 5766 + } 5767 + }, 5768 + "additionalProperties": false 5769 + }, 5770 + "examples": { 5771 + "json-example": { 5772 + "summary": "JSON example", 5773 + "value": "{\n \"event\": \"session.recording_trashed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n\t\"operator\" : \"user@example.com\",\n\t\"operator_id\" : \"I7zp-pYbTl22Z29H796Ixg\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 5774 + } 5775 + } 5776 + } 5777 + } 5778 + }, 5779 + "responses": { 5780 + "200": { 5781 + "content": { 5782 + "application/json": { 5783 + "schema": { 5784 + "type": "object", 5785 + "required": ["event", "event_ts", "payload"], 5786 + "properties": { 5787 + "event": { 5788 + "type": "string", 5789 + "enum": ["session.recording_trashed"], 5790 + "description": "The event's name." 5791 + }, 5792 + "event_ts": { 5793 + "type": "integer", 5794 + "format": "int64", 5795 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 5796 + }, 5797 + "payload": { 5798 + "type": "object", 5799 + "required": [ 5800 + "account_id", 5801 + "operator", 5802 + "operator_id", 5803 + "object" 5804 + ], 5805 + "properties": { 5806 + "account_id": { 5807 + "type": "string", 5808 + "description": "The Video SDK account ID." 5809 + }, 5810 + "operator": { 5811 + "type": "string", 5812 + "format": "email", 5813 + "description": "The email address of the user who deleted the recording." 5814 + }, 5815 + "operator_id": { 5816 + "type": "string", 5817 + "description": "The user ID of the user who deleted the recording." 5818 + }, 5819 + "object": { 5820 + "type": "object", 5821 + "description": "Information about the session. This object only returns updated properties.", 5822 + "required": [ 5823 + "session_id", 5824 + "session_name", 5825 + "session_key", 5826 + "start_time", 5827 + "timezone" 5828 + ], 5829 + "properties": { 5830 + "session_id": { 5831 + "type": "string", 5832 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 5833 + }, 5834 + "session_name": { 5835 + "type": "string", 5836 + "description": "Session name." 5837 + }, 5838 + "session_key": { 5839 + "type": "string", 5840 + "description": "The Video SDK custom session ID." 5841 + }, 5842 + "start_time": { 5843 + "type": "string", 5844 + "format": "date-time", 5845 + "description": "The time at which the session started." 5846 + }, 5847 + "timezone": { 5848 + "type": "string", 5849 + "description": "The user's timezone." 5850 + } 5851 + }, 5852 + "additionalProperties": false 5853 + } 5854 + }, 5855 + "additionalProperties": false 5856 + } 5857 + }, 5858 + "additionalProperties": false 5859 + }, 5860 + "examples": { 5861 + "json-example": { 5862 + "summary": "JSON example", 5863 + "value": "{\n \"event\": \"session.recording_trashed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n\t\"operator\" : \"user@example.com\",\n\t\"operator_id\" : \"I7zp-pYbTl22Z29H796Ixg\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 5864 + } 5865 + } 5866 + } 5867 + } 5868 + } 5869 + } 5870 + } 5871 + }, 5872 + "session.user_joined": { 5873 + "post": { 5874 + "tags": ["session"], 5875 + "operationId": "session.user_joined", 5876 + "requestBody": { 5877 + "description": "# session.user_joined\n---\n\n\nThe Session User Joined event is triggered every time a user (including host and co-host) joins a session.\n\n## Prerequisites\nEvent Subscriptions must be enabled for your [Marketplace app](https://marketplace.zoom.us/user/build) with the following configurations:\n\n* A valid Event Notification Endpoint URL.\n* Session User Joined subscription enabled under the Video SDK event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.user_joined` event notification:\n\n\n\n**Event type**: `session.user_joined`\n", 5878 + "content": { 5879 + "application/json": { 5880 + "schema": { 5881 + "type": "object", 5882 + "required": ["event", "event_ts", "payload"], 5883 + "properties": { 5884 + "event": { 5885 + "type": "string", 5886 + "enum": ["session.user_joined"], 5887 + "description": "The event's name." 5888 + }, 5889 + "event_ts": { 5890 + "type": "integer", 5891 + "format": "int64", 5892 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 5893 + }, 5894 + "payload": { 5895 + "type": "object", 5896 + "required": ["account_id", "object"], 5897 + "properties": { 5898 + "account_id": { 5899 + "type": "string", 5900 + "description": "The Video SDK account ID." 5901 + }, 5902 + "object": { 5903 + "type": "object", 5904 + "description": "Information about the session. This object only returns updated properties.", 5905 + "required": [ 5906 + "id", 5907 + "session_id", 5908 + "session_name", 5909 + "user" 5910 + ], 5911 + "properties": { 5912 + "id": { 5913 + "type": "string", 5914 + "description": "The session ID." 5915 + }, 5916 + "session_id": { 5917 + "type": "string", 5918 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 5919 + }, 5920 + "session_name": { 5921 + "type": "string", 5922 + "description": "Session name." 5923 + }, 5924 + "session_key": { 5925 + "type": "string", 5926 + "description": "The Video SDK custom session ID." 5927 + }, 5928 + "user": { 5929 + "type": "object", 5930 + "description": "Information about the user.", 5931 + "required": [ 5932 + "id", 5933 + "name", 5934 + "join_time", 5935 + "participant_uuid" 5936 + ], 5937 + "properties": { 5938 + "id": { 5939 + "type": "string", 5940 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 5941 + }, 5942 + "name": { 5943 + "type": "string", 5944 + "description": "The user's username." 5945 + }, 5946 + "join_time": { 5947 + "type": "string", 5948 + "description": "The time at which the user joined the session.", 5949 + "format": "date-time" 5950 + }, 5951 + "user_key": { 5952 + "type": "string", 5953 + "description": "Another identifier for the user. Can be a number or characters." 5954 + }, 5955 + "phone_number": { 5956 + "type": "string", 5957 + "description": "Phone number of participant joined via PSTN." 5958 + }, 5959 + "participant_uuid": { 5960 + "type": "string", 5961 + "description": "The participant's UUID. This value is assigned to a participant upon joining a session and is only valid for the session's duration." 5962 + } 5963 + }, 5964 + "additionalProperties": false 5965 + } 5966 + }, 5967 + "additionalProperties": false 5968 + } 5969 + }, 5970 + "additionalProperties": false 5971 + } 5972 + }, 5973 + "additionalProperties": false 5974 + }, 5975 + "examples": { 5976 + "json-example": { 5977 + "summary": "JSON example", 5978 + "value": "{\n \"event\": \"session.user_joined\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"account_id\": \"EFgHiJABC000DEfGHI\",\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"example\",\n \"join_time\": \"2021-07-16T17:19:11Z\",\n \"user_key\": \"ASD74dfDI854\",\n \"phone_number\": \"8615250064084\",\n \"participant_uuid\": \"55555AAAiAAAAAiAiAiiAii\"\n }\n }\n }\n}" 5979 + } 5980 + } 5981 + } 5982 + } 5983 + }, 5984 + "responses": { 5985 + "200": { 5986 + "content": { 5987 + "application/json": { 5988 + "schema": { 5989 + "type": "object", 5990 + "required": ["event", "event_ts", "payload"], 5991 + "properties": { 5992 + "event": { 5993 + "type": "string", 5994 + "enum": ["session.user_joined"], 5995 + "description": "The event's name." 5996 + }, 5997 + "event_ts": { 5998 + "type": "integer", 5999 + "format": "int64", 6000 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 6001 + }, 6002 + "payload": { 6003 + "type": "object", 6004 + "required": ["account_id", "object"], 6005 + "properties": { 6006 + "account_id": { 6007 + "type": "string", 6008 + "description": "The Video SDK account ID." 6009 + }, 6010 + "object": { 6011 + "type": "object", 6012 + "description": "Information about the session. This object only returns updated properties.", 6013 + "required": [ 6014 + "id", 6015 + "session_id", 6016 + "session_name", 6017 + "user" 6018 + ], 6019 + "properties": { 6020 + "id": { 6021 + "type": "string", 6022 + "description": "The session ID." 6023 + }, 6024 + "session_id": { 6025 + "type": "string", 6026 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6027 + }, 6028 + "session_name": { 6029 + "type": "string", 6030 + "description": "Session name." 6031 + }, 6032 + "session_key": { 6033 + "type": "string", 6034 + "description": "The Video SDK custom session ID." 6035 + }, 6036 + "user": { 6037 + "type": "object", 6038 + "description": "Information about the user.", 6039 + "required": [ 6040 + "id", 6041 + "name", 6042 + "join_time", 6043 + "participant_uuid" 6044 + ], 6045 + "properties": { 6046 + "id": { 6047 + "type": "string", 6048 + "description": "The user's unique ID. This value is assigned to the user upon joining a session and is only valid for that session." 6049 + }, 6050 + "name": { 6051 + "type": "string", 6052 + "description": "The user's username." 6053 + }, 6054 + "join_time": { 6055 + "type": "string", 6056 + "description": "The time at which the user joined the session.", 6057 + "format": "date-time" 6058 + }, 6059 + "user_key": { 6060 + "type": "string", 6061 + "description": "Another identifier for the user. Can be a number or characters." 6062 + }, 6063 + "phone_number": { 6064 + "type": "string", 6065 + "description": "Phone number of participant joined via PSTN." 6066 + }, 6067 + "participant_uuid": { 6068 + "type": "string", 6069 + "description": "The participant's UUID. This value is assigned to a participant upon joining a session and is only valid for the session's duration." 6070 + } 6071 + }, 6072 + "additionalProperties": false 6073 + } 6074 + }, 6075 + "additionalProperties": false 6076 + } 6077 + }, 6078 + "additionalProperties": false 6079 + } 6080 + }, 6081 + "additionalProperties": false 6082 + }, 6083 + "examples": { 6084 + "json-example": { 6085 + "summary": "JSON example", 6086 + "value": "{\n \"event\": \"session.user_joined\",\n \"event_ts\": 1626473951859,\n \"payload\": {\n \"account_id\": \"EFgHiJABC000DEfGHI\",\n \"object\": {\n \"id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user\": {\n \"id\": \"25508864\",\n \"name\": \"example\",\n \"join_time\": \"2021-07-16T17:19:11Z\",\n \"user_key\": \"ASD74dfDI854\",\n \"phone_number\": \"8615250064084\",\n \"participant_uuid\": \"55555AAAiAAAAAiAiAiiAii\"\n }\n }\n }\n}" 6087 + } 6088 + } 6089 + } 6090 + } 6091 + } 6092 + } 6093 + } 6094 + }, 6095 + "session.stream_ingestion_started": { 6096 + "post": { 6097 + "tags": ["session"], 6098 + "operationId": "session.stream_ingestion_started", 6099 + "requestBody": { 6100 + "description": "# session.stream_ingestion_started\nZoom triggers the **Session stream ingestion started** event every time a host starts sending an incoming live stream to a session. The session user can subscribe to it to see what's being streamed live into this session.\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Session stream ingestion started** subscription enabled under the **Video SDK** event.\n\n\n**Event type**: `session.stream_ingestion_started`\n", 6101 + "content": { 6102 + "application/json": { 6103 + "schema": { 6104 + "type": "object", 6105 + "required": ["event", "event_ts", "payload"], 6106 + "properties": { 6107 + "event": { 6108 + "type": "string", 6109 + "enum": ["session.stream_ingestion_started"], 6110 + "description": "Event name." 6111 + }, 6112 + "event_ts": { 6113 + "type": "integer", 6114 + "format": "int64", 6115 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 6116 + }, 6117 + "payload": { 6118 + "type": "object", 6119 + "required": ["account_id", "object"], 6120 + "properties": { 6121 + "account_id": { 6122 + "type": "string", 6123 + "description": "The Video SDK account ID." 6124 + }, 6125 + "object": { 6126 + "type": "object", 6127 + "description": "Information about the session.", 6128 + "required": [ 6129 + "session_id", 6130 + "session_name", 6131 + "stream_ingestion" 6132 + ], 6133 + "properties": { 6134 + "session_id": { 6135 + "type": "string", 6136 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6137 + }, 6138 + "session_name": { 6139 + "type": "string", 6140 + "description": "Session name." 6141 + }, 6142 + "session_key": { 6143 + "type": "string", 6144 + "description": "The Video SDK custom session ID." 6145 + }, 6146 + "stream_ingestion": { 6147 + "type": "object", 6148 + "description": "Information about the stream ingestion.", 6149 + "required": [ 6150 + "stream_id", 6151 + "stream_name", 6152 + "stream_key", 6153 + "stream_url", 6154 + "backup_stream_url" 6155 + ], 6156 + "properties": { 6157 + "stream_id": { 6158 + "type": "string", 6159 + "description": "The stream ingestion ID." 6160 + }, 6161 + "stream_name": { 6162 + "type": "string", 6163 + "description": "The stream ingestion name." 6164 + }, 6165 + "stream_description": { 6166 + "type": "string", 6167 + "description": "The stream ingestion description." 6168 + }, 6169 + "stream_key": { 6170 + "type": "string", 6171 + "description": "The stream ingestion key." 6172 + }, 6173 + "stream_url": { 6174 + "type": "string", 6175 + "description": "The stream URL." 6176 + }, 6177 + "backup_stream_url": { 6178 + "type": "string", 6179 + "description": "The backup stream URL." 6180 + } 6181 + } 6182 + } 6183 + }, 6184 + "additionalProperties": false 6185 + } 6186 + }, 6187 + "additionalProperties": false 6188 + } 6189 + }, 6190 + "additionalProperties": false 6191 + }, 6192 + "examples": { 6193 + "json-example": { 6194 + "summary": "JSON example", 6195 + "value": "{\n \"event\": \"session.stream_ingestion_started\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 6196 + } 6197 + } 6198 + } 6199 + } 6200 + }, 6201 + "responses": { 6202 + "200": { 6203 + "content": { 6204 + "application/json": { 6205 + "schema": { 6206 + "type": "object", 6207 + "required": ["event", "event_ts", "payload"], 6208 + "properties": { 6209 + "event": { 6210 + "type": "string", 6211 + "enum": ["session.stream_ingestion_started"], 6212 + "description": "Event name." 6213 + }, 6214 + "event_ts": { 6215 + "type": "integer", 6216 + "format": "int64", 6217 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 6218 + }, 6219 + "payload": { 6220 + "type": "object", 6221 + "required": ["account_id", "object"], 6222 + "properties": { 6223 + "account_id": { 6224 + "type": "string", 6225 + "description": "The Video SDK account ID." 6226 + }, 6227 + "object": { 6228 + "type": "object", 6229 + "description": "Information about the session.", 6230 + "required": [ 6231 + "session_id", 6232 + "session_name", 6233 + "stream_ingestion" 6234 + ], 6235 + "properties": { 6236 + "session_id": { 6237 + "type": "string", 6238 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6239 + }, 6240 + "session_name": { 6241 + "type": "string", 6242 + "description": "Session name." 6243 + }, 6244 + "session_key": { 6245 + "type": "string", 6246 + "description": "The Video SDK custom session ID." 6247 + }, 6248 + "stream_ingestion": { 6249 + "type": "object", 6250 + "description": "Information about the stream ingestion.", 6251 + "required": [ 6252 + "stream_id", 6253 + "stream_name", 6254 + "stream_key", 6255 + "stream_url", 6256 + "backup_stream_url" 6257 + ], 6258 + "properties": { 6259 + "stream_id": { 6260 + "type": "string", 6261 + "description": "The stream ingestion ID." 6262 + }, 6263 + "stream_name": { 6264 + "type": "string", 6265 + "description": "The stream ingestion name." 6266 + }, 6267 + "stream_description": { 6268 + "type": "string", 6269 + "description": "The stream ingestion description." 6270 + }, 6271 + "stream_key": { 6272 + "type": "string", 6273 + "description": "The stream ingestion key." 6274 + }, 6275 + "stream_url": { 6276 + "type": "string", 6277 + "description": "The stream URL." 6278 + }, 6279 + "backup_stream_url": { 6280 + "type": "string", 6281 + "description": "The backup stream URL." 6282 + } 6283 + } 6284 + } 6285 + }, 6286 + "additionalProperties": false 6287 + } 6288 + }, 6289 + "additionalProperties": false 6290 + } 6291 + }, 6292 + "additionalProperties": false 6293 + }, 6294 + "examples": { 6295 + "json-example": { 6296 + "summary": "JSON example", 6297 + "value": "{\n \"event\": \"session.stream_ingestion_started\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 6298 + } 6299 + } 6300 + } 6301 + } 6302 + } 6303 + } 6304 + } 6305 + }, 6306 + "session.stream_ingestion_connected": { 6307 + "post": { 6308 + "tags": ["session"], 6309 + "operationId": "session.stream_ingestion_connected", 6310 + "requestBody": { 6311 + "description": "# session.stream_ingestion_connected\nZoom triggers the **Session stream ingestion connected** event every time live streaming software connects to the Zoom Video SDK session. This indicates that the Zoom streaming platform is receiving data from the streaming software, but the received Real-Time Messaging Protocol (RTMP) data is not sent to the session yet.\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Session stream ingestion connected** subscription enabled under the **Video SDK** event.\n\n\n**Event type**: `session.stream_ingestion_connected`\n", 6312 + "content": { 6313 + "application/json": { 6314 + "schema": { 6315 + "type": "object", 6316 + "required": ["event", "event_ts", "payload"], 6317 + "properties": { 6318 + "event": { 6319 + "type": "string", 6320 + "enum": ["session.stream_ingestion_connected"], 6321 + "description": "Name of the event." 6322 + }, 6323 + "event_ts": { 6324 + "type": "integer", 6325 + "format": "int64", 6326 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 6327 + }, 6328 + "payload": { 6329 + "type": "object", 6330 + "required": ["account_id", "object"], 6331 + "properties": { 6332 + "account_id": { 6333 + "type": "string", 6334 + "description": "The Video SDK account ID." 6335 + }, 6336 + "object": { 6337 + "type": "object", 6338 + "description": "Information about the session.", 6339 + "required": [ 6340 + "session_id", 6341 + "session_name", 6342 + "stream_ingestion" 6343 + ], 6344 + "properties": { 6345 + "session_id": { 6346 + "type": "string", 6347 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6348 + }, 6349 + "session_name": { 6350 + "type": "string", 6351 + "description": "Session name." 6352 + }, 6353 + "session_key": { 6354 + "type": "string", 6355 + "description": "The Video SDK custom session ID." 6356 + }, 6357 + "stream_ingestion": { 6358 + "type": "object", 6359 + "description": "Information about the stream ingestion.", 6360 + "required": [ 6361 + "stream_id", 6362 + "stream_name", 6363 + "stream_key", 6364 + "stream_url", 6365 + "backup_stream_url" 6366 + ], 6367 + "properties": { 6368 + "stream_id": { 6369 + "type": "string", 6370 + "description": "The stream ingestion ID." 6371 + }, 6372 + "stream_name": { 6373 + "type": "string", 6374 + "description": "The stream ingestion name." 6375 + }, 6376 + "stream_description": { 6377 + "type": "string", 6378 + "description": "The stream ingestion description." 6379 + }, 6380 + "stream_key": { 6381 + "type": "string", 6382 + "description": "The stream ingestion key." 6383 + }, 6384 + "stream_url": { 6385 + "type": "string", 6386 + "description": "The stream URL." 6387 + }, 6388 + "backup_stream_url": { 6389 + "type": "string", 6390 + "description": "The backup stream URL." 6391 + } 6392 + } 6393 + } 6394 + }, 6395 + "additionalProperties": false 6396 + } 6397 + }, 6398 + "additionalProperties": false 6399 + } 6400 + }, 6401 + "additionalProperties": false 6402 + }, 6403 + "examples": { 6404 + "json-example": { 6405 + "summary": "JSON example", 6406 + "value": "{\n \"event\": \"session.stream_ingestion_connected\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 6407 + } 6408 + } 6409 + } 6410 + } 6411 + }, 6412 + "responses": { 6413 + "200": { 6414 + "content": { 6415 + "application/json": { 6416 + "schema": { 6417 + "type": "object", 6418 + "required": ["event", "event_ts", "payload"], 6419 + "properties": { 6420 + "event": { 6421 + "type": "string", 6422 + "enum": ["session.stream_ingestion_connected"], 6423 + "description": "Name of the event." 6424 + }, 6425 + "event_ts": { 6426 + "type": "integer", 6427 + "format": "int64", 6428 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 6429 + }, 6430 + "payload": { 6431 + "type": "object", 6432 + "required": ["account_id", "object"], 6433 + "properties": { 6434 + "account_id": { 6435 + "type": "string", 6436 + "description": "The Video SDK account ID." 6437 + }, 6438 + "object": { 6439 + "type": "object", 6440 + "description": "Information about the session.", 6441 + "required": [ 6442 + "session_id", 6443 + "session_name", 6444 + "stream_ingestion" 6445 + ], 6446 + "properties": { 6447 + "session_id": { 6448 + "type": "string", 6449 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6450 + }, 6451 + "session_name": { 6452 + "type": "string", 6453 + "description": "Session name." 6454 + }, 6455 + "session_key": { 6456 + "type": "string", 6457 + "description": "The Video SDK custom session ID." 6458 + }, 6459 + "stream_ingestion": { 6460 + "type": "object", 6461 + "description": "Information about the stream ingestion.", 6462 + "required": [ 6463 + "stream_id", 6464 + "stream_name", 6465 + "stream_key", 6466 + "stream_url", 6467 + "backup_stream_url" 6468 + ], 6469 + "properties": { 6470 + "stream_id": { 6471 + "type": "string", 6472 + "description": "The stream ingestion ID." 6473 + }, 6474 + "stream_name": { 6475 + "type": "string", 6476 + "description": "The stream ingestion name." 6477 + }, 6478 + "stream_description": { 6479 + "type": "string", 6480 + "description": "The stream ingestion description." 6481 + }, 6482 + "stream_key": { 6483 + "type": "string", 6484 + "description": "The stream ingestion key." 6485 + }, 6486 + "stream_url": { 6487 + "type": "string", 6488 + "description": "The stream URL." 6489 + }, 6490 + "backup_stream_url": { 6491 + "type": "string", 6492 + "description": "The backup stream URL." 6493 + } 6494 + } 6495 + } 6496 + }, 6497 + "additionalProperties": false 6498 + } 6499 + }, 6500 + "additionalProperties": false 6501 + } 6502 + }, 6503 + "additionalProperties": false 6504 + }, 6505 + "examples": { 6506 + "json-example": { 6507 + "summary": "JSON example", 6508 + "value": "{\n \"event\": \"session.stream_ingestion_connected\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 6509 + } 6510 + } 6511 + } 6512 + } 6513 + } 6514 + } 6515 + } 6516 + }, 6517 + "session.stream_ingestion_disconnected": { 6518 + "post": { 6519 + "tags": ["session"], 6520 + "operationId": "session.stream_ingestion_disconnected", 6521 + "requestBody": { 6522 + "description": "# session.stream_ingestion_disconnected\nZoom triggers the **Session stream ingestion disconnected** event every time a Real-Time Messaging Protocol (RTMP) software program disconnects.\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Session stream ingestion disconnected** subscription enabled under the **Video SDK** event.\n\n\n**Event type**: `session.stream_ingestion_disconnected`\n", 6523 + "content": { 6524 + "application/json": { 6525 + "schema": { 6526 + "type": "object", 6527 + "required": ["event", "event_ts", "payload"], 6528 + "properties": { 6529 + "event": { 6530 + "type": "string", 6531 + "enum": ["session.stream_ingestion_disconnected"], 6532 + "description": "Name of the event." 6533 + }, 6534 + "event_ts": { 6535 + "type": "integer", 6536 + "format": "int64", 6537 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 6538 + }, 6539 + "payload": { 6540 + "type": "object", 6541 + "required": ["account_id", "object"], 6542 + "properties": { 6543 + "account_id": { 6544 + "type": "string", 6545 + "description": "The Video SDK account ID." 6546 + }, 6547 + "object": { 6548 + "type": "object", 6549 + "description": "Information about the session.", 6550 + "required": [ 6551 + "session_id", 6552 + "session_name", 6553 + "stream_ingestion" 6554 + ], 6555 + "properties": { 6556 + "session_id": { 6557 + "type": "string", 6558 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6559 + }, 6560 + "session_name": { 6561 + "type": "string", 6562 + "description": "Session name." 6563 + }, 6564 + "session_key": { 6565 + "type": "string", 6566 + "description": "The Video SDK custom session ID." 6567 + }, 6568 + "stream_ingestion": { 6569 + "type": "object", 6570 + "description": "Information about the stream ingestion.", 6571 + "required": [ 6572 + "stream_id", 6573 + "stream_name", 6574 + "stream_key", 6575 + "stream_url", 6576 + "backup_stream_url" 6577 + ], 6578 + "properties": { 6579 + "stream_id": { 6580 + "type": "string", 6581 + "description": "The stream ingestion ID." 6582 + }, 6583 + "stream_name": { 6584 + "type": "string", 6585 + "description": "The stream ingestion name." 6586 + }, 6587 + "stream_description": { 6588 + "type": "string", 6589 + "description": "The stream ingestion description." 6590 + }, 6591 + "stream_key": { 6592 + "type": "string", 6593 + "description": "The stream ingestion key." 6594 + }, 6595 + "stream_url": { 6596 + "type": "string", 6597 + "description": "The stream URL." 6598 + }, 6599 + "backup_stream_url": { 6600 + "type": "string", 6601 + "description": "The backup stream URL." 6602 + } 6603 + } 6604 + } 6605 + }, 6606 + "additionalProperties": false 6607 + } 6608 + }, 6609 + "additionalProperties": false 6610 + } 6611 + }, 6612 + "additionalProperties": false 6613 + }, 6614 + "examples": { 6615 + "json-example": { 6616 + "summary": "JSON example", 6617 + "value": "{\n \"event\": \"session.stream_ingestion_disconnected\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 6618 + } 6619 + } 6620 + } 6621 + } 6622 + }, 6623 + "responses": { 6624 + "200": { 6625 + "content": { 6626 + "application/json": { 6627 + "schema": { 6628 + "type": "object", 6629 + "required": ["event", "event_ts", "payload"], 6630 + "properties": { 6631 + "event": { 6632 + "type": "string", 6633 + "enum": ["session.stream_ingestion_disconnected"], 6634 + "description": "Name of the event." 6635 + }, 6636 + "event_ts": { 6637 + "type": "integer", 6638 + "format": "int64", 6639 + "description": "Timestamp (in milliseconds since epoch) when the event occurred. The value of this field is returned in long (int64) format." 6640 + }, 6641 + "payload": { 6642 + "type": "object", 6643 + "required": ["account_id", "object"], 6644 + "properties": { 6645 + "account_id": { 6646 + "type": "string", 6647 + "description": "The Video SDK account ID." 6648 + }, 6649 + "object": { 6650 + "type": "object", 6651 + "description": "Information about the session.", 6652 + "required": [ 6653 + "session_id", 6654 + "session_name", 6655 + "stream_ingestion" 6656 + ], 6657 + "properties": { 6658 + "session_id": { 6659 + "type": "string", 6660 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6661 + }, 6662 + "session_name": { 6663 + "type": "string", 6664 + "description": "Session name." 6665 + }, 6666 + "session_key": { 6667 + "type": "string", 6668 + "description": "The Video SDK custom session ID." 6669 + }, 6670 + "stream_ingestion": { 6671 + "type": "object", 6672 + "description": "Information about the stream ingestion.", 6673 + "required": [ 6674 + "stream_id", 6675 + "stream_name", 6676 + "stream_key", 6677 + "stream_url", 6678 + "backup_stream_url" 6679 + ], 6680 + "properties": { 6681 + "stream_id": { 6682 + "type": "string", 6683 + "description": "The stream ingestion ID." 6684 + }, 6685 + "stream_name": { 6686 + "type": "string", 6687 + "description": "The stream ingestion name." 6688 + }, 6689 + "stream_description": { 6690 + "type": "string", 6691 + "description": "The stream ingestion description." 6692 + }, 6693 + "stream_key": { 6694 + "type": "string", 6695 + "description": "The stream ingestion key." 6696 + }, 6697 + "stream_url": { 6698 + "type": "string", 6699 + "description": "The stream URL." 6700 + }, 6701 + "backup_stream_url": { 6702 + "type": "string", 6703 + "description": "The backup stream URL." 6704 + } 6705 + } 6706 + } 6707 + }, 6708 + "additionalProperties": false 6709 + } 6710 + }, 6711 + "additionalProperties": false 6712 + } 6713 + }, 6714 + "additionalProperties": false 6715 + }, 6716 + "examples": { 6717 + "json-example": { 6718 + "summary": "JSON example", 6719 + "value": "{\n \"event\": \"session.stream_ingestion_disconnected\",\n \"event_ts\": 1627906965803,\n \"payload\": {\n \"account_id\": \"D8cJuqWVQ623CI4Q8yQK0Q\",\n \"object\": {\n \"session_id\": \"4567UVWxYZABCdEfGhiJkl==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"stream_ingestion\": {\n \"stream_id\": \"sfk/aOFJSJSYhGwk1hnxgw==\",\n \"stream_name\": \"stream ingestion1\",\n \"stream_description\": \"stream ingestion1\",\n \"stream_key\": \"ABCDEFG12345HIJ6789\",\n \"stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\",\n \"backup_stream_url\": \"rtmp://a.rtmp.zoomevent.com/live1\"\n }\n }\n }\n}" 6720 + } 6721 + } 6722 + } 6723 + } 6724 + } 6725 + } 6726 + } 6727 + }, 6728 + "session.recording_recovered": { 6729 + "post": { 6730 + "tags": ["session"], 6731 + "operationId": "session.recording_recovered", 6732 + "requestBody": { 6733 + "description": "# session.recording_recovered\n---\n\nEvent: `session.recording_recovered`\n\n## Event description\n\nThe **Session recording recovered** event is triggered every time one of your app users or account users recover a recording from the trash.\n\nZoom allows users to recover their cloud recordings from trash within 30 days of deletion. You can recover a deleted cloud recording with:\n\n* The tab in the Zoom web client. See [Video SDK recordings and reports](https://developers.zoom.us/docs/video-sdk/reports/) for details.\n* The [Recover a single recording](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingStatusUpdateOne) or [Recover session's recordings](https://developers.zoom.us/docs/api/rest/reference/video-sdk/methods/#operation/recordingStatusUpdate) API.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n\t* A valid Event Notification Endpoint URL.\n\t* \"**Session recording recovered**\" subscription enabled under the **Recording** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_recovered` event notification:\n\n\n\n**Event type**: `session.recording_recovered`\n", 6734 + "content": { 6735 + "application/json": { 6736 + "schema": { 6737 + "type": "object", 6738 + "required": ["event", "event_ts", "payload"], 6739 + "properties": { 6740 + "event": { 6741 + "type": "string", 6742 + "enum": ["session.recording_recovered"], 6743 + "description": "The event's name." 6744 + }, 6745 + "event_ts": { 6746 + "type": "integer", 6747 + "format": "int64", 6748 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 6749 + }, 6750 + "payload": { 6751 + "type": "object", 6752 + "required": [ 6753 + "account_id", 6754 + "operator", 6755 + "operator_id", 6756 + "object" 6757 + ], 6758 + "properties": { 6759 + "account_id": { 6760 + "type": "string", 6761 + "description": "The Video SDK account ID." 6762 + }, 6763 + "operator": { 6764 + "type": "string", 6765 + "format": "email", 6766 + "description": "The email address of the user who deleted the recording." 6767 + }, 6768 + "operator_id": { 6769 + "type": "string", 6770 + "description": "The user ID of the user who deleted the recording." 6771 + }, 6772 + "object": { 6773 + "type": "object", 6774 + "description": "Information about the session. This object only returns updated properties.", 6775 + "required": [ 6776 + "session_id", 6777 + "session_name", 6778 + "session_key", 6779 + "start_time", 6780 + "timezone" 6781 + ], 6782 + "properties": { 6783 + "session_id": { 6784 + "type": "string", 6785 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6786 + }, 6787 + "session_name": { 6788 + "type": "string", 6789 + "description": "Session name." 6790 + }, 6791 + "session_key": { 6792 + "type": "string", 6793 + "description": "The Video SDK custom session ID." 6794 + }, 6795 + "start_time": { 6796 + "type": "string", 6797 + "format": "date-time", 6798 + "description": "The time at which the session started." 6799 + }, 6800 + "timezone": { 6801 + "type": "string", 6802 + "description": "The user's timezone." 6803 + } 6804 + }, 6805 + "additionalProperties": false 6806 + } 6807 + }, 6808 + "additionalProperties": false 6809 + } 6810 + }, 6811 + "additionalProperties": false 6812 + }, 6813 + "examples": { 6814 + "json-example": { 6815 + "summary": "JSON example", 6816 + "value": "{\n \"event\": \"session.recording_recovered\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n\t\"operator\" : \"user@example.com\",\n\t\"operator_id\" : \"I7zp-pYbTl22Z29H796Ixg\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 6817 + } 6818 + } 6819 + } 6820 + } 6821 + }, 6822 + "responses": { 6823 + "200": { 6824 + "content": { 6825 + "application/json": { 6826 + "schema": { 6827 + "type": "object", 6828 + "required": ["event", "event_ts", "payload"], 6829 + "properties": { 6830 + "event": { 6831 + "type": "string", 6832 + "enum": ["session.recording_recovered"], 6833 + "description": "The event's name." 6834 + }, 6835 + "event_ts": { 6836 + "type": "integer", 6837 + "format": "int64", 6838 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 6839 + }, 6840 + "payload": { 6841 + "type": "object", 6842 + "required": [ 6843 + "account_id", 6844 + "operator", 6845 + "operator_id", 6846 + "object" 6847 + ], 6848 + "properties": { 6849 + "account_id": { 6850 + "type": "string", 6851 + "description": "The Video SDK account ID." 6852 + }, 6853 + "operator": { 6854 + "type": "string", 6855 + "format": "email", 6856 + "description": "The email address of the user who deleted the recording." 6857 + }, 6858 + "operator_id": { 6859 + "type": "string", 6860 + "description": "The user ID of the user who deleted the recording." 6861 + }, 6862 + "object": { 6863 + "type": "object", 6864 + "description": "Information about the session. This object only returns updated properties.", 6865 + "required": [ 6866 + "session_id", 6867 + "session_name", 6868 + "session_key", 6869 + "start_time", 6870 + "timezone" 6871 + ], 6872 + "properties": { 6873 + "session_id": { 6874 + "type": "string", 6875 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6876 + }, 6877 + "session_name": { 6878 + "type": "string", 6879 + "description": "Session name." 6880 + }, 6881 + "session_key": { 6882 + "type": "string", 6883 + "description": "The Video SDK custom session ID." 6884 + }, 6885 + "start_time": { 6886 + "type": "string", 6887 + "format": "date-time", 6888 + "description": "The time at which the session started." 6889 + }, 6890 + "timezone": { 6891 + "type": "string", 6892 + "description": "The user's timezone." 6893 + } 6894 + }, 6895 + "additionalProperties": false 6896 + } 6897 + }, 6898 + "additionalProperties": false 6899 + } 6900 + }, 6901 + "additionalProperties": false 6902 + }, 6903 + "examples": { 6904 + "json-example": { 6905 + "summary": "JSON example", 6906 + "value": "{\n \"event\": \"session.recording_recovered\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n\t\"operator\" : \"user@example.com\",\n\t\"operator_id\" : \"I7zp-pYbTl22Z29H796Ixg\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\"\n }\n }\n}" 6907 + } 6908 + } 6909 + } 6910 + } 6911 + } 6912 + } 6913 + } 6914 + }, 6915 + "session.user_phone_callout_missed": { 6916 + "post": { 6917 + "tags": ["session"], 6918 + "operationId": "session.user_phone_callout_missed", 6919 + "requestBody": { 6920 + "description": "# session.user_phone_callout_missed\n\nThe **Invited party missed a session invitation through phone (call out)** event is triggered every time an invitation to join a session through phone (call out) times out. Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Invited party missed a session invitation through phone (call out)** subscription enabled under the **Session** event.\n\n\n\n\n**Event type**: `session.user_phone_callout_missed`\n", 6921 + "content": { 6922 + "application/json": { 6923 + "schema": { 6924 + "type": "object", 6925 + "required": ["event", "event_ts", "payload"], 6926 + "properties": { 6927 + "event": { 6928 + "type": "string", 6929 + "description": "The name of the event." 6930 + }, 6931 + "event_ts": { 6932 + "type": "integer", 6933 + "format": "int64", 6934 + "description": "A timestamp at which the event occurred." 6935 + }, 6936 + "payload": { 6937 + "type": "object", 6938 + "required": ["account_id", "object"], 6939 + "properties": { 6940 + "account_id": { 6941 + "type": "string", 6942 + "description": "The account ID of the session host." 6943 + }, 6944 + "object": { 6945 + "type": "object", 6946 + "description": "Information about the session.", 6947 + "required": [ 6948 + "session_id", 6949 + "session_name", 6950 + "session_key", 6951 + "user_key", 6952 + "host_id", 6953 + "participant" 6954 + ], 6955 + "properties": { 6956 + "id": { 6957 + "type": "integer", 6958 + "format": "int64", 6959 + "description": "The session ID.", 6960 + "deprecated": true 6961 + }, 6962 + "uuid": { 6963 + "type": "string", 6964 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 6965 + "deprecated": true 6966 + }, 6967 + "session_id": { 6968 + "type": "string", 6969 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 6970 + }, 6971 + "session_name": { 6972 + "type": "string", 6973 + "description": "Session name." 6974 + }, 6975 + "session_key": { 6976 + "type": "string", 6977 + "description": "The Video SDK custom session ID." 6978 + }, 6979 + "user_key": { 6980 + "type": "string", 6981 + "description": "Another identifier for the inviter. Can be a number or characters." 6982 + }, 6983 + "host_id": { 6984 + "type": "string", 6985 + "description": "The user ID of the session host." 6986 + }, 6987 + "participant": { 6988 + "type": "object", 6989 + "description": "Information about the invited user.", 6990 + "required": [ 6991 + "invitee_name", 6992 + "phone_number", 6993 + "from_number" 6994 + ], 6995 + "properties": { 6996 + "invitee_name": { 6997 + "type": "string", 6998 + "description": "The user's name to display in the session." 6999 + }, 7000 + "phone_number": { 7001 + "type": "integer", 7002 + "format": "int64", 7003 + "description": "The user's phone number." 7004 + }, 7005 + "from_number": { 7006 + "type": "integer", 7007 + "format": "int64", 7008 + "description": "The number used to call out to the invited user." 7009 + } 7010 + }, 7011 + "additionalProperties": false 7012 + } 7013 + }, 7014 + "additionalProperties": false 7015 + } 7016 + }, 7017 + "additionalProperties": false 7018 + } 7019 + }, 7020 + "additionalProperties": false 7021 + }, 7022 + "examples": { 7023 + "json-example": { 7024 + "summary": "JSON example", 7025 + "value": "{\n \"event\": \"session.user_phone_callout_missed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 7026 + } 7027 + } 7028 + } 7029 + } 7030 + }, 7031 + "responses": { 7032 + "200": { 7033 + "content": { 7034 + "application/json": { 7035 + "schema": { 7036 + "type": "object", 7037 + "required": ["event", "event_ts", "payload"], 7038 + "properties": { 7039 + "event": { 7040 + "type": "string", 7041 + "description": "The name of the event." 7042 + }, 7043 + "event_ts": { 7044 + "type": "integer", 7045 + "format": "int64", 7046 + "description": "A timestamp at which the event occurred." 7047 + }, 7048 + "payload": { 7049 + "type": "object", 7050 + "required": ["account_id", "object"], 7051 + "properties": { 7052 + "account_id": { 7053 + "type": "string", 7054 + "description": "The account ID of the session host." 7055 + }, 7056 + "object": { 7057 + "type": "object", 7058 + "description": "Information about the session.", 7059 + "required": [ 7060 + "session_id", 7061 + "session_name", 7062 + "session_key", 7063 + "user_key", 7064 + "host_id", 7065 + "participant" 7066 + ], 7067 + "properties": { 7068 + "id": { 7069 + "type": "integer", 7070 + "format": "int64", 7071 + "description": "The session ID.", 7072 + "deprecated": true 7073 + }, 7074 + "uuid": { 7075 + "type": "string", 7076 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 7077 + "deprecated": true 7078 + }, 7079 + "session_id": { 7080 + "type": "string", 7081 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 7082 + }, 7083 + "session_name": { 7084 + "type": "string", 7085 + "description": "Session name." 7086 + }, 7087 + "session_key": { 7088 + "type": "string", 7089 + "description": "The Video SDK custom session ID." 7090 + }, 7091 + "user_key": { 7092 + "type": "string", 7093 + "description": "Another identifier for the inviter. Can be a number or characters." 7094 + }, 7095 + "host_id": { 7096 + "type": "string", 7097 + "description": "The user ID of the session host." 7098 + }, 7099 + "participant": { 7100 + "type": "object", 7101 + "description": "Information about the invited user.", 7102 + "required": [ 7103 + "invitee_name", 7104 + "phone_number", 7105 + "from_number" 7106 + ], 7107 + "properties": { 7108 + "invitee_name": { 7109 + "type": "string", 7110 + "description": "The user's name to display in the session." 7111 + }, 7112 + "phone_number": { 7113 + "type": "integer", 7114 + "format": "int64", 7115 + "description": "The user's phone number." 7116 + }, 7117 + "from_number": { 7118 + "type": "integer", 7119 + "format": "int64", 7120 + "description": "The number used to call out to the invited user." 7121 + } 7122 + }, 7123 + "additionalProperties": false 7124 + } 7125 + }, 7126 + "additionalProperties": false 7127 + } 7128 + }, 7129 + "additionalProperties": false 7130 + } 7131 + }, 7132 + "additionalProperties": false 7133 + }, 7134 + "examples": { 7135 + "json-example": { 7136 + "summary": "JSON example", 7137 + "value": "{\n \"event\": \"session.user_phone_callout_missed\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 7138 + } 7139 + } 7140 + } 7141 + } 7142 + } 7143 + } 7144 + } 7145 + }, 7146 + "session.user_phone_callout_rejected": { 7147 + "post": { 7148 + "tags": ["session"], 7149 + "operationId": "session.user_phone_callout_rejected", 7150 + "requestBody": { 7151 + "description": "# session.user_phone_callout_rejected\n\nThe **Invited party rejected a session invitation through phone (call out)** event is triggered every time a user rejects an invitation to join a session through phone (call out). Video SDK call out operates in a similar manner as [Zoom meeting call out](https://support.zoom.com/hc/article?id=zm_kb&sysparm_article=KB0062038).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n * A valid **Event Notification Endpoint URL**.\n * The **Invited party rejected a session invitation through phone (call out)** subscription enabled under the **Session** event.\n\n\n\n\n**Event type**: `session.user_phone_callout_rejected`\n", 7152 + "content": { 7153 + "application/json": { 7154 + "schema": { 7155 + "type": "object", 7156 + "required": ["event", "event_ts", "payload"], 7157 + "properties": { 7158 + "event": { 7159 + "type": "string", 7160 + "description": "The name of the event." 7161 + }, 7162 + "event_ts": { 7163 + "type": "integer", 7164 + "format": "int64", 7165 + "description": "A timestamp at which the event occurred." 7166 + }, 7167 + "payload": { 7168 + "type": "object", 7169 + "required": ["account_id", "object"], 7170 + "properties": { 7171 + "account_id": { 7172 + "type": "string", 7173 + "description": "The account ID of the session host." 7174 + }, 7175 + "object": { 7176 + "type": "object", 7177 + "description": "Information about the session.", 7178 + "required": [ 7179 + "session_id", 7180 + "session_name", 7181 + "session_key", 7182 + "user_key", 7183 + "host_id", 7184 + "participant" 7185 + ], 7186 + "properties": { 7187 + "id": { 7188 + "type": "integer", 7189 + "format": "int64", 7190 + "description": "The session ID.", 7191 + "deprecated": true 7192 + }, 7193 + "uuid": { 7194 + "type": "string", 7195 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 7196 + "deprecated": true 7197 + }, 7198 + "session_id": { 7199 + "type": "string", 7200 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 7201 + }, 7202 + "session_name": { 7203 + "type": "string", 7204 + "description": "Session name." 7205 + }, 7206 + "session_key": { 7207 + "type": "string", 7208 + "description": "The Video SDK custom session ID." 7209 + }, 7210 + "user_key": { 7211 + "type": "string", 7212 + "description": "Another identifier for the inviter. Can be a number or characters." 7213 + }, 7214 + "host_id": { 7215 + "type": "string", 7216 + "description": "The user ID of the session host." 7217 + }, 7218 + "participant": { 7219 + "type": "object", 7220 + "description": "Information about the invited user.", 7221 + "required": [ 7222 + "invitee_name", 7223 + "phone_number", 7224 + "from_number" 7225 + ], 7226 + "properties": { 7227 + "invitee_name": { 7228 + "type": "string", 7229 + "description": "The user's name to display in the session." 7230 + }, 7231 + "phone_number": { 7232 + "type": "integer", 7233 + "format": "int64", 7234 + "description": "The user's phone number." 7235 + }, 7236 + "from_number": { 7237 + "type": "integer", 7238 + "format": "int64", 7239 + "description": "The number used to call out to the invited user." 7240 + } 7241 + }, 7242 + "additionalProperties": false 7243 + } 7244 + }, 7245 + "additionalProperties": false 7246 + } 7247 + }, 7248 + "additionalProperties": false 7249 + } 7250 + }, 7251 + "additionalProperties": false 7252 + }, 7253 + "examples": { 7254 + "json-example": { 7255 + "summary": "JSON example", 7256 + "value": "{\n \"event\": \"session.user_phone_callout_rejected\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 7257 + } 7258 + } 7259 + } 7260 + } 7261 + }, 7262 + "responses": { 7263 + "200": { 7264 + "content": { 7265 + "application/json": { 7266 + "schema": { 7267 + "type": "object", 7268 + "required": ["event", "event_ts", "payload"], 7269 + "properties": { 7270 + "event": { 7271 + "type": "string", 7272 + "description": "The name of the event." 7273 + }, 7274 + "event_ts": { 7275 + "type": "integer", 7276 + "format": "int64", 7277 + "description": "A timestamp at which the event occurred." 7278 + }, 7279 + "payload": { 7280 + "type": "object", 7281 + "required": ["account_id", "object"], 7282 + "properties": { 7283 + "account_id": { 7284 + "type": "string", 7285 + "description": "The account ID of the session host." 7286 + }, 7287 + "object": { 7288 + "type": "object", 7289 + "description": "Information about the session.", 7290 + "required": [ 7291 + "session_id", 7292 + "session_name", 7293 + "session_key", 7294 + "user_key", 7295 + "host_id", 7296 + "participant" 7297 + ], 7298 + "properties": { 7299 + "id": { 7300 + "type": "integer", 7301 + "format": "int64", 7302 + "description": "The session ID.", 7303 + "deprecated": true 7304 + }, 7305 + "uuid": { 7306 + "type": "string", 7307 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 7308 + "deprecated": true 7309 + }, 7310 + "session_id": { 7311 + "type": "string", 7312 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 7313 + }, 7314 + "session_name": { 7315 + "type": "string", 7316 + "description": "Session name." 7317 + }, 7318 + "session_key": { 7319 + "type": "string", 7320 + "description": "The Video SDK custom session ID." 7321 + }, 7322 + "user_key": { 7323 + "type": "string", 7324 + "description": "Another identifier for the inviter. Can be a number or characters." 7325 + }, 7326 + "host_id": { 7327 + "type": "string", 7328 + "description": "The user ID of the session host." 7329 + }, 7330 + "participant": { 7331 + "type": "object", 7332 + "description": "Information about the invited user.", 7333 + "required": [ 7334 + "invitee_name", 7335 + "phone_number", 7336 + "from_number" 7337 + ], 7338 + "properties": { 7339 + "invitee_name": { 7340 + "type": "string", 7341 + "description": "The user's name to display in the session." 7342 + }, 7343 + "phone_number": { 7344 + "type": "integer", 7345 + "format": "int64", 7346 + "description": "The user's phone number." 7347 + }, 7348 + "from_number": { 7349 + "type": "integer", 7350 + "format": "int64", 7351 + "description": "The number used to call out to the invited user." 7352 + } 7353 + }, 7354 + "additionalProperties": false 7355 + } 7356 + }, 7357 + "additionalProperties": false 7358 + } 7359 + }, 7360 + "additionalProperties": false 7361 + } 7362 + }, 7363 + "additionalProperties": false 7364 + }, 7365 + "examples": { 7366 + "json-example": { 7367 + "summary": "JSON example", 7368 + "value": "{\n \"event\": \"session.user_phone_callout_rejected\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"session_key\": \"ABC36jaBI145\",\n \"user_key\": \"ASD74dfDI854\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"participant\": {\n \"invitee_name\": \"Jill Chill\",\n \"phone_number\": 15555550100,\n \"from_number\": 13167900000\n }\n }\n }\n}" 7369 + } 7370 + } 7371 + } 7372 + } 7373 + } 7374 + } 7375 + } 7376 + }, 7377 + "session.user_room_system_callout_accepted": { 7378 + "post": { 7379 + "tags": ["session"], 7380 + "operationId": "session.user_room_system_callout_accepted", 7381 + "requestBody": { 7382 + "description": "# session.user_room_system_callout_accepted\n\nThe **Invited party answered a session invitation through phone (call out) via Zoom room** event is triggered every time a user [joins a session through phone (call out) from a Zoom room](https://support.zoom.us/hc/en-us/articles/205369035).\n\n## Prerequisites\n\n* **Event Subscriptions** must be enabled for your app with the following configurations:\n* A valid **Event Notification Endpoint URL**.\n* The **Invited party answered a session invitation through phone (call out) via Zoom room** subscription enabled under the **Session** event.\n\n\n\n**Event type**: `session.user_room_system_callout_accepted`\n", 7383 + "content": { 7384 + "application/json": { 7385 + "schema": { 7386 + "type": "object", 7387 + "required": ["event", "event_ts", "payload"], 7388 + "properties": { 7389 + "event": { 7390 + "type": "string", 7391 + "description": "The name of the event." 7392 + }, 7393 + "event_ts": { 7394 + "type": "integer", 7395 + "format": "int64", 7396 + "description": "A timestamp at which the event occurred." 7397 + }, 7398 + "payload": { 7399 + "type": "object", 7400 + "required": ["account_id", "object"], 7401 + "properties": { 7402 + "account_id": { 7403 + "type": "string", 7404 + "description": "The account ID of the session host." 7405 + }, 7406 + "object": { 7407 + "type": "object", 7408 + "description": "Information about the session.", 7409 + "required": [ 7410 + "session_id", 7411 + "session_name", 7412 + "host_id", 7413 + "message_id", 7414 + "inviter_name", 7415 + "participant" 7416 + ], 7417 + "properties": { 7418 + "id": { 7419 + "type": "integer", 7420 + "format": "int64", 7421 + "description": "The session ID.", 7422 + "deprecated": true 7423 + }, 7424 + "uuid": { 7425 + "type": "string", 7426 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 7427 + "deprecated": true 7428 + }, 7429 + "session_id": { 7430 + "type": "string", 7431 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 7432 + }, 7433 + "session_name": { 7434 + "type": "string", 7435 + "description": "Session name." 7436 + }, 7437 + "host_id": { 7438 + "type": "string", 7439 + "description": "The user ID of the session host." 7440 + }, 7441 + "message_id": { 7442 + "type": "string", 7443 + "description": "The request unique identifier (UUID)." 7444 + }, 7445 + "inviter_name": { 7446 + "type": "string", 7447 + "description": "The user name of the event's trigger." 7448 + }, 7449 + "participant": { 7450 + "type": "object", 7451 + "description": "Information about the invited participant.", 7452 + "required": ["call_type", "device_ip"], 7453 + "properties": { 7454 + "call_type": { 7455 + "type": "string", 7456 + "description": "The type of call out. Use a value of h323 or sip." 7457 + }, 7458 + "device_ip": { 7459 + "type": "string", 7460 + "description": "The user's device IP address." 7461 + } 7462 + }, 7463 + "additionalProperties": true 7464 + } 7465 + }, 7466 + "additionalProperties": false 7467 + } 7468 + }, 7469 + "additionalProperties": false 7470 + } 7471 + }, 7472 + "additionalProperties": false 7473 + }, 7474 + "examples": { 7475 + "json-example": { 7476 + "summary": "JSON example", 7477 + "value": "{\n \"event\": \"session.user_room_system_callout_accepted\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 7478 + } 7479 + } 7480 + } 7481 + } 7482 + }, 7483 + "responses": { 7484 + "200": { 7485 + "content": { 7486 + "application/json": { 7487 + "schema": { 7488 + "type": "object", 7489 + "required": ["event", "event_ts", "payload"], 7490 + "properties": { 7491 + "event": { 7492 + "type": "string", 7493 + "description": "The name of the event." 7494 + }, 7495 + "event_ts": { 7496 + "type": "integer", 7497 + "format": "int64", 7498 + "description": "A timestamp at which the event occurred." 7499 + }, 7500 + "payload": { 7501 + "type": "object", 7502 + "required": ["account_id", "object"], 7503 + "properties": { 7504 + "account_id": { 7505 + "type": "string", 7506 + "description": "The account ID of the session host." 7507 + }, 7508 + "object": { 7509 + "type": "object", 7510 + "description": "Information about the session.", 7511 + "required": [ 7512 + "session_id", 7513 + "session_name", 7514 + "host_id", 7515 + "message_id", 7516 + "inviter_name", 7517 + "participant" 7518 + ], 7519 + "properties": { 7520 + "id": { 7521 + "type": "integer", 7522 + "format": "int64", 7523 + "description": "The session ID.", 7524 + "deprecated": true 7525 + }, 7526 + "uuid": { 7527 + "type": "string", 7528 + "description": "The session's universally unique identifier (UUID). Each session instance generates a session UUID.", 7529 + "deprecated": true 7530 + }, 7531 + "session_id": { 7532 + "type": "string", 7533 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 7534 + }, 7535 + "session_name": { 7536 + "type": "string", 7537 + "description": "Session name." 7538 + }, 7539 + "host_id": { 7540 + "type": "string", 7541 + "description": "The user ID of the session host." 7542 + }, 7543 + "message_id": { 7544 + "type": "string", 7545 + "description": "The request unique identifier (UUID)." 7546 + }, 7547 + "inviter_name": { 7548 + "type": "string", 7549 + "description": "The user name of the event's trigger." 7550 + }, 7551 + "participant": { 7552 + "type": "object", 7553 + "description": "Information about the invited participant.", 7554 + "required": ["call_type", "device_ip"], 7555 + "properties": { 7556 + "call_type": { 7557 + "type": "string", 7558 + "description": "The type of call out. Use a value of h323 or sip." 7559 + }, 7560 + "device_ip": { 7561 + "type": "string", 7562 + "description": "The user's device IP address." 7563 + } 7564 + }, 7565 + "additionalProperties": true 7566 + } 7567 + }, 7568 + "additionalProperties": false 7569 + } 7570 + }, 7571 + "additionalProperties": false 7572 + } 7573 + }, 7574 + "additionalProperties": false 7575 + }, 7576 + "examples": { 7577 + "json-example": { 7578 + "summary": "JSON example", 7579 + "value": "{\n \"event\": \"session.user_room_system_callout_accepted\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"dzVA4QmMQfyISoRcpFO8CA\",\n \"object\": {\n \"id\": 713592696,\n \"uuid\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_id\": \"4444AAAiAAAAAiAiAiiAii==\",\n \"session_name\": \"My Session\",\n \"host_id\": \"ICuPoX4ERtikRcKqkVxunQ\",\n \"message_id\": \"atsXxhSEQWit9t+U02HXNQ==\",\n \"inviter_name\": \"Jill Chill\",\n \"participant\": {\n \"call_type\": \"h323\",\n \"device_ip\": \"10.100.111.237\"\n }\n }\n }\n}" 7580 + } 7581 + } 7582 + } 7583 + } 7584 + } 7585 + } 7586 + } 7587 + }, 7588 + "session.recording_stopped": { 7589 + "post": { 7590 + "tags": ["session"], 7591 + "operationId": "session.recording_stopped", 7592 + "requestBody": { 7593 + "description": "# session.recording_stopped\n---\n\nEvent: `session.recording_stopped`\n\n## Event description\n\nThe **Session recording stopped** event is triggered every time a previously paused recording of a session is resumed.\n\nOnly a session host or co-host can start, pause, resume, or stop a cloud recording. A recording is considered complete **after** the host or co-host ends the session. See [Enable cloud recording](https://developers.zoom.us/docs/video-sdk/account/#enable-cloud-recording) for details.\n\n## Prerequisites\n\n* Cloud Recording must be enabled on the Video SDK account.\n* Event Subscriptions must be enabled for your app with the following configurations:\n * A valid Event Notification Endpoint URL.\n * **Session recording stopped** subscription enabled under the **Recording** event.\n\nThe tabs below display the complete schema, payload with data types, and an example of the `session.recording_stopped` event notification:\n\n\n\n**Event type**: `session.recording_stopped`\n", 7594 + "content": { 7595 + "application/json": { 7596 + "schema": { 7597 + "type": "object", 7598 + "required": ["event", "event_ts", "payload"], 7599 + "properties": { 7600 + "event": { 7601 + "type": "string", 7602 + "enum": ["session.recording_stopped"], 7603 + "description": "The event's name." 7604 + }, 7605 + "event_ts": { 7606 + "type": "integer", 7607 + "format": "int64", 7608 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 7609 + }, 7610 + "payload": { 7611 + "type": "object", 7612 + "required": ["account_id", "object"], 7613 + "properties": { 7614 + "account_id": { 7615 + "type": "string", 7616 + "description": "The Video SDK account ID." 7617 + }, 7618 + "object": { 7619 + "type": "object", 7620 + "description": "Information about the session. This object only returns updated properties.", 7621 + "required": [ 7622 + "session_id", 7623 + "session_name", 7624 + "session_key", 7625 + "start_time", 7626 + "timezone", 7627 + "recording_file" 7628 + ], 7629 + "properties": { 7630 + "session_id": { 7631 + "type": "string", 7632 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 7633 + }, 7634 + "session_name": { 7635 + "type": "string", 7636 + "description": "Session name." 7637 + }, 7638 + "session_key": { 7639 + "type": "string", 7640 + "description": "The Video SDK custom session ID." 7641 + }, 7642 + "start_time": { 7643 + "type": "string", 7644 + "format": "date-time", 7645 + "description": "The time at which the session started." 7646 + }, 7647 + "timezone": { 7648 + "type": "string", 7649 + "description": "The user's timezone." 7650 + }, 7651 + "recording_file": { 7652 + "type": "object", 7653 + "properties": { 7654 + "recording_start": { 7655 + "type": "string", 7656 + "description": "The recording start time." 7657 + }, 7658 + "recording_end": { 7659 + "type": "string", 7660 + "description": "The recording end time. Response in general query." 7661 + } 7662 + } 7663 + } 7664 + }, 7665 + "additionalProperties": false 7666 + } 7667 + }, 7668 + "additionalProperties": false 7669 + } 7670 + }, 7671 + "additionalProperties": false 7672 + }, 7673 + "examples": { 7674 + "json-example": { 7675 + "summary": "JSON example", 7676 + "value": "{\n \"event\": \"session.recording_stopped\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 7677 + } 7678 + } 7679 + } 7680 + } 7681 + }, 7682 + "responses": { 7683 + "200": { 7684 + "content": { 7685 + "application/json": { 7686 + "schema": { 7687 + "type": "object", 7688 + "required": ["event", "event_ts", "payload"], 7689 + "properties": { 7690 + "event": { 7691 + "type": "string", 7692 + "enum": ["session.recording_stopped"], 7693 + "description": "The event's name." 7694 + }, 7695 + "event_ts": { 7696 + "type": "integer", 7697 + "format": "int64", 7698 + "description": "A timestamp, in milliseconds since epoch, at which the event occurred." 7699 + }, 7700 + "payload": { 7701 + "type": "object", 7702 + "required": ["account_id", "object"], 7703 + "properties": { 7704 + "account_id": { 7705 + "type": "string", 7706 + "description": "The Video SDK account ID." 7707 + }, 7708 + "object": { 7709 + "type": "object", 7710 + "description": "Information about the session. This object only returns updated properties.", 7711 + "required": [ 7712 + "session_id", 7713 + "session_name", 7714 + "session_key", 7715 + "start_time", 7716 + "timezone", 7717 + "recording_file" 7718 + ], 7719 + "properties": { 7720 + "session_id": { 7721 + "type": "string", 7722 + "description": "Unique session identifier. Each instance of the session will have its own session_id." 7723 + }, 7724 + "session_name": { 7725 + "type": "string", 7726 + "description": "Session name." 7727 + }, 7728 + "session_key": { 7729 + "type": "string", 7730 + "description": "The Video SDK custom session ID." 7731 + }, 7732 + "start_time": { 7733 + "type": "string", 7734 + "format": "date-time", 7735 + "description": "The time at which the session started." 7736 + }, 7737 + "timezone": { 7738 + "type": "string", 7739 + "description": "The user's timezone." 7740 + }, 7741 + "recording_file": { 7742 + "type": "object", 7743 + "properties": { 7744 + "recording_start": { 7745 + "type": "string", 7746 + "description": "The recording start time." 7747 + }, 7748 + "recording_end": { 7749 + "type": "string", 7750 + "description": "The recording end time. Response in general query." 7751 + } 7752 + } 7753 + } 7754 + }, 7755 + "additionalProperties": false 7756 + } 7757 + }, 7758 + "additionalProperties": false 7759 + } 7760 + }, 7761 + "additionalProperties": false 7762 + }, 7763 + "examples": { 7764 + "json-example": { 7765 + "summary": "JSON example", 7766 + "value": "{\n \"event\": \"session.recording_stopped\",\n \"event_ts\": 1626230691572,\n \"payload\": {\n \"account_id\": \"AAAAAABBBB\",\n \"object\": {\n \"session_id\": 1234567890,\n \"session_name\": \"My Personal Recording\",\n \"session_key\": \"ABC36jaBI145\",\n \"start_time\": \"2021-07-13T21:44:51Z\",\n \"timezone\": \"America/Los_Angeles\",\n \"recording_file\": {\n \"recording_start\": \"2021-03-23T22:14:57Z\",\n \"recording_end\": \"2021-03-23T23:15:41Z\"\n }\n }\n }\n}" 7767 + } 7768 + } 7769 + } 7770 + } 7771 + } 7772 + } 7773 + } 7774 + } 7775 + } 7776 + }
+7
packages/openapi-ts/src/debug/index.ts
··· 1 + import { graph } from './graph'; 2 + import { ir } from './ir'; 3 + 4 + export const debugTools = { 5 + graph, 6 + ir, 7 + };
+126
packages/openapi-ts/src/debug/ir.ts
··· 1 + import colors from 'ansi-colors'; 2 + 3 + import type { IR } from '../ir/types'; 4 + import { httpMethods } from '../openApi/shared/utils/operation'; 5 + 6 + export interface PrintOptions { 7 + /** 8 + * Indentation depth for `JSON.stringify()` when printing objects. 9 + * 10 + * @default 2 11 + */ 12 + depth?: number; 13 + /** 14 + * Which section of the IR to print. Use 'all' to print every section. 15 + * 16 + * @default 'all' 17 + */ 18 + section?: keyof IR.Model | 'all'; 19 + /** 20 + * How much detail to print. 21 + * 22 + * - `summary` → only keys, names, operationIds, status codes 23 + * - `full` → dump full JSON structures 24 + * 25 + * @default 'summary' 26 + */ 27 + verbosity?: 'full' | 'summary'; 28 + } 29 + 30 + const indent = (level: number) => ' '.repeat(level); 31 + 32 + const log = (message: string, level?: number) => 33 + console.log(`${indent(level ?? 0)}${message}`); 34 + 35 + const print = (ir: IR.Model, options: PrintOptions = {}) => { 36 + const { depth = 2, section = 'all', verbosity = 'summary' } = options; 37 + 38 + const printObject = ( 39 + obj: unknown, 40 + level: number, 41 + kind: 'responses' | 'requestBody' | 'schema' | 'generic' = 'generic', 42 + ) => { 43 + if (verbosity === 'summary' && obj && typeof obj === 'object') { 44 + if (kind === 'responses') { 45 + const count = Object.keys(obj).length; 46 + const noun = count !== 1 ? 'codes' : 'code'; 47 + log(`responses: ${colors.yellow(`${count} ${noun}`)}`, level); 48 + } else if (kind === 'requestBody') { 49 + log(`requestBody: ${Object.keys(obj).join(', ')}`, level); 50 + } else if (kind === 'schema') { 51 + log(`schema keys: ${Object.keys(obj).join(', ')}`, level); 52 + } else { 53 + log(`keys: ${Object.keys(obj).join(', ')}`, level); 54 + } 55 + } else { 56 + log(JSON.stringify(obj, null, depth), level); 57 + } 58 + }; 59 + 60 + const printPathItem = ( 61 + key: string, 62 + item: IR.PathItemObject | IR.ReferenceObject, 63 + base: number = 1, 64 + ) => { 65 + if ('$ref' in item) { 66 + log(`${colors.cyan(key)} is a $ref → ${colors.yellow(item.$ref)}`, base); 67 + return; 68 + } 69 + 70 + for (const method of Object.keys(item) as Array<keyof IR.PathItemObject>) { 71 + if (!httpMethods.includes(method)) continue; 72 + 73 + const operation = item[method]!; 74 + log( 75 + `${colors.green(method.toUpperCase())} ${colors.cyan(key)} (${colors.magenta(operation.operationId)})`, 76 + base, 77 + ); 78 + 79 + if (operation.body) printObject(operation.body, base + 1, 'requestBody'); 80 + if (operation.responses) 81 + printObject(operation.responses, base + 1, 'responses'); 82 + } 83 + }; 84 + 85 + const sections = 86 + section === 'all' 87 + ? (Object.keys(ir) as unknown as ReadonlyArray<keyof IR.Model>) 88 + : [section]; 89 + 90 + for (const section of sections) { 91 + switch (section) { 92 + case 'components': 93 + if (ir.components?.schemas) { 94 + log( 95 + `Components: ${Object.keys(ir.components.schemas).length} schemas`, 96 + ); 97 + for (const [, schema] of Object.entries(ir.components.schemas)) { 98 + printObject(schema, 1, 'schema'); 99 + } 100 + } 101 + break; 102 + case 'paths': { 103 + const paths = ir.paths || {}; 104 + log(`paths (${Object.keys(paths).length} items):`); 105 + for (const [path, item] of Object.entries(paths)) { 106 + printPathItem(path, item); 107 + } 108 + break; 109 + } 110 + case 'servers': 111 + break; 112 + case 'webhooks': { 113 + const webhooks = ir.webhooks || {}; 114 + log(`webhooks (${Object.keys(webhooks).length} items):`); 115 + for (const [path, item] of Object.entries(webhooks)) { 116 + printPathItem(path, item); 117 + } 118 + break; 119 + } 120 + } 121 + } 122 + }; 123 + 124 + export const ir = { 125 + print, 126 + } as const;
+5
packages/openapi-ts/src/ir/types.d.ts
··· 208 208 209 209 type IRServerObject = ServerObject; 210 210 211 + type IRWebhookObject = IRPathItemObject; 212 + 211 213 interface IRModel { 212 214 components?: IRComponentsObject; 213 215 paths?: IRPathsObject; 214 216 servers?: ReadonlyArray<IRServerObject>; 217 + webhooks?: Record<string, IRWebhookObject>; 215 218 } 216 219 217 220 export namespace IR { ··· 225 228 export type ParametersObject = IRParametersObject; 226 229 export type PathItemObject = IRPathItemObject; 227 230 export type PathsObject = IRPathsObject; 231 + export type ReferenceObject = ReferenceObject; 228 232 export type RequestBodyObject = IRRequestBodyObject; 229 233 export type ResponseObject = IRResponseObject; 230 234 export type ResponsesObject = IRResponsesObject; 231 235 export type SchemaObject = IRSchemaObject; 232 236 export type SecurityObject = IRSecurityObject; 233 237 export type ServerObject = IRServerObject; 238 + export type WebhookObject = IRWebhookObject; 234 239 }
+3 -3
packages/openapi-ts/src/openApi/2.0.x/parser/__tests__/operation.test.ts
··· 2 2 3 3 import type { IR } from '../../../../ir/types'; 4 4 import type { SecuritySchemeObject } from '../../types/spec'; 5 - import { parseOperation } from '../operation'; 5 + import { parsePathOperation } from '../operation'; 6 6 7 - type ParseOperationProps = Parameters<typeof parseOperation>[0]; 7 + type ParseOperationProps = Parameters<typeof parsePathOperation>[0]; 8 8 9 9 describe('operation', () => { 10 10 const context = { ··· 56 56 ids: new Map<string, string>(), 57 57 }; 58 58 59 - parseOperation({ 59 + parsePathOperation({ 60 60 context, 61 61 method, 62 62 operation,
+25 -23
packages/openapi-ts/src/openApi/2.0.x/parser/index.ts
··· 18 18 SecuritySchemeObject, 19 19 } from '../types/spec'; 20 20 import { filterSpec } from './filter'; 21 - import { parseOperation } from './operation'; 21 + import { parsePathOperation } from './operation'; 22 22 import { parametersArrayToObject } from './parameter'; 23 23 import { parseSchema } from './schema'; 24 24 import { parseServers } from './server'; ··· 102 102 responses: {}, 103 103 security: context.spec.security, 104 104 }; 105 - const operationArgs: Omit<Parameters<typeof parseOperation>[0], 'method'> = 106 - { 107 - context, 108 - operation: { 109 - ...commonOperation, 110 - parameters: parametersArrayToObject({ 111 - context, 112 - operation: commonOperation, 113 - parameters: finalPathItem.parameters, 114 - }), 115 - }, 116 - path: path as PathKeys, 117 - securitySchemesMap, 118 - state, 119 - }; 105 + const operationArgs: Omit< 106 + Parameters<typeof parsePathOperation>[0], 107 + 'method' 108 + > = { 109 + context, 110 + operation: { 111 + ...commonOperation, 112 + parameters: parametersArrayToObject({ 113 + context, 114 + operation: commonOperation, 115 + parameters: finalPathItem.parameters, 116 + }), 117 + }, 118 + path: path as PathKeys, 119 + securitySchemesMap, 120 + state, 121 + }; 120 122 121 123 if (finalPathItem.delete) { 122 124 const parameters = mergeParametersObjects({ ··· 127 129 }), 128 130 target: operationArgs.operation.parameters, 129 131 }); 130 - parseOperation({ 132 + parsePathOperation({ 131 133 ...operationArgs, 132 134 method: 'delete', 133 135 operation: { ··· 147 149 }), 148 150 target: operationArgs.operation.parameters, 149 151 }); 150 - parseOperation({ 152 + parsePathOperation({ 151 153 ...operationArgs, 152 154 method: 'get', 153 155 operation: { ··· 167 169 }), 168 170 target: operationArgs.operation.parameters, 169 171 }); 170 - parseOperation({ 172 + parsePathOperation({ 171 173 ...operationArgs, 172 174 method: 'head', 173 175 operation: { ··· 187 189 }), 188 190 target: operationArgs.operation.parameters, 189 191 }); 190 - parseOperation({ 192 + parsePathOperation({ 191 193 ...operationArgs, 192 194 method: 'options', 193 195 operation: { ··· 207 209 }), 208 210 target: operationArgs.operation.parameters, 209 211 }); 210 - parseOperation({ 212 + parsePathOperation({ 211 213 ...operationArgs, 212 214 method: 'patch', 213 215 operation: { ··· 227 229 }), 228 230 target: operationArgs.operation.parameters, 229 231 }); 230 - parseOperation({ 232 + parsePathOperation({ 231 233 ...operationArgs, 232 234 method: 'post', 233 235 operation: { ··· 247 249 }), 248 250 target: operationArgs.operation.parameters, 249 251 }); 250 - parseOperation({ 252 + parsePathOperation({ 251 253 ...operationArgs, 252 254 method: 'put', 253 255 operation: {
+1 -1
packages/openapi-ts/src/openApi/2.0.x/parser/operation.ts
··· 340 340 return irOperation; 341 341 }; 342 342 343 - export const parseOperation = ({ 343 + export const parsePathOperation = ({ 344 344 context, 345 345 method, 346 346 operation,
+3 -3
packages/openapi-ts/src/openApi/3.0.x/parser/__tests__/operation.test.ts
··· 2 2 3 3 import type { IR } from '../../../../ir/types'; 4 4 import type { SecuritySchemeObject } from '../../types/spec'; 5 - import { parseOperation } from '../operation'; 5 + import { parsePathOperation } from '../operation'; 6 6 7 - type ParseOperationProps = Parameters<typeof parseOperation>[0]; 7 + type ParseOperationProps = Parameters<typeof parsePathOperation>[0]; 8 8 9 9 describe('operation', () => { 10 10 const context = { ··· 65 65 ids: new Map<string, string>(), 66 66 }; 67 67 68 - parseOperation({ 68 + parsePathOperation({ 69 69 context, 70 70 method, 71 71 operation,
+11 -11
packages/openapi-ts/src/openApi/3.0.x/parser/index.ts
··· 19 19 SecuritySchemeObject, 20 20 } from '../types/spec'; 21 21 import { filterSpec } from './filter'; 22 - import { parseOperation } from './operation'; 22 + import { parsePathOperation } from './operation'; 23 23 import { parametersArrayToObject, parseParameter } from './parameter'; 24 24 import { parseRequestBody } from './requestBody'; 25 25 import { parseSchema } from './schema'; ··· 129 129 : pathItem; 130 130 131 131 const operationArgs: Omit< 132 - Parameters<typeof parseOperation>[0], 132 + Parameters<typeof parsePathOperation>[0], 133 133 'method' | 'operation' 134 134 > & { 135 135 operation: Omit< 136 - Parameters<typeof parseOperation>[0]['operation'], 136 + Parameters<typeof parsePathOperation>[0]['operation'], 137 137 'responses' 138 138 >; 139 139 } = { ··· 154 154 }; 155 155 156 156 if (finalPathItem.delete) { 157 - parseOperation({ 157 + parsePathOperation({ 158 158 ...operationArgs, 159 159 method: 'delete', 160 160 operation: { ··· 172 172 } 173 173 174 174 if (finalPathItem.get) { 175 - parseOperation({ 175 + parsePathOperation({ 176 176 ...operationArgs, 177 177 method: 'get', 178 178 operation: { ··· 190 190 } 191 191 192 192 if (finalPathItem.head) { 193 - parseOperation({ 193 + parsePathOperation({ 194 194 ...operationArgs, 195 195 method: 'head', 196 196 operation: { ··· 208 208 } 209 209 210 210 if (finalPathItem.options) { 211 - parseOperation({ 211 + parsePathOperation({ 212 212 ...operationArgs, 213 213 method: 'options', 214 214 operation: { ··· 226 226 } 227 227 228 228 if (finalPathItem.patch) { 229 - parseOperation({ 229 + parsePathOperation({ 230 230 ...operationArgs, 231 231 method: 'patch', 232 232 operation: { ··· 244 244 } 245 245 246 246 if (finalPathItem.post) { 247 - parseOperation({ 247 + parsePathOperation({ 248 248 ...operationArgs, 249 249 method: 'post', 250 250 operation: { ··· 262 262 } 263 263 264 264 if (finalPathItem.put) { 265 - parseOperation({ 265 + parsePathOperation({ 266 266 ...operationArgs, 267 267 method: 'put', 268 268 operation: { ··· 280 280 } 281 281 282 282 if (finalPathItem.trace) { 283 - parseOperation({ 283 + parsePathOperation({ 284 284 ...operationArgs, 285 285 method: 'trace', 286 286 operation: {
+1 -1
packages/openapi-ts/src/openApi/3.0.x/parser/operation.ts
··· 228 228 return irOperation; 229 229 }; 230 230 231 - export const parseOperation = ({ 231 + export const parsePathOperation = ({ 232 232 context, 233 233 method, 234 234 operation,
+3 -3
packages/openapi-ts/src/openApi/3.1.x/parser/__tests__/operation.test.ts
··· 2 2 3 3 import type { IR } from '../../../../ir/types'; 4 4 import type { SecuritySchemeObject } from '../../types/spec'; 5 - import { parseOperation } from '../operation'; 5 + import { parsePathOperation } from '../operation'; 6 6 7 - type ParseOperationProps = Parameters<typeof parseOperation>[0]; 7 + type ParseOperationProps = Parameters<typeof parsePathOperation>[0]; 8 8 9 9 describe('operation', () => { 10 10 const context = { ··· 65 65 ids: new Map<string, string>(), 66 66 }; 67 67 68 - parseOperation({ 68 + parsePathOperation({ 69 69 context, 70 70 method, 71 71 operation,
+31 -26
packages/openapi-ts/src/openApi/3.1.x/parser/index.ts
··· 19 19 SecuritySchemeObject, 20 20 } from '../types/spec'; 21 21 import { filterSpec } from './filter'; 22 - import { parseOperation } from './operation'; 22 + import { parsePathOperation } from './operation'; 23 23 import { parametersArrayToObject, parseParameter } from './parameter'; 24 24 import { parseRequestBody } from './requestBody'; 25 25 import { parseSchema } from './schema'; 26 26 import { parseServers } from './server'; 27 27 import { validateOpenApiSpec } from './validate'; 28 + import { parseWebhooks } from './webhook'; 28 29 29 30 export const parseV3_1_X = (context: IR.Context<OpenApiV3_1_X>) => { 30 31 if (context.config.parser.validate_EXPERIMENTAL) { ··· 128 129 } 129 130 : pathItem; 130 131 131 - const operationArgs: Omit<Parameters<typeof parseOperation>[0], 'method'> = 132 - { 133 - context, 134 - operation: { 135 - description: finalPathItem.description, 136 - parameters: parametersArrayToObject({ 137 - context, 138 - parameters: finalPathItem.parameters, 139 - }), 140 - security: context.spec.security, 141 - servers: finalPathItem.servers, 142 - summary: finalPathItem.summary, 143 - }, 144 - path: path as keyof PathsObject, 145 - securitySchemesMap, 146 - state, 147 - }; 132 + const operationArgs: Omit< 133 + Parameters<typeof parsePathOperation>[0], 134 + 'method' 135 + > = { 136 + context, 137 + operation: { 138 + description: finalPathItem.description, 139 + parameters: parametersArrayToObject({ 140 + context, 141 + parameters: finalPathItem.parameters, 142 + }), 143 + security: context.spec.security, 144 + servers: finalPathItem.servers, 145 + summary: finalPathItem.summary, 146 + }, 147 + path: path as keyof PathsObject, 148 + securitySchemesMap, 149 + state, 150 + }; 148 151 149 152 if (finalPathItem.delete) { 150 - parseOperation({ 153 + parsePathOperation({ 151 154 ...operationArgs, 152 155 method: 'delete', 153 156 operation: { ··· 165 168 } 166 169 167 170 if (finalPathItem.get) { 168 - parseOperation({ 171 + parsePathOperation({ 169 172 ...operationArgs, 170 173 method: 'get', 171 174 operation: { ··· 183 186 } 184 187 185 188 if (finalPathItem.head) { 186 - parseOperation({ 189 + parsePathOperation({ 187 190 ...operationArgs, 188 191 method: 'head', 189 192 operation: { ··· 201 204 } 202 205 203 206 if (finalPathItem.options) { 204 - parseOperation({ 207 + parsePathOperation({ 205 208 ...operationArgs, 206 209 method: 'options', 207 210 operation: { ··· 219 222 } 220 223 221 224 if (finalPathItem.patch) { 222 - parseOperation({ 225 + parsePathOperation({ 223 226 ...operationArgs, 224 227 method: 'patch', 225 228 operation: { ··· 237 240 } 238 241 239 242 if (finalPathItem.post) { 240 - parseOperation({ 243 + parsePathOperation({ 241 244 ...operationArgs, 242 245 method: 'post', 243 246 operation: { ··· 255 258 } 256 259 257 260 if (finalPathItem.put) { 258 - parseOperation({ 261 + parsePathOperation({ 259 262 ...operationArgs, 260 263 method: 'put', 261 264 operation: { ··· 273 276 } 274 277 275 278 if (finalPathItem.trace) { 276 - parseOperation({ 279 + parsePathOperation({ 277 280 ...operationArgs, 278 281 method: 'trace', 279 282 operation: { ··· 290 293 }); 291 294 } 292 295 } 296 + 297 + parseWebhooks({ context, securitySchemesMap }); 293 298 };
+66 -13
packages/openapi-ts/src/openApi/3.1.x/parser/operation.ts
··· 1 1 import type { IR } from '../../../ir/types'; 2 2 import type { State } from '../../shared/types/state'; 3 + import type { httpMethods } from '../../shared/utils/operation'; 3 4 import { operationToId } from '../../shared/utils/operation'; 4 5 import type { 5 6 OperationObject, 6 - PathItemObject, 7 7 RequestBodyObject, 8 8 ResponseObject, 9 9 SecuritySchemeObject, ··· 213 213 return irOperation; 214 214 }; 215 215 216 - export const parseOperation = ({ 216 + const parseOperationObject = ({ 217 217 context, 218 218 method, 219 219 operation, ··· 222 222 state, 223 223 }: { 224 224 context: IR.Context; 225 - method: Extract< 226 - keyof PathItemObject, 227 - 'delete' | 'get' | 'head' | 'options' | 'patch' | 'post' | 'put' | 'trace' 228 - >; 225 + method: (typeof httpMethods)[number]; 226 + operation: Operation; 227 + path: keyof IR.PathsObject; 228 + securitySchemesMap: Map<string, SecuritySchemeObject>; 229 + state: State; 230 + }) => { 231 + if (operation.servers) { 232 + context.ir.servers = [...(context.ir.servers ?? []), ...operation.servers]; 233 + } 234 + 235 + const parsed = operationToIrOperation({ 236 + context, 237 + method, 238 + operation, 239 + path, 240 + securitySchemesMap, 241 + state, 242 + }); 243 + 244 + return { parsed }; 245 + }; 246 + 247 + export const parsePathOperation = ({ 248 + context, 249 + method, 250 + path, 251 + ...options 252 + }: { 253 + context: IR.Context; 254 + method: (typeof httpMethods)[number]; 229 255 operation: Operation; 230 256 path: keyof IR.PathsObject; 231 257 securitySchemesMap: Map<string, SecuritySchemeObject>; ··· 239 265 context.ir.paths[path] = {}; 240 266 } 241 267 242 - if (operation.servers) { 243 - context.ir.servers = [...(context.ir.servers ?? []), ...operation.servers]; 268 + const { parsed } = parseOperationObject({ 269 + context, 270 + method, 271 + path, 272 + ...options, 273 + }); 274 + 275 + context.ir.paths[path][method] = parsed; 276 + }; 277 + 278 + export const parseWebhookOperation = ({ 279 + context, 280 + key, 281 + method, 282 + ...options 283 + }: { 284 + context: IR.Context; 285 + key: string; 286 + method: (typeof httpMethods)[number]; 287 + operation: Operation; 288 + securitySchemesMap: Map<string, SecuritySchemeObject>; 289 + state: State; 290 + }) => { 291 + if (!context.ir.webhooks) { 292 + context.ir.webhooks = {}; 244 293 } 245 294 246 - context.ir.paths[path][method] = operationToIrOperation({ 295 + if (!context.ir.webhooks[key]) { 296 + context.ir.webhooks[key] = {}; 297 + } 298 + 299 + const { parsed } = parseOperationObject({ 247 300 context, 248 301 method, 249 - operation, 250 - path, 251 - securitySchemesMap, 252 - state, 302 + path: key as `/${string}`, 303 + ...options, 253 304 }); 305 + 306 + context.ir.webhooks[key][method] = parsed; 254 307 };
+192
packages/openapi-ts/src/openApi/3.1.x/parser/webhook.ts
··· 1 + import type { IR } from '../../../ir/types'; 2 + import { mergeParametersObjects } from '../../shared/utils/parameter'; 3 + import type { OpenApiV3_1_X, PathItemObject } from '../types/spec'; 4 + import { parseWebhookOperation } from './operation'; 5 + import { parametersArrayToObject } from './parameter'; 6 + 7 + export const parseWebhooks = ({ 8 + context, 9 + securitySchemesMap, 10 + }: Pick<Parameters<typeof parseWebhookOperation>[0], 'securitySchemesMap'> & { 11 + context: IR.Context<OpenApiV3_1_X>; 12 + }) => { 13 + const state: Parameters<typeof parseWebhookOperation>[0]['state'] = { 14 + ids: new Map(), 15 + }; 16 + 17 + for (const key in context.spec.webhooks) { 18 + const webhook = context.spec.webhooks[key]!; 19 + 20 + const finalWebhook = 21 + '$ref' in webhook 22 + ? { 23 + ...context.resolveRef<PathItemObject>(webhook.$ref!), 24 + ...webhook, 25 + } 26 + : webhook; 27 + 28 + const operationArgs: Omit< 29 + Parameters<typeof parseWebhookOperation>[0], 30 + 'method' 31 + > = { 32 + context, 33 + key, 34 + operation: { 35 + description: finalWebhook.description, 36 + parameters: parametersArrayToObject({ 37 + context, 38 + parameters: finalWebhook.parameters, 39 + }), 40 + security: context.spec.security, 41 + servers: finalWebhook.servers, 42 + summary: finalWebhook.summary, 43 + }, 44 + securitySchemesMap, 45 + state, 46 + }; 47 + 48 + if (finalWebhook.delete) { 49 + parseWebhookOperation({ 50 + ...operationArgs, 51 + method: 'delete', 52 + operation: { 53 + ...operationArgs.operation, 54 + ...finalWebhook.delete, 55 + parameters: mergeParametersObjects({ 56 + source: parametersArrayToObject({ 57 + context, 58 + parameters: finalWebhook.delete.parameters, 59 + }), 60 + target: operationArgs.operation.parameters, 61 + }), 62 + }, 63 + }); 64 + } 65 + 66 + if (finalWebhook.get) { 67 + parseWebhookOperation({ 68 + ...operationArgs, 69 + method: 'get', 70 + operation: { 71 + ...operationArgs.operation, 72 + ...finalWebhook.get, 73 + parameters: mergeParametersObjects({ 74 + source: parametersArrayToObject({ 75 + context, 76 + parameters: finalWebhook.get.parameters, 77 + }), 78 + target: operationArgs.operation.parameters, 79 + }), 80 + }, 81 + }); 82 + } 83 + 84 + if (finalWebhook.head) { 85 + parseWebhookOperation({ 86 + ...operationArgs, 87 + method: 'head', 88 + operation: { 89 + ...operationArgs.operation, 90 + ...finalWebhook.head, 91 + parameters: mergeParametersObjects({ 92 + source: parametersArrayToObject({ 93 + context, 94 + parameters: finalWebhook.head.parameters, 95 + }), 96 + target: operationArgs.operation.parameters, 97 + }), 98 + }, 99 + }); 100 + } 101 + 102 + if (finalWebhook.options) { 103 + parseWebhookOperation({ 104 + ...operationArgs, 105 + method: 'options', 106 + operation: { 107 + ...operationArgs.operation, 108 + ...finalWebhook.options, 109 + parameters: mergeParametersObjects({ 110 + source: parametersArrayToObject({ 111 + context, 112 + parameters: finalWebhook.options.parameters, 113 + }), 114 + target: operationArgs.operation.parameters, 115 + }), 116 + }, 117 + }); 118 + } 119 + 120 + if (finalWebhook.patch) { 121 + parseWebhookOperation({ 122 + ...operationArgs, 123 + method: 'patch', 124 + operation: { 125 + ...operationArgs.operation, 126 + ...finalWebhook.patch, 127 + parameters: mergeParametersObjects({ 128 + source: parametersArrayToObject({ 129 + context, 130 + parameters: finalWebhook.patch.parameters, 131 + }), 132 + target: operationArgs.operation.parameters, 133 + }), 134 + }, 135 + }); 136 + } 137 + 138 + if (finalWebhook.post) { 139 + parseWebhookOperation({ 140 + ...operationArgs, 141 + method: 'post', 142 + operation: { 143 + ...operationArgs.operation, 144 + ...finalWebhook.post, 145 + parameters: mergeParametersObjects({ 146 + source: parametersArrayToObject({ 147 + context, 148 + parameters: finalWebhook.post.parameters, 149 + }), 150 + target: operationArgs.operation.parameters, 151 + }), 152 + }, 153 + }); 154 + } 155 + 156 + if (finalWebhook.put) { 157 + parseWebhookOperation({ 158 + ...operationArgs, 159 + method: 'put', 160 + operation: { 161 + ...operationArgs.operation, 162 + ...finalWebhook.put, 163 + parameters: mergeParametersObjects({ 164 + source: parametersArrayToObject({ 165 + context, 166 + parameters: finalWebhook.put.parameters, 167 + }), 168 + target: operationArgs.operation.parameters, 169 + }), 170 + }, 171 + }); 172 + } 173 + 174 + if (finalWebhook.trace) { 175 + parseWebhookOperation({ 176 + ...operationArgs, 177 + method: 'trace', 178 + operation: { 179 + ...operationArgs.operation, 180 + ...finalWebhook.trace, 181 + parameters: mergeParametersObjects({ 182 + source: parametersArrayToObject({ 183 + context, 184 + parameters: finalWebhook.trace.parameters, 185 + }), 186 + target: operationArgs.operation.parameters, 187 + }), 188 + }, 189 + }); 190 + } 191 + } 192 + };
+2 -2
packages/openapi-ts/src/openApi/shared/utils/graph.ts
··· 514 514 eventBuildGraph.timeEnd(); 515 515 516 516 // functions creating data for debug scripts located in `debug-helpers/` 517 - // const { maxChildren, maxDepth, totalNodes } = analyzeGraphStructure(graph); 518 - // const nodesForViz = exportGraphForVisualization(graph); 517 + // const { maxChildren, maxDepth, totalNodes } = debugTools.graph.analyzeStructure(graph); 518 + // const nodesForViz = debugTools.graph.exportForVisualization(graph); 519 519 // fs.writeFileSync('debug-helpers/graph.json', JSON.stringify(nodesForViz, null, 2)); 520 520 521 521 return { graph };
+8 -3
packages/openapi-ts/src/openApi/shared/utils/graphDebug.ts packages/openapi-ts/src/debug/graph.ts
··· 1 - import type { Graph } from './graph'; 1 + import type { Graph } from '../openApi/shared/utils/graph'; 2 2 3 - export const analyzeGraphStructure = (graph: Graph) => { 3 + const analyzeStructure = (graph: Graph) => { 4 4 let maxDepth = 0; 5 5 let maxChildren = 0; 6 6 ··· 26 26 return { maxChildren, maxDepth, totalNodes }; 27 27 }; 28 28 29 - export const exportGraphForVisualization = (graph: Graph) => { 29 + const exportForVisualization = (graph: Graph) => { 30 30 const childrenMap = new Map<string, string[]>(); 31 31 32 32 for (const [pointer, nodeInfo] of graph.nodes) { ··· 45 45 46 46 return nodes; 47 47 }; 48 + 49 + export const graph = { 50 + analyzeStructure, 51 + exportForVisualization, 52 + } as const;
+11 -2
packages/openapi-ts/src/plugins/@hey-api/typescript/api.ts
··· 5 5 6 6 type GetIdArgs = 7 7 | { 8 - type: 'ClientOptions'; 8 + type: 'ClientOptions' | 'Webhooks'; 9 9 } 10 10 | { 11 11 operation: IR.OperationObject; 12 - type: 'data' | 'error' | 'errors' | 'response' | 'responses'; 12 + type: 13 + | 'data' 14 + | 'error' 15 + | 'errors' 16 + | 'response' 17 + | 'responses' 18 + | 'webhook-payload' 19 + | 'webhook-request'; 13 20 } 14 21 | { 15 22 type: 'ref'; ··· 23 30 case 'errors': 24 31 case 'response': 25 32 case 'responses': 33 + case 'webhook-payload': 34 + case 'webhook-request': 26 35 return `${args.operation.id}-${args.type}`; 27 36 case 'ref': 28 37 return args.value;
+13
packages/openapi-ts/src/plugins/@hey-api/typescript/config.ts
··· 80 80 }, 81 81 value: plugin.config.responses, 82 82 }); 83 + 84 + plugin.config.webhooks = context.valueToObject({ 85 + defaultValue: { 86 + case: plugin.config.case ?? 'PascalCase', 87 + name: '{{name}}WebhookRequest', 88 + payload: '{{name}}WebhookPayload', 89 + }, 90 + mappers: { 91 + function: (name) => ({ name }), 92 + string: (name) => ({ name }), 93 + }, 94 + value: plugin.config.webhooks, 95 + }); 83 96 }, 84 97 }; 85 98
+26
packages/openapi-ts/src/plugins/@hey-api/typescript/plugin.ts
··· 15 15 import { operationToType } from './operation'; 16 16 import { typesId } from './ref'; 17 17 import type { HeyApiTypeScriptPlugin, PluginState } from './types'; 18 + import { webhookToType } from './webhook'; 19 + import { createWebhooks } from './webhooks'; 18 20 19 21 export type OnRef = (id: string) => void; 20 22 ··· 677 679 name: clientOptionsName, 678 680 }, 679 681 ); 682 + // reserve identifier for Webhooks 683 + const webhooksName = buildName({ 684 + config: { 685 + case: plugin.config.case, 686 + }, 687 + name: 'Webhooks', 688 + }); 689 + const webhooksNodeInfo = file.updateNode( 690 + plugin.api.getId({ type: 'Webhooks' }), 691 + { 692 + exported: true, 693 + name: webhooksName, 694 + }, 695 + ); 680 696 681 697 const servers: Array<IR.ServerObject> = []; 698 + const webhookNames: Array<string> = []; 682 699 683 700 plugin.forEach( 684 701 'operation', ··· 686 703 'requestBody', 687 704 'schema', 688 705 'server', 706 + 'webhook', 689 707 (event) => { 690 708 if (event.type === 'operation') { 691 709 operationToType({ operation: event.operation, plugin, state }); ··· 712 730 }); 713 731 } else if (event.type === 'server') { 714 732 servers.push(event.server); 733 + } else if (event.type === 'webhook') { 734 + const webhookName = webhookToType({ 735 + operation: event.operation, 736 + plugin, 737 + state, 738 + }); 739 + webhookNames.push(webhookName); 715 740 } 716 741 }, 717 742 ); ··· 765 790 } 766 791 767 792 createClientOptions({ nodeInfo: clientOptionsNodeInfo, plugin, servers }); 793 + createWebhooks({ nodeInfo: webhooksNodeInfo, plugin, webhookNames }); 768 794 };
+62
packages/openapi-ts/src/plugins/@hey-api/typescript/types.d.ts
··· 198 198 */ 199 199 response?: StringName; 200 200 }; 201 + /** 202 + * Configuration for webhook-specific types. 203 + * 204 + * Controls generation of types for webhook payloads and webhook requests. 205 + * 206 + * Can be: 207 + * - `string` or `function`: Shorthand for `{ name: string | function }` 208 + * - `object`: Full configuration object 209 + * 210 + * @default '{{name}}WebhookRequest' 211 + */ 212 + webhooks?: 213 + | StringName 214 + | { 215 + /** 216 + * The casing convention to use for generated webhook type names. 217 + * 218 + * @default 'PascalCase' 219 + */ 220 + case?: StringCase; 221 + /** 222 + * Custom naming pattern for generated webhook type names. The name 223 + * variable is obtained from the webhook key. 224 + * 225 + * @default '{{name}}WebhookRequest' 226 + */ 227 + name?: StringName; 228 + /** 229 + * Custom naming pattern for generated webhook type names. The name 230 + * variable is obtained from the webhook key. 231 + * 232 + * @default '{{name}}WebhookPayload' 233 + */ 234 + payload?: StringName; 235 + }; 201 236 202 237 // DEPRECATED OPTIONS BELOW 203 238 ··· 391 426 * @default '{{name}}Response' 392 427 */ 393 428 response: StringName; 429 + }; 430 + /** 431 + * Configuration for webhook-specific types. 432 + * 433 + * Controls generation of types for webhook payloads and webhook requests. 434 + */ 435 + webhooks: { 436 + /** 437 + * The casing convention to use for generated webhook type names. 438 + * 439 + * @default 'PascalCase' 440 + */ 441 + case: StringCase; 442 + /** 443 + * Custom naming pattern for generated webhook type names. The name 444 + * variable is obtained from the webhook key. 445 + * 446 + * @default '{{name}}WebhookRequest' 447 + */ 448 + name: StringName; 449 + /** 450 + * Custom naming pattern for generated webhook type names. The name 451 + * variable is obtained from the webhook key. 452 + * 453 + * @default '{{name}}WebhookPayload' 454 + */ 455 + payload: StringName; 394 456 }; 395 457 396 458 // DEPRECATED OPTIONS BELOW
+148
packages/openapi-ts/src/plugins/@hey-api/typescript/webhook.ts
··· 1 + import type { IR } from '../../../ir/types'; 2 + import { buildName } from '../../../openApi/shared/utils/name'; 3 + import { tsc } from '../../../tsc'; 4 + import { createSchemaComment } from '../../shared/utils/schema'; 5 + import { schemaToType } from './plugin'; 6 + import { typesId } from './ref'; 7 + import type { HeyApiTypeScriptPlugin, PluginState } from './types'; 8 + 9 + const operationToDataType = ({ 10 + operation, 11 + plugin, 12 + state, 13 + }: { 14 + operation: IR.OperationObject; 15 + plugin: HeyApiTypeScriptPlugin['Instance']; 16 + state: PluginState; 17 + }): string => { 18 + const file = plugin.context.file({ id: typesId })!; 19 + 20 + const data: IR.SchemaObject = { 21 + type: 'object', 22 + }; 23 + const dataRequired: Array<string> = []; 24 + 25 + if (!data.properties) { 26 + data.properties = {}; 27 + } 28 + 29 + if (operation.body) { 30 + const name = buildName({ 31 + config: { 32 + case: plugin.config.webhooks.case, 33 + name: plugin.config.webhooks.payload, 34 + }, 35 + name: operation.id, 36 + }); 37 + const id = plugin.api.getId({ operation, type: 'webhook-payload' }); 38 + const nodeInfo = file.updateNode(id, { 39 + exported: true, 40 + name, 41 + }); 42 + const type = schemaToType({ 43 + onRef: undefined, 44 + plugin, 45 + schema: operation.body.schema, 46 + state, 47 + }); 48 + const node = tsc.typeAliasDeclaration({ 49 + comment: createSchemaComment({ schema: operation.body.schema }), 50 + exportType: nodeInfo.exported, 51 + name: nodeInfo.node, 52 + type, 53 + }); 54 + file.add(node); 55 + 56 + data.properties.body = { $ref: id }; 57 + dataRequired.push('body'); 58 + } else { 59 + data.properties.body = { type: 'never' }; 60 + } 61 + 62 + data.properties.key = { 63 + const: operation.path, 64 + type: 'string', 65 + }; 66 + dataRequired.push('key'); 67 + 68 + data.properties.path = { type: 'never' }; 69 + data.properties.query = { type: 'never' }; 70 + 71 + data.required = dataRequired; 72 + 73 + const name = buildName({ 74 + config: plugin.config.webhooks, 75 + name: operation.id, 76 + }); 77 + const nodeInfo = file.updateNode( 78 + plugin.api.getId({ operation, type: 'webhook-request' }), 79 + { 80 + exported: true, 81 + name, 82 + }, 83 + ); 84 + const type = schemaToType({ 85 + onRef: undefined, 86 + plugin, 87 + schema: data, 88 + state, 89 + }); 90 + const node = tsc.typeAliasDeclaration({ 91 + exportType: nodeInfo.exported, 92 + name: nodeInfo.node, 93 + type, 94 + }); 95 + file.add(node); 96 + 97 + return name; 98 + }; 99 + 100 + export const webhookToType = ({ 101 + operation, 102 + plugin, 103 + state, 104 + }: { 105 + operation: IR.OperationObject; 106 + plugin: HeyApiTypeScriptPlugin['Instance']; 107 + state: PluginState; 108 + }): string => { 109 + const name = operationToDataType({ operation, plugin, state }); 110 + return name; 111 + 112 + // don't handle webhook responses for now, users only need requestBody 113 + 114 + // const file = plugin.context.file({ id: typesId })!; 115 + 116 + // const { responses } = operationResponsesMap(operation); 117 + 118 + // const response = responses?.properties?.['200']; 119 + 120 + // if (response) { 121 + // const name = buildName({ 122 + // config: { 123 + // ...plugin.config.responses, 124 + // name: '{{name}}WebhookEvent', 125 + // }, 126 + // name: operation.id, 127 + // }); 128 + // const nodeInfo = file.updateNode( 129 + // plugin.api.getId({ operation, type: 'webhook-response' }), 130 + // { 131 + // exported: true, 132 + // name, 133 + // }, 134 + // ); 135 + // const type = schemaToType({ 136 + // onRef: undefined, 137 + // plugin, 138 + // schema: response, 139 + // state, 140 + // }); 141 + // const node = tsc.typeAliasDeclaration({ 142 + // exportType: nodeInfo.exported, 143 + // name: nodeInfo.node, 144 + // type, 145 + // }); 146 + // file.add(node); 147 + // } 148 + };
+32
packages/openapi-ts/src/plugins/@hey-api/typescript/webhooks.ts
··· 1 + import type { NodeInfo } from '../../../generate/file/types'; 2 + import { tsc } from '../../../tsc'; 3 + import { typesId } from './ref'; 4 + import type { HeyApiTypeScriptPlugin } from './types'; 5 + 6 + export const createWebhooks = ({ 7 + nodeInfo, 8 + plugin, 9 + webhookNames, 10 + }: { 11 + nodeInfo: NodeInfo; 12 + plugin: HeyApiTypeScriptPlugin['Instance']; 13 + webhookNames: ReadonlyArray<string>; 14 + }) => { 15 + const file = plugin.context.file({ id: typesId })!; 16 + 17 + if (!webhookNames.length) return; 18 + 19 + const type = tsc.typeUnionNode({ 20 + types: webhookNames.map((name) => 21 + tsc.typeReferenceNode({ 22 + typeName: name, 23 + }), 24 + ), 25 + }); 26 + const node = tsc.typeAliasDeclaration({ 27 + exportType: nodeInfo.exported, 28 + name: nodeInfo.node, 29 + type, 30 + }); 31 + file.add(node); 32 + };
+6
packages/openapi-ts/src/plugins/shared/types/instance.d.ts
··· 28 28 | { 29 29 server: IR.ServerObject; 30 30 type: 'server'; 31 + } 32 + | { 33 + key: string; 34 + method: keyof IR.PathItemObject; 35 + operation: IR.OperationObject; 36 + type: 'webhook'; 31 37 }; 32 38 33 39 export type WalkEventType = WalkEvents['type'];
+21
packages/openapi-ts/src/plugins/shared/utils/instance.ts
··· 88 88 'requestBody', 89 89 'schema', 90 90 'server', 91 + 'webhook', 91 92 ] as ReadonlyArray<WalkEventType>), 92 93 ); 93 94 ··· 164 165 operation: pathItem[method]!, 165 166 path, 166 167 type: 'operation', 168 + }; 169 + try { 170 + callback(event as WalkEvent<T>); 171 + } catch (error) { 172 + this.forEachError(error, event); 173 + } 174 + } 175 + } 176 + } 177 + 178 + if (eventSet.has('webhook') && this.context.ir.webhooks) { 179 + for (const key in this.context.ir.webhooks) { 180 + const webhook = this.context.ir.webhooks[key]; 181 + for (const _method in webhook) { 182 + const method = _method as keyof typeof webhook; 183 + const event: WalkEvent<'webhook'> = { 184 + key, 185 + method, 186 + operation: webhook[method]!, 187 + type: 'webhook', 167 188 }; 168 189 try { 169 190 callback(event as WalkEvent<T>);
+14
packages/openapi-ts/src/plugins/valibot/config.ts
··· 56 56 }, 57 57 value: plugin.config.responses, 58 58 }); 59 + 60 + plugin.config.webhooks = context.valueToObject({ 61 + defaultValue: { 62 + case: plugin.config.case ?? 'camelCase', 63 + enabled: true, 64 + name: 'v{{name}}WebhookRequest', 65 + }, 66 + mappers: { 67 + boolean: (enabled) => ({ enabled }), 68 + function: (name) => ({ name }), 69 + string: (name) => ({ name }), 70 + }, 71 + value: plugin.config.webhooks, 72 + }); 59 73 }, 60 74 tags: ['validator'], 61 75 };
+50 -36
packages/openapi-ts/src/plugins/valibot/plugin.ts
··· 16 16 } from './number-helpers'; 17 17 import { operationToValibotSchema } from './operation'; 18 18 import type { ValibotPlugin } from './types'; 19 + import { webhookToValibotSchema } from './webhook'; 19 20 20 21 interface SchemaWithType<T extends Required<IR.SchemaObject>['type']> 21 22 extends Omit<IR.SchemaObject, 'type'> { ··· 1199 1200 name: '*', 1200 1201 }); 1201 1202 1202 - plugin.forEach('operation', 'parameter', 'requestBody', 'schema', (event) => { 1203 - const state: State = { 1204 - circularReferenceTracker: new Set(), 1205 - hasCircularReference: false, 1206 - nameCase: plugin.config.definitions.case, 1207 - nameTransformer: plugin.config.definitions.name, 1208 - }; 1203 + plugin.forEach( 1204 + 'operation', 1205 + 'parameter', 1206 + 'requestBody', 1207 + 'schema', 1208 + 'webhook', 1209 + (event) => { 1210 + const state: State = { 1211 + circularReferenceTracker: new Set(), 1212 + hasCircularReference: false, 1213 + nameCase: plugin.config.definitions.case, 1214 + nameTransformer: plugin.config.definitions.name, 1215 + }; 1209 1216 1210 - if (event.type === 'operation') { 1211 - operationToValibotSchema({ 1212 - operation: event.operation, 1213 - plugin, 1214 - state, 1215 - }); 1216 - } else if (event.type === 'parameter') { 1217 - schemaToValibotSchema({ 1218 - $ref: event.$ref, 1219 - plugin, 1220 - schema: event.parameter.schema, 1221 - state, 1222 - }); 1223 - } else if (event.type === 'requestBody') { 1224 - schemaToValibotSchema({ 1225 - $ref: event.$ref, 1226 - plugin, 1227 - schema: event.requestBody.schema, 1228 - state, 1229 - }); 1230 - } else if (event.type === 'schema') { 1231 - schemaToValibotSchema({ 1232 - $ref: event.$ref, 1233 - plugin, 1234 - schema: event.schema, 1235 - state, 1236 - }); 1237 - } 1238 - }); 1217 + if (event.type === 'operation') { 1218 + operationToValibotSchema({ 1219 + operation: event.operation, 1220 + plugin, 1221 + state, 1222 + }); 1223 + } else if (event.type === 'parameter') { 1224 + schemaToValibotSchema({ 1225 + $ref: event.$ref, 1226 + plugin, 1227 + schema: event.parameter.schema, 1228 + state, 1229 + }); 1230 + } else if (event.type === 'requestBody') { 1231 + schemaToValibotSchema({ 1232 + $ref: event.$ref, 1233 + plugin, 1234 + schema: event.requestBody.schema, 1235 + state, 1236 + }); 1237 + } else if (event.type === 'schema') { 1238 + schemaToValibotSchema({ 1239 + $ref: event.$ref, 1240 + plugin, 1241 + schema: event.schema, 1242 + state, 1243 + }); 1244 + } else if (event.type === 'webhook') { 1245 + webhookToValibotSchema({ 1246 + operation: event.operation, 1247 + plugin, 1248 + state, 1249 + }); 1250 + } 1251 + }, 1252 + ); 1239 1253 };
+62
packages/openapi-ts/src/plugins/valibot/types.d.ts
··· 141 141 */ 142 142 name?: StringName; 143 143 }; 144 + /** 145 + * Configuration for webhook-specific Valibot schemas. 146 + * 147 + * Controls generation of Valibot schemas for webhook payloads. 148 + * 149 + * Can be: 150 + * - `boolean`: Shorthand for `{ enabled: boolean }` 151 + * - `string` or `function`: Shorthand for `{ name: string | function }` 152 + * - `object`: Full configuration object 153 + * 154 + * @default true 155 + */ 156 + webhooks?: 157 + | boolean 158 + | StringName 159 + | { 160 + /** 161 + * The casing convention to use for generated names. 162 + * 163 + * @default 'camelCase' 164 + */ 165 + case?: StringCase; 166 + /** 167 + * Whether to generate Valibot schemas for webhook definitions. 168 + * 169 + * @default true 170 + */ 171 + enabled?: boolean; 172 + /** 173 + * Custom naming pattern for generated schema names. The name variable 174 + * is obtained from the webhook key. 175 + * 176 + * @default 'v{{name}}WebhookRequest' 177 + */ 178 + name?: StringName; 179 + }; 144 180 }; 145 181 146 182 export type Config = Plugin.Name<'valibot'> & { ··· 255 291 * obtained from the operation name. 256 292 * 257 293 * @default 'v{{name}}Response' 294 + */ 295 + name: StringName; 296 + }; 297 + /** 298 + * Configuration for webhook-specific Valibot schemas. 299 + * 300 + * Controls generation of Valibot schemas for webhook payloads. 301 + */ 302 + webhooks: { 303 + /** 304 + * The casing convention to use for generated names. 305 + * 306 + * @default 'camelCase' 307 + */ 308 + case: StringCase; 309 + /** 310 + * Whether to generate Valibot schemas for webhook definitions. 311 + * 312 + * @default true 313 + */ 314 + enabled: boolean; 315 + /** 316 + * Custom naming pattern for generated schema names. The name variable 317 + * is obtained from the webhook key. 318 + * 319 + * @default 'v{{name}}WebhookRequest' 258 320 */ 259 321 name: StringName; 260 322 };
+132
packages/openapi-ts/src/plugins/valibot/webhook.ts
··· 1 + import type { IR } from '../../ir/types'; 2 + import { valibotId } from './constants'; 3 + import { schemaToValibotSchema, type State } from './plugin'; 4 + import type { ValibotPlugin } from './types'; 5 + 6 + export const webhookToValibotSchema = ({ 7 + operation, 8 + plugin, 9 + state, 10 + }: { 11 + operation: IR.OperationObject; 12 + plugin: ValibotPlugin['Instance']; 13 + state: State; 14 + }) => { 15 + const file = plugin.context.file({ id: valibotId })!; 16 + 17 + if (plugin.config.webhooks.enabled) { 18 + const requiredProperties = new Set<string>(); 19 + 20 + const schemaData: IR.SchemaObject = { 21 + properties: { 22 + body: { 23 + type: 'never', 24 + }, 25 + path: { 26 + type: 'never', 27 + }, 28 + query: { 29 + type: 'never', 30 + }, 31 + }, 32 + type: 'object', 33 + }; 34 + 35 + if (operation.parameters) { 36 + // TODO: add support for cookies 37 + 38 + if (operation.parameters.header) { 39 + const properties: Record<string, IR.SchemaObject> = {}; 40 + const required: Array<string> = []; 41 + 42 + for (const key in operation.parameters.header) { 43 + const parameter = operation.parameters.header[key]!; 44 + properties[parameter.name] = parameter.schema; 45 + if (parameter.required) { 46 + required.push(parameter.name); 47 + requiredProperties.add('headers'); 48 + } 49 + } 50 + 51 + if (Object.keys(properties).length) { 52 + schemaData.properties!.headers = { 53 + properties, 54 + required, 55 + type: 'object', 56 + }; 57 + } 58 + } 59 + 60 + if (operation.parameters.path) { 61 + const properties: Record<string, IR.SchemaObject> = {}; 62 + const required: Array<string> = []; 63 + 64 + for (const key in operation.parameters.path) { 65 + const parameter = operation.parameters.path[key]!; 66 + properties[parameter.name] = parameter.schema; 67 + if (parameter.required) { 68 + required.push(parameter.name); 69 + requiredProperties.add('path'); 70 + } 71 + } 72 + 73 + if (Object.keys(properties).length) { 74 + schemaData.properties!.path = { 75 + properties, 76 + required, 77 + type: 'object', 78 + }; 79 + } 80 + } 81 + 82 + if (operation.parameters.query) { 83 + const properties: Record<string, IR.SchemaObject> = {}; 84 + const required: Array<string> = []; 85 + 86 + for (const key in operation.parameters.query) { 87 + const parameter = operation.parameters.query[key]!; 88 + properties[parameter.name] = parameter.schema; 89 + if (parameter.required) { 90 + required.push(parameter.name); 91 + requiredProperties.add('query'); 92 + } 93 + } 94 + 95 + if (Object.keys(properties).length) { 96 + schemaData.properties!.query = { 97 + properties, 98 + required, 99 + type: 'object', 100 + }; 101 + } 102 + } 103 + } 104 + 105 + if (operation.body) { 106 + schemaData.properties!.body = operation.body.schema; 107 + 108 + if (operation.body.required) { 109 + requiredProperties.add('body'); 110 + } 111 + } 112 + 113 + schemaData.required = [...requiredProperties]; 114 + 115 + const identifierData = file.identifier({ 116 + // TODO: refactor for better cross-plugin compatibility 117 + $ref: `#/valibot-webhook/${operation.id}`, 118 + case: plugin.config.webhooks.case, 119 + create: true, 120 + nameTransformer: plugin.config.webhooks.name, 121 + namespace: 'value', 122 + }); 123 + schemaToValibotSchema({ 124 + // TODO: refactor for better cross-plugin compatibility 125 + $ref: `#/valibot-webhook/${operation.id}`, 126 + identifier: identifierData, 127 + plugin, 128 + schema: schemaData, 129 + state, 130 + }); 131 + } 132 + };
+9 -1
packages/openapi-ts/src/plugins/zod/api.ts
··· 103 103 type GetIdArgs = 104 104 | { 105 105 operation: IR.OperationObject; 106 - type: 'data' | 'responses' | 'type-infer-data' | 'type-infer-responses'; 106 + type: 107 + | 'data' 108 + | 'responses' 109 + | 'type-infer-data' 110 + | 'type-infer-responses' 111 + | 'type-infer-webhook-request' 112 + | 'webhook-request'; 107 113 } 108 114 | { 109 115 type: 'ref' | 'type-infer-ref'; ··· 116 122 case 'responses': 117 123 case 'type-infer-data': 118 124 case 'type-infer-responses': 125 + case 'type-infer-webhook-request': 126 + case 'webhook-request': 119 127 return `${args.operation.id}-${args.type}`; 120 128 case 'ref': 121 129 case 'type-infer-ref':
+53
packages/openapi-ts/src/plugins/zod/config.ts
··· 265 265 }, 266 266 value: plugin.config.responses, 267 267 }); 268 + 269 + plugin.config.webhooks = context.valueToObject({ 270 + defaultValue: { 271 + case: plugin.config.case ?? 'camelCase', 272 + enabled: true, 273 + name: 'z{{name}}WebhookRequest', 274 + types: { 275 + ...plugin.config.types, 276 + infer: { 277 + ...(plugin.config.types.infer as Extract< 278 + typeof plugin.config.types.infer, 279 + Record<string, unknown> 280 + >), 281 + name: '{{name}}WebhookRequestZodType', 282 + }, 283 + }, 284 + }, 285 + mappers: { 286 + ...mappers, 287 + object: (fields, defaultValue) => ({ 288 + ...fields, 289 + types: context.valueToObject({ 290 + defaultValue: defaultValue.types!, 291 + mappers: { 292 + object: (fields, defaultValue) => ({ 293 + ...fields, 294 + infer: context.valueToObject({ 295 + defaultValue: { 296 + ...(defaultValue.infer as Extract< 297 + typeof defaultValue.infer, 298 + Record<string, unknown> 299 + >), 300 + enabled: 301 + fields.infer !== undefined 302 + ? Boolean(fields.infer) 303 + : ( 304 + defaultValue.infer as Extract< 305 + typeof defaultValue.infer, 306 + Record<string, unknown> 307 + > 308 + ).enabled, 309 + }, 310 + mappers, 311 + value: fields.infer, 312 + }), 313 + }), 314 + }, 315 + value: fields.types, 316 + }), 317 + }), 318 + }, 319 + value: plugin.config.webhooks, 320 + }); 268 321 }, 269 322 tags: ['validator'], 270 323 };
+55 -34
packages/openapi-ts/src/plugins/zod/mini/plugin.ts
··· 11 11 import { getZodModule } from '../shared/module'; 12 12 import { operationToZodSchema } from '../shared/operation'; 13 13 import type { SchemaWithType, State, ZodSchema } from '../shared/types'; 14 + import { webhookToZodSchema } from '../shared/webhook'; 14 15 import type { ZodPlugin } from '../types'; 15 16 16 17 const arrayTypeToZodSchema = ({ ··· 1148 1149 name: '*', 1149 1150 }); 1150 1151 1151 - plugin.forEach('operation', 'parameter', 'requestBody', 'schema', (event) => { 1152 - if (event.type === 'operation') { 1153 - operationToZodSchema({ 1154 - getZodSchema: (schema) => { 1155 - const state: State = { 1156 - circularReferenceTracker: [], 1157 - currentReferenceTracker: [], 1158 - hasCircularReference: false, 1159 - }; 1160 - return schemaToZodSchema({ plugin, schema, state }); 1161 - }, 1162 - operation: event.operation, 1163 - plugin, 1164 - }); 1165 - } else if (event.type === 'parameter') { 1166 - handleComponent({ 1167 - id: event.$ref, 1168 - plugin, 1169 - schema: event.parameter.schema, 1170 - }); 1171 - } else if (event.type === 'requestBody') { 1172 - handleComponent({ 1173 - id: event.$ref, 1174 - plugin, 1175 - schema: event.requestBody.schema, 1176 - }); 1177 - } else if (event.type === 'schema') { 1178 - handleComponent({ 1179 - id: event.$ref, 1180 - plugin, 1181 - schema: event.schema, 1182 - }); 1183 - } 1184 - }); 1152 + plugin.forEach( 1153 + 'operation', 1154 + 'parameter', 1155 + 'requestBody', 1156 + 'schema', 1157 + 'webhook', 1158 + (event) => { 1159 + if (event.type === 'operation') { 1160 + operationToZodSchema({ 1161 + getZodSchema: (schema) => { 1162 + const state: State = { 1163 + circularReferenceTracker: [], 1164 + currentReferenceTracker: [], 1165 + hasCircularReference: false, 1166 + }; 1167 + return schemaToZodSchema({ plugin, schema, state }); 1168 + }, 1169 + operation: event.operation, 1170 + plugin, 1171 + }); 1172 + } else if (event.type === 'parameter') { 1173 + handleComponent({ 1174 + id: event.$ref, 1175 + plugin, 1176 + schema: event.parameter.schema, 1177 + }); 1178 + } else if (event.type === 'requestBody') { 1179 + handleComponent({ 1180 + id: event.$ref, 1181 + plugin, 1182 + schema: event.requestBody.schema, 1183 + }); 1184 + } else if (event.type === 'schema') { 1185 + handleComponent({ 1186 + id: event.$ref, 1187 + plugin, 1188 + schema: event.schema, 1189 + }); 1190 + } else if (event.type === 'webhook') { 1191 + webhookToZodSchema({ 1192 + getZodSchema: (schema) => { 1193 + const state: State = { 1194 + circularReferenceTracker: [], 1195 + currentReferenceTracker: [], 1196 + hasCircularReference: false, 1197 + }; 1198 + return schemaToZodSchema({ plugin, schema, state }); 1199 + }, 1200 + operation: event.operation, 1201 + plugin, 1202 + }); 1203 + } 1204 + }, 1205 + ); 1185 1206 };
+146
packages/openapi-ts/src/plugins/zod/shared/webhook.ts
··· 1 + import type { IR } from '../../../ir/types'; 2 + import { buildName } from '../../../openApi/shared/utils/name'; 3 + import { zodId } from '../constants'; 4 + import { exportZodSchema } from '../export'; 5 + import type { ZodPlugin } from '../types'; 6 + import type { ZodSchema } from './types'; 7 + 8 + export const webhookToZodSchema = ({ 9 + getZodSchema, 10 + operation, 11 + plugin, 12 + }: { 13 + getZodSchema: (schema: IR.SchemaObject) => ZodSchema; 14 + operation: IR.OperationObject; 15 + plugin: ZodPlugin['Instance']; 16 + }) => { 17 + const file = plugin.context.file({ id: zodId })!; 18 + 19 + if (plugin.config.webhooks.enabled) { 20 + const requiredProperties = new Set<string>(); 21 + 22 + const schemaData: IR.SchemaObject = { 23 + properties: { 24 + body: { 25 + type: 'never', 26 + }, 27 + path: { 28 + type: 'never', 29 + }, 30 + query: { 31 + type: 'never', 32 + }, 33 + }, 34 + type: 'object', 35 + }; 36 + 37 + if (operation.parameters) { 38 + // TODO: add support for cookies 39 + 40 + if (operation.parameters.header) { 41 + const properties: Record<string, IR.SchemaObject> = {}; 42 + const required: Array<string> = []; 43 + 44 + for (const key in operation.parameters.header) { 45 + const parameter = operation.parameters.header[key]!; 46 + properties[parameter.name] = parameter.schema; 47 + if (parameter.required) { 48 + required.push(parameter.name); 49 + requiredProperties.add('headers'); 50 + } 51 + } 52 + 53 + if (Object.keys(properties).length) { 54 + schemaData.properties!.headers = { 55 + properties, 56 + required, 57 + type: 'object', 58 + }; 59 + } 60 + } 61 + 62 + if (operation.parameters.path) { 63 + const properties: Record<string, IR.SchemaObject> = {}; 64 + const required: Array<string> = []; 65 + 66 + for (const key in operation.parameters.path) { 67 + const parameter = operation.parameters.path[key]!; 68 + properties[parameter.name] = parameter.schema; 69 + if (parameter.required) { 70 + required.push(parameter.name); 71 + requiredProperties.add('path'); 72 + } 73 + } 74 + 75 + if (Object.keys(properties).length) { 76 + schemaData.properties!.path = { 77 + properties, 78 + required, 79 + type: 'object', 80 + }; 81 + } 82 + } 83 + 84 + if (operation.parameters.query) { 85 + const properties: Record<string, IR.SchemaObject> = {}; 86 + const required: Array<string> = []; 87 + 88 + for (const key in operation.parameters.query) { 89 + const parameter = operation.parameters.query[key]!; 90 + properties[parameter.name] = parameter.schema; 91 + if (parameter.required) { 92 + required.push(parameter.name); 93 + requiredProperties.add('query'); 94 + } 95 + } 96 + 97 + if (Object.keys(properties).length) { 98 + schemaData.properties!.query = { 99 + properties, 100 + required, 101 + type: 'object', 102 + }; 103 + } 104 + } 105 + } 106 + 107 + if (operation.body) { 108 + schemaData.properties!.body = operation.body.schema; 109 + 110 + if (operation.body.required) { 111 + requiredProperties.add('body'); 112 + } 113 + } 114 + 115 + schemaData.required = [...requiredProperties]; 116 + 117 + const zodSchema = getZodSchema(schemaData); 118 + const schemaId = plugin.api.getId({ operation, type: 'webhook-request' }); 119 + const typeInferId = plugin.config.webhooks.types.infer.enabled 120 + ? plugin.api.getId({ operation, type: 'type-infer-webhook-request' }) 121 + : undefined; 122 + exportZodSchema({ 123 + plugin, 124 + schema: schemaData, 125 + schemaId, 126 + typeInferId, 127 + zodSchema, 128 + }); 129 + file.updateNodeReferences( 130 + schemaId, 131 + buildName({ 132 + config: plugin.config.webhooks, 133 + name: operation.id, 134 + }), 135 + ); 136 + if (typeInferId) { 137 + file.updateNodeReferences( 138 + typeInferId, 139 + buildName({ 140 + config: plugin.config.webhooks.types.infer, 141 + name: operation.id, 142 + }), 143 + ); 144 + } 145 + } 146 + };
+134
packages/openapi-ts/src/plugins/zod/types.d.ts
··· 341 341 enabled?: boolean; 342 342 }; 343 343 }; 344 + /** 345 + * Configuration for webhook-specific Zod schemas. 346 + * 347 + * Controls generation of Zod schemas for webhook payloads. 348 + * 349 + * Can be: 350 + * - `boolean`: Shorthand for `{ enabled: boolean }` 351 + * - `string` or `function`: Shorthand for `{ name: string | function }` 352 + * - `object`: Full configuration object 353 + * 354 + * @default true 355 + */ 356 + webhooks?: 357 + | boolean 358 + | StringName 359 + | { 360 + /** 361 + * The casing convention to use for generated names. 362 + * 363 + * @default 'camelCase' 364 + */ 365 + case?: StringCase; 366 + /** 367 + * Whether to generate Zod schemas for webhook definitions. 368 + * 369 + * @default true 370 + */ 371 + enabled?: boolean; 372 + /** 373 + * Custom naming pattern for generated schema names. The name variable 374 + * is obtained from the webhook key. 375 + * 376 + * @default 'z{{name}}WebhookRequest' 377 + */ 378 + name?: StringName; 379 + /** 380 + * Configuration for TypeScript type generation from Zod schemas. 381 + * 382 + * Controls generation of TypeScript types based on the generated Zod schemas. 383 + */ 384 + types?: { 385 + /** 386 + * Configuration for `z.infer` types. 387 + * 388 + * Can be: 389 + * - `boolean`: Shorthand for `{ enabled: boolean }` 390 + * - `string` or `function`: Shorthand for `{ name: string | function }` 391 + * - `object`: Full configuration object 392 + * 393 + * @default false 394 + */ 395 + infer?: 396 + | boolean 397 + | StringName 398 + | { 399 + /** 400 + * The casing convention to use for generated type names. 401 + * 402 + * @default 'PascalCase' 403 + */ 404 + case?: StringCase; 405 + /** 406 + * Whether to generate TypeScript types from Zod schemas. 407 + * 408 + * @default true 409 + */ 410 + enabled?: boolean; 411 + /** 412 + * Custom naming pattern for generated type names. The name variable is 413 + * obtained from the Zod schema name. 414 + * 415 + * @default '{{name}}WebhookRequestZodType' 416 + */ 417 + name?: StringName; 418 + }; 419 + }; 420 + }; 344 421 }; 345 422 346 423 export type Config = Plugin.Name<'zod'> & { ··· 610 687 * @default true 611 688 */ 612 689 enabled: boolean; 690 + }; 691 + }; 692 + /** 693 + * Configuration for webhook-specific Zod schemas. 694 + * 695 + * Controls generation of Zod schemas for webhook payloads. 696 + */ 697 + webhooks: { 698 + /** 699 + * The casing convention to use for generated names. 700 + * 701 + * @default 'camelCase' 702 + */ 703 + case: StringCase; 704 + /** 705 + * Whether to generate Zod schemas for webhook definitions. 706 + * 707 + * @default true 708 + */ 709 + enabled: boolean; 710 + /** 711 + * Custom naming pattern for generated schema names. The name variable is 712 + * is obtained from the webhook key. 713 + * 714 + * @default 'z{{name}}WebhookRequest' 715 + */ 716 + name: StringName; 717 + /** 718 + * Configuration for TypeScript type generation from Zod schemas. 719 + * 720 + * Controls generation of TypeScript types based on the generated Zod schemas. 721 + */ 722 + types: { 723 + /** 724 + * Configuration for `z.infer` types. 725 + */ 726 + infer: { 727 + /** 728 + * The casing convention to use for generated type names. 729 + * 730 + * @default 'PascalCase' 731 + */ 732 + case: StringCase; 733 + /** 734 + * Whether to generate TypeScript types from Zod schemas. 735 + * 736 + * @default true 737 + */ 738 + enabled: boolean; 739 + /** 740 + * Custom naming pattern for generated type names. The name variable is 741 + * obtained from the Zod schema name. 742 + * 743 + * @default '{{name}}WebhookRequestZodType' 744 + */ 745 + name: StringName; 746 + }; 613 747 }; 614 748 }; 615 749 };
+55 -34
packages/openapi-ts/src/plugins/zod/v3/plugin.ts
··· 11 11 import { getZodModule } from '../shared/module'; 12 12 import { operationToZodSchema } from '../shared/operation'; 13 13 import type { SchemaWithType, State, ZodSchema } from '../shared/types'; 14 + import { webhookToZodSchema } from '../shared/webhook'; 14 15 import type { ZodPlugin } from '../types'; 15 16 16 17 const arrayTypeToZodSchema = ({ ··· 1026 1027 name: identifiers.z.text, 1027 1028 }); 1028 1029 1029 - plugin.forEach('operation', 'parameter', 'requestBody', 'schema', (event) => { 1030 - if (event.type === 'operation') { 1031 - operationToZodSchema({ 1032 - getZodSchema: (schema) => { 1033 - const state: State = { 1034 - circularReferenceTracker: [], 1035 - currentReferenceTracker: [], 1036 - hasCircularReference: false, 1037 - }; 1038 - return schemaToZodSchema({ plugin, schema, state }); 1039 - }, 1040 - operation: event.operation, 1041 - plugin, 1042 - }); 1043 - } else if (event.type === 'parameter') { 1044 - handleComponent({ 1045 - id: event.$ref, 1046 - plugin, 1047 - schema: event.parameter.schema, 1048 - }); 1049 - } else if (event.type === 'requestBody') { 1050 - handleComponent({ 1051 - id: event.$ref, 1052 - plugin, 1053 - schema: event.requestBody.schema, 1054 - }); 1055 - } else if (event.type === 'schema') { 1056 - handleComponent({ 1057 - id: event.$ref, 1058 - plugin, 1059 - schema: event.schema, 1060 - }); 1061 - } 1062 - }); 1030 + plugin.forEach( 1031 + 'operation', 1032 + 'parameter', 1033 + 'requestBody', 1034 + 'schema', 1035 + 'webhook', 1036 + (event) => { 1037 + if (event.type === 'operation') { 1038 + operationToZodSchema({ 1039 + getZodSchema: (schema) => { 1040 + const state: State = { 1041 + circularReferenceTracker: [], 1042 + currentReferenceTracker: [], 1043 + hasCircularReference: false, 1044 + }; 1045 + return schemaToZodSchema({ plugin, schema, state }); 1046 + }, 1047 + operation: event.operation, 1048 + plugin, 1049 + }); 1050 + } else if (event.type === 'parameter') { 1051 + handleComponent({ 1052 + id: event.$ref, 1053 + plugin, 1054 + schema: event.parameter.schema, 1055 + }); 1056 + } else if (event.type === 'requestBody') { 1057 + handleComponent({ 1058 + id: event.$ref, 1059 + plugin, 1060 + schema: event.requestBody.schema, 1061 + }); 1062 + } else if (event.type === 'schema') { 1063 + handleComponent({ 1064 + id: event.$ref, 1065 + plugin, 1066 + schema: event.schema, 1067 + }); 1068 + } else if (event.type === 'webhook') { 1069 + webhookToZodSchema({ 1070 + getZodSchema: (schema) => { 1071 + const state: State = { 1072 + circularReferenceTracker: [], 1073 + currentReferenceTracker: [], 1074 + hasCircularReference: false, 1075 + }; 1076 + return schemaToZodSchema({ plugin, schema, state }); 1077 + }, 1078 + operation: event.operation, 1079 + plugin, 1080 + }); 1081 + } 1082 + }, 1083 + ); 1063 1084 };
+55 -34
packages/openapi-ts/src/plugins/zod/v4/plugin.ts
··· 11 11 import { getZodModule } from '../shared/module'; 12 12 import { operationToZodSchema } from '../shared/operation'; 13 13 import type { SchemaWithType, State, ZodSchema } from '../shared/types'; 14 + import { webhookToZodSchema } from '../shared/webhook'; 14 15 import type { ZodPlugin } from '../types'; 15 16 16 17 const arrayTypeToZodSchema = ({ ··· 1105 1106 name: identifiers.z.text, 1106 1107 }); 1107 1108 1108 - plugin.forEach('operation', 'parameter', 'requestBody', 'schema', (event) => { 1109 - if (event.type === 'operation') { 1110 - operationToZodSchema({ 1111 - getZodSchema: (schema) => { 1112 - const state: State = { 1113 - circularReferenceTracker: [], 1114 - currentReferenceTracker: [], 1115 - hasCircularReference: false, 1116 - }; 1117 - return schemaToZodSchema({ plugin, schema, state }); 1118 - }, 1119 - operation: event.operation, 1120 - plugin, 1121 - }); 1122 - } else if (event.type === 'parameter') { 1123 - handleComponent({ 1124 - id: event.$ref, 1125 - plugin, 1126 - schema: event.parameter.schema, 1127 - }); 1128 - } else if (event.type === 'requestBody') { 1129 - handleComponent({ 1130 - id: event.$ref, 1131 - plugin, 1132 - schema: event.requestBody.schema, 1133 - }); 1134 - } else if (event.type === 'schema') { 1135 - handleComponent({ 1136 - id: event.$ref, 1137 - plugin, 1138 - schema: event.schema, 1139 - }); 1140 - } 1141 - }); 1109 + plugin.forEach( 1110 + 'operation', 1111 + 'parameter', 1112 + 'requestBody', 1113 + 'schema', 1114 + 'webhook', 1115 + (event) => { 1116 + if (event.type === 'operation') { 1117 + operationToZodSchema({ 1118 + getZodSchema: (schema) => { 1119 + const state: State = { 1120 + circularReferenceTracker: [], 1121 + currentReferenceTracker: [], 1122 + hasCircularReference: false, 1123 + }; 1124 + return schemaToZodSchema({ plugin, schema, state }); 1125 + }, 1126 + operation: event.operation, 1127 + plugin, 1128 + }); 1129 + } else if (event.type === 'parameter') { 1130 + handleComponent({ 1131 + id: event.$ref, 1132 + plugin, 1133 + schema: event.parameter.schema, 1134 + }); 1135 + } else if (event.type === 'requestBody') { 1136 + handleComponent({ 1137 + id: event.$ref, 1138 + plugin, 1139 + schema: event.requestBody.schema, 1140 + }); 1141 + } else if (event.type === 'schema') { 1142 + handleComponent({ 1143 + id: event.$ref, 1144 + plugin, 1145 + schema: event.schema, 1146 + }); 1147 + } else if (event.type === 'webhook') { 1148 + webhookToZodSchema({ 1149 + getZodSchema: (schema) => { 1150 + const state: State = { 1151 + circularReferenceTracker: [], 1152 + currentReferenceTracker: [], 1153 + hasCircularReference: false, 1154 + }; 1155 + return schemaToZodSchema({ plugin, schema, state }); 1156 + }, 1157 + operation: event.operation, 1158 + plugin, 1159 + }); 1160 + } 1161 + }, 1162 + ); 1142 1163 };