Zoom · Schema
Zoom Meeting API Core Models
JSON Schema definitions for core Zoom Meeting API data models including meetings, participants, registrants, recordings, polls, and webhook events.
ChatCollaborationCommunicationsMeetingsVideo ConferencingVideosWebinars
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/api-search/zoom/json-schema/zoom-meeting-schema.json",
"title": "Zoom Meeting API Core Models",
"description": "JSON Schema definitions for core Zoom Meeting API data models including meetings, participants, registrants, recordings, polls, and webhook events.",
"type": "object",
"$defs": {
"MeetingType": {
"title": "Meeting Type",
"description": "The type of Zoom meeting. 1 = Instant meeting, 2 = Scheduled meeting, 3 = Recurring meeting with no fixed time, 4 = Personal Meeting Room, 8 = Recurring meeting with a fixed time.",
"type": "integer",
"enum": [1, 2, 3, 4, 8]
},
"MeetingStatus": {
"title": "Meeting Status",
"description": "The current status of a meeting.",
"type": "string",
"enum": ["waiting", "started", "finished"]
},
"Meeting": {
"title": "Meeting",
"description": "A Zoom meeting object representing a scheduled, instant, or recurring meeting.",
"type": "object",
"required": ["id", "topic", "type"],
"properties": {
"uuid": {
"type": "string",
"description": "Unique meeting instance identifier. Each meeting instance generates its own UUID."
},
"id": {
"type": "integer",
"format": "int64",
"description": "The meeting ID, also known as the meeting number."
},
"host_id": {
"type": "string",
"description": "The user ID of the meeting host."
},
"host_email": {
"type": "string",
"format": "email",
"description": "Email address of the meeting host."
},
"assistant_id": {
"type": "string",
"description": "Unique identifier of the scheduler who scheduled this meeting on behalf of the host."
},
"topic": {
"type": "string",
"description": "Meeting topic. Maximum 200 characters.",
"maxLength": 200
},
"type": {
"$ref": "#/$defs/MeetingType"
},
"status": {
"$ref": "#/$defs/MeetingStatus"
},
"start_time": {
"type": "string",
"format": "date-time",
"description": "Meeting start time in UTC/GMT. Only used for scheduled and recurring meetings."
},
"duration": {
"type": "integer",
"description": "Meeting duration in minutes.",
"minimum": 0
},
"timezone": {
"type": "string",
"description": "Timezone for the meeting (e.g., America/Los_Angeles). See IANA Time Zone Database.",
"examples": ["America/Los_Angeles", "America/New_York", "Europe/London", "Asia/Tokyo"]
},
"agenda": {
"type": "string",
"description": "Meeting description or agenda. Maximum 2000 characters.",
"maxLength": 2000
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "The date and time when the meeting was created."
},
"start_url": {
"type": "string",
"format": "uri",
"description": "URL for the host to start the meeting. This URL should only be used by the host and expires after a single use."
},
"join_url": {
"type": "string",
"format": "uri",
"description": "URL for participants to join the meeting."
},
"password": {
"type": "string",
"description": "Meeting passcode. May only contain a-z, A-Z, 0-9, @, -, _, *. Maximum 10 characters.",
"maxLength": 10
},
"h323_password": {
"type": "string",
"description": "H.323/SIP room system passcode. Only numbers, maximum 16 characters.",
"maxLength": 16,
"pattern": "^[0-9]*$"
},
"pstn_password": {
"type": "string",
"description": "PSTN password for phone dial-in."
},
"encrypted_password": {
"type": "string",
"description": "Encrypted passcode for the meeting link."
},
"pmi": {
"type": "integer",
"format": "int64",
"description": "Personal Meeting ID, if applicable."
},
"tracking_fields": {
"type": "array",
"description": "Tracking fields configured for the meeting.",
"items": {
"$ref": "#/$defs/TrackingField"
}
},
"occurrences": {
"type": "array",
"description": "Array of occurrence objects for recurring meetings.",
"items": {
"$ref": "#/$defs/Occurrence"
}
},
"settings": {
"$ref": "#/$defs/MeetingSettings"
},
"recurrence": {
"$ref": "#/$defs/Recurrence"
},
"pre_schedule": {
"type": "boolean",
"description": "Whether this is a pre-scheduled meeting.",
"default": false
}
}
},
"MeetingSummary": {
"title": "Meeting Summary",
"description": "A compact meeting object returned in list responses.",
"type": "object",
"properties": {
"uuid": {
"type": "string",
"description": "Unique meeting instance ID."
},
"id": {
"type": "integer",
"format": "int64",
"description": "Meeting ID (meeting number)."
},
"host_id": {
"type": "string",
"description": "ID of the meeting host."
},
"topic": {
"type": "string",
"description": "Meeting topic."
},
"type": {
"$ref": "#/$defs/MeetingType"
},
"start_time": {
"type": "string",
"format": "date-time",
"description": "Meeting start time."
},
"duration": {
"type": "integer",
"description": "Meeting duration in minutes."
},
"timezone": {
"type": "string",
"description": "Timezone."
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Time the meeting was created."
},
"join_url": {
"type": "string",
"format": "uri",
"description": "URL for participants to join."
},
"agenda": {
"type": "string",
"description": "Meeting description."
}
}
},
"MeetingSettings": {
"title": "Meeting Settings",
"description": "Configuration settings for a Zoom meeting.",
"type": "object",
"properties": {
"host_video": {
"type": "boolean",
"description": "Start video when the host joins the meeting.",
"default": true
},
"participant_video": {
"type": "boolean",
"description": "Start video when participants join the meeting.",
"default": false
},
"cn_meeting": {
"type": "boolean",
"description": "Host meeting in China.",
"default": false
},
"in_meeting": {
"type": "boolean",
"description": "Host meeting in India.",
"default": false
},
"join_before_host": {
"type": "boolean",
"description": "Allow participants to join before the host.",
"default": false
},
"jbh_time": {
"type": "integer",
"description": "Minutes before the host joins that participants can join. 0 = any time, 5 = 5 minutes, 10 = 10 minutes.",
"enum": [0, 5, 10]
},
"mute_upon_entry": {
"type": "boolean",
"description": "Mute participants upon entry.",
"default": false
},
"watermark": {
"type": "boolean",
"description": "Add watermark when viewing a shared screen.",
"default": false
},
"use_pmi": {
"type": "boolean",
"description": "Use Personal Meeting ID.",
"default": false
},
"approval_type": {
"type": "integer",
"description": "Registration approval type. 0 = Automatically approve, 1 = Manually approve, 2 = No registration required.",
"enum": [0, 1, 2],
"default": 2
},
"registration_type": {
"type": "integer",
"description": "Registration type for recurring meetings. 1 = Register once and attend any, 2 = Register for each, 3 = Register once and choose occurrences.",
"enum": [1, 2, 3],
"default": 1
},
"audio": {
"type": "string",
"description": "How participants can join the meeting audio.",
"enum": ["both", "telephony", "voip", "thirdParty"],
"default": "both"
},
"auto_recording": {
"type": "string",
"description": "Automatic recording configuration.",
"enum": ["local", "cloud", "none"],
"default": "none"
},
"enforce_login": {
"type": "boolean",
"description": "Only authenticated users can join.",
"default": false
},
"enforce_login_domains": {
"type": "string",
"description": "Only users with specified email domains can join."
},
"alternative_hosts": {
"type": "string",
"description": "Alternative host email addresses, comma separated."
},
"alternative_hosts_email_notification": {
"type": "boolean",
"description": "Send email notification to alternative hosts.",
"default": true
},
"close_registration": {
"type": "boolean",
"description": "Close registration after event date.",
"default": false
},
"waiting_room": {
"type": "boolean",
"description": "Enable the waiting room.",
"default": false
},
"global_dial_in_countries": {
"type": "array",
"description": "List of countries for global dial-in numbers.",
"items": {
"type": "string"
}
},
"contact_name": {
"type": "string",
"description": "Contact name for meeting registration."
},
"contact_email": {
"type": "string",
"format": "email",
"description": "Contact email for meeting registration."
},
"meeting_authentication": {
"type": "boolean",
"description": "Require authentication to join.",
"default": false
},
"encryption_type": {
"type": "string",
"description": "Meeting encryption type.",
"enum": ["enhanced_encryption", "e2ee"],
"default": "enhanced_encryption"
},
"breakout_room": {
"$ref": "#/$defs/BreakoutRoomSettings"
},
"language_interpretation": {
"$ref": "#/$defs/LanguageInterpretationSettings"
},
"focus_mode": {
"type": "boolean",
"description": "Enable focus mode.",
"default": false
},
"private_meeting": {
"type": "boolean",
"description": "Make the meeting private.",
"default": false
},
"email_notification": {
"type": "boolean",
"description": "Send email notification when meeting starts.",
"default": true
},
"continuous_meeting_chat": {
"type": "object",
"description": "Continuous meeting chat settings.",
"properties": {
"enable": {
"type": "boolean"
},
"auto_add_invited_external_users": {
"type": "boolean"
}
}
}
}
},
"Recurrence": {
"title": "Recurrence",
"description": "Recurrence configuration for recurring meetings.",
"type": "object",
"required": ["type"],
"properties": {
"type": {
"type": "integer",
"description": "Recurrence type. 1 = Daily, 2 = Weekly, 3 = Monthly.",
"enum": [1, 2, 3]
},
"repeat_interval": {
"type": "integer",
"description": "Interval at which the meeting recurs. For daily max 90, weekly max 12, monthly max 3.",
"minimum": 1
},
"weekly_days": {
"type": "string",
"description": "Days of the week for weekly recurrence. Comma-separated values 1(Sun) through 7(Sat).",
"pattern": "^[1-7](,[1-7])*$"
},
"monthly_day": {
"type": "integer",
"description": "Day of the month for monthly recurrence.",
"minimum": 1,
"maximum": 31
},
"monthly_week": {
"type": "integer",
"description": "Week of the month for monthly recurrence. -1 = Last week.",
"enum": [-1, 1, 2, 3, 4]
},
"monthly_week_day": {
"type": "integer",
"description": "Day of the week for monthly recurrence. 1(Sun) through 7(Sat).",
"enum": [1, 2, 3, 4, 5, 6, 7]
},
"end_times": {
"type": "integer",
"description": "Number of times the meeting will recur before ending. Cannot be used with end_date_time.",
"minimum": 1,
"maximum": 365,
"default": 1
},
"end_date_time": {
"type": "string",
"format": "date-time",
"description": "The end date-time for the recurrence. Cannot be used with end_times."
}
}
},
"Occurrence": {
"title": "Occurrence",
"description": "A single occurrence of a recurring meeting.",
"type": "object",
"properties": {
"occurrence_id": {
"type": "string",
"description": "Occurrence ID."
},
"start_time": {
"type": "string",
"format": "date-time",
"description": "Start time of this occurrence."
},
"duration": {
"type": "integer",
"description": "Duration of this occurrence in minutes."
},
"status": {
"type": "string",
"description": "Occurrence status.",
"enum": ["available", "deleted"]
}
}
},
"TrackingField": {
"title": "Tracking Field",
"description": "A tracking field set for a meeting.",
"type": "object",
"properties": {
"field": {
"type": "string",
"description": "Tracking field label/name."
},
"value": {
"type": "string",
"description": "Tracking field value."
},
"visible": {
"type": "boolean",
"description": "Whether the field is visible to participants."
}
}
},
"BreakoutRoomSettings": {
"title": "Breakout Room Settings",
"description": "Breakout room configuration for a meeting.",
"type": "object",
"properties": {
"enable": {
"type": "boolean",
"description": "Enable breakout rooms."
},
"rooms": {
"type": "array",
"description": "Pre-assigned breakout rooms.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Breakout room name."
},
"participants": {
"type": "array",
"description": "Email addresses of participants assigned to this room.",
"items": {
"type": "string",
"format": "email"
}
}
}
}
}
}
},
"LanguageInterpretationSettings": {
"title": "Language Interpretation Settings",
"description": "Language interpretation configuration for a meeting.",
"type": "object",
"properties": {
"enable": {
"type": "boolean",
"description": "Enable language interpretation."
},
"interpreters": {
"type": "array",
"description": "List of interpreters.",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Interpreter email address."
},
"languages": {
"type": "string",
"description": "Comma-separated language codes the interpreter supports."
}
}
}
}
}
},
"Participant": {
"title": "Participant",
"description": "A meeting participant.",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Participant UUID."
},
"user_id": {
"type": "string",
"description": "Participant user ID if a registered Zoom user."
},
"name": {
"type": "string",
"description": "Participant display name."
},
"user_email": {
"type": "string",
"format": "email",
"description": "Participant email address."
},
"join_time": {
"type": "string",
"format": "date-time",
"description": "Time the participant joined."
},
"leave_time": {
"type": "string",
"format": "date-time",
"description": "Time the participant left."
},
"duration": {
"type": "integer",
"description": "Duration in the meeting in seconds."
},
"registrant_id": {
"type": "string",
"description": "Registrant ID if the participant registered for the meeting."
},
"failover": {
"type": "boolean",
"description": "Whether failover occurred for this participant."
},
"status": {
"type": "string",
"description": "Participant status.",
"enum": ["in_meeting", "in_waiting_room"]
}
}
},
"Registrant": {
"title": "Registrant",
"description": "A meeting registrant.",
"type": "object",
"required": ["email", "first_name"],
"properties": {
"id": {
"type": "string",
"description": "Registrant ID."
},
"email": {
"type": "string",
"format": "email",
"description": "Registrant email address."
},
"first_name": {
"type": "string",
"description": "Registrant first name.",
"maxLength": 64
},
"last_name": {
"type": "string",
"description": "Registrant last name.",
"maxLength": 64
},
"address": {
"type": "string",
"description": "Registrant address."
},
"city": {
"type": "string",
"description": "Registrant city."
},
"state": {
"type": "string",
"description": "Registrant state or province."
},
"zip": {
"type": "string",
"description": "Registrant zip or postal code."
},
"country": {
"type": "string",
"description": "Registrant two-letter country code."
},
"phone": {
"type": "string",
"description": "Registrant phone number."
},
"comments": {
"type": "string",
"description": "Registrant questions and comments."
},
"industry": {
"type": "string",
"description": "Registrant industry."
},
"job_title": {
"type": "string",
"description": "Registrant job title."
},
"org": {
"type": "string",
"description": "Registrant organization."
},
"no_of_employees": {
"type": "string",
"description": "Number of employees.",
"enum": [
"1-20",
"21-50",
"51-100",
"101-250",
"251-500",
"501-1,000",
"1,001-5,000",
"5,001-10,000",
"More than 10,000"
]
},
"purchasing_time_frame": {
"type": "string",
"description": "Purchasing time frame.",
"enum": [
"Within a month",
"1-3 months",
"4-6 months",
"More than 6 months",
"No timeframe"
]
},
"role_in_purchase_process": {
"type": "string",
"description": "Role in purchase process.",
"enum": [
"Decision Maker",
"Evaluator/Recommender",
"Influencer",
"Not involved"
]
},
"language": {
"type": "string",
"description": "Registrant language preference.",
"enum": ["en-US", "en", "zh-CN", "zh", "es", "fr-FR", "fr", "jp", "pt", "de", "ko", "it", "vi", "pl", "tr", "id", "nl", "ru", "uk", "sv"]
},
"status": {
"type": "string",
"description": "Registrant status.",
"enum": ["approved", "pending", "denied"]
},
"create_time": {
"type": "string",
"format": "date-time",
"description": "Time the registrant registered."
},
"join_url": {
"type": "string",
"format": "uri",
"description": "Unique join URL for this registrant."
},
"custom_questions": {
"type": "array",
"description": "Custom question responses.",
"items": {
"$ref": "#/$defs/CustomQuestion"
}
}
}
},
"CustomQuestion": {
"title": "Custom Question",
"description": "A custom question and answer for meeting registration.",
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Question text."
},
"value": {
"type": "string",
"description": "Answer to the question."
}
}
},
"Poll": {
"title": "Poll",
"description": "A meeting poll.",
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64",
"description": "Poll ID."
},
"title": {
"type": "string",
"description": "Poll title.",
"maxLength": 64
},
"anonymous": {
"type": "boolean",
"description": "Whether this is an anonymous poll.",
"default": false
},
"status": {
"type": "string",
"description": "Poll status.",
"enum": ["notstart", "started", "ended", "sharing"]
},
"poll_type": {
"type": "integer",
"description": "Type of poll. 1 = Poll, 2 = Advanced Poll, 3 = Quiz.",
"enum": [1, 2, 3]
},
"questions": {
"type": "array",
"description": "List of questions in the poll.",
"items": {
"$ref": "#/$defs/PollQuestion"
}
}
}
},
"PollQuestion": {
"title": "Poll Question",
"description": "A question within a meeting poll.",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Question text."
},
"type": {
"type": "string",
"description": "Question type.",
"enum": [
"single",
"multiple",
"matching",
"rank_order",
"short_answer",
"long_answer",
"fill_in_the_blank",
"rating_scale"
]
},
"answer_required": {
"type": "boolean",
"description": "Whether an answer is required."
},
"answers": {
"type": "array",
"description": "Available answer options.",
"items": {
"type": "string"
}
},
"right_answers": {
"type": "array",
"description": "Correct answers for quiz type polls.",
"items": {
"type": "string"
}
}
}
},
"RecordingFile": {
"title": "Recording File",
"description": "A cloud recording file from a Zoom meeting.",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Recording file ID."
},
"meeting_id": {
"type": "string",
"description": "Meeting ID."
},
"recording_start": {
"type": "string",
"format": "date-time",
"description": "Recording start time."
},
"recording_end": {
"type": "string",
"format": "date-time",
"description": "Recording end time."
},
"file_type": {
"type": "string",
"description": "Recording file type.",
"enum": ["MP4", "M4A", "CHAT", "TRANSCRIPT", "CSV", "TB", "CC", "CHAT_MESSAGE", "SUMMARY"]
},
"file_extension": {
"type": "string",
"description": "File extension.",
"enum": ["MP4", "M4A", "TXT", "VTT", "CSV", "JSON"]
},
"file_size": {
"type": "number",
"description": "File size in bytes."
},
"download_url": {
"type": "string",
"format": "uri",
"description": "URL to download the recording file."
},
"play_url": {
"type": "string",
"format": "uri",
"description": "URL to play the recording file."
},
"status": {
"type": "string",
"description": "Recording status.",
"enum": ["completed"]
},
"recording_type": {
"type": "string",
"description": "Recording type.",
"enum": [
"shared_screen_with_speaker_view(CC)",
"shared_screen_with_speaker_view",
"shared_screen_with_gallery_view",
"active_speaker",
"gallery_view",
"shared_screen",
"audio_only",
"audio_transcript",
"chat_file",
"poll",
"host_video",
"closed_caption",
"timeline",
"sign_interpretation",
"production_studio"
]
}
}
},
"PastMeetingDetails": {
"title": "Past Meeting Details",
"description": "Details of a past (completed) meeting.",
"type": "object",
"properties": {
"uuid": {
"type": "string",
"description": "Unique meeting instance ID."
},
"id": {
"type": "integer",
"format": "int64",
"description": "Meeting ID."
},
"host_id": {
"type": "string",
"description": "Host user ID."
},
"host_email": {
"type": "string",
"format": "email",
"description": "Host email address."
},
"type": {
"$ref": "#/$defs/MeetingType"
},
"topic": {
"type": "string",
"description": "Meeting topic."
},
"user_name": {
"type": "string",
"description": "Display name of the meeting host."
},
"start_time": {
"type": "string",
"format": "date-time",
"description": "Meeting start time."
},
"end_time": {
"type": "string",
"format": "date-time",
"description": "Meeting end time."
},
"duration": {
"type": "integer",
"description": "Meeting duration in minutes."
},
"total_minutes": {
"type": "integer",
"description": "Total meeting minutes across all participants."
},
"participants_count": {
"type": "integer",
"description": "Number of participants."
}
}
},
"LiveStream": {
"title": "Live Stream",
"description": "Live stream configuration for a meeting.",
"type": "object",
"required": ["stream_url", "stream_key"],
"properties": {
"stream_url": {
"type": "string",
"format": "uri",
"description": "Streaming URL (e.g., RTMP endpoint)."
},
"stream_key": {
"type": "string",
"description": "Stream key or name."
},
"page_url": {
"type": "string",
"format": "uri",
"description": "The live stream page URL where viewers can watch."
},
"resolution": {
"type": "string",
"description": "The live stream resolution.",
"enum": ["720p", "1080p"]
}
}
},
"WebhookEvent": {
"title": "Webhook Event",
"description": "The standard envelope for all Zoom webhook event payloads.",
"type": "object",
"required": ["event", "event_ts", "payload"],
"properties": {
"event": {
"type": "string",
"description": "The event type identifier.",
"examples": [
"meeting.created",
"meeting.updated",
"meeting.deleted",
"meeting.started",
"meeting.ended",
"meeting.participant_joined",
"meeting.participant_left",
"meeting.registration_created",
"meeting.registration_approved",
"recording.completed",
"recording.started",
"recording.stopped"
]
},
"event_ts": {
"type": "integer",
"format": "int64",
"description": "Timestamp of the event in milliseconds since epoch."
},
"payload": {
"type": "object",
"description": "Event-specific payload data.",
"properties": {
"account_id": {
"type": "string",
"description": "The Zoom account ID."
},
"operator": {
"type": "string",
"description": "Email of the user who triggered the event."
},
"operator_id": {
"type": "string",
"description": "User ID of the operator."
},
"object": {
"type": "object",
"description": "The event-specific object data."
}
}
},
"download_token": {
"type": "string",
"description": "Short-lived token for downloading recording files. Only present in recording events."
}
}
},
"PaginatedResponse": {
"title": "Paginated Response",
"description": "Standard pagination wrapper for list endpoints.",
"type": "object",
"properties": {
"page_count": {
"type": "integer",
"description": "Total number of pages."
},
"page_number": {
"type": "integer",
"description": "Current page number."
},
"page_size": {
"type": "integer",
"description": "Number of records per page."
},
"total_records": {
"type": "integer",
"description": "Total number of records."
},
"next_page_token": {
"type": "string",
"description": "Token for the next page of results."
}
}
},
"ErrorResponse": {
"title": "Error Response",
"description": "Standard error response from the Zoom API.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"description": "Zoom error code."
},
"message": {
"type": "string",
"description": "Error message."
},
"errors": {
"type": "array",
"description": "Detailed field-level errors.",
"items": {
"type": "object",
"properties": {
"field": {
"type"
# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/zoom/refs/heads/main/json-schema/zoom-meeting-schema.json