productivity
Zoom Lua API for KosmoKrator Agents
Agent-facing Lua documentation and function reference for the Zoom KosmoKrator integration.Lua Namespace
Agents call this integration through app.integrations.zoom.*.
Use lua_read_doc("integrations.zoom") inside KosmoKrator to discover the same reference at runtime.
Call Lua from the Headless CLI
Use kosmo integrations:lua when a shell script, CI job, cron job, or another coding CLI should run a deterministic
Zoom workflow without starting an interactive agent session.
kosmo integrations:lua --eval 'dump(app.integrations.zoom.create_meeting({topic = "example_topic", type = "example_type", start_time = "example_start_time", duration = 1, timezone = "example_timezone", agenda = "example_agenda", user_id = "example_user_id", settings = "example_settings"}))' --json kosmo integrations:lua --eval 'print(docs.read("zoom"))' --json
kosmo integrations:lua --eval 'print(docs.read("zoom.create_meeting"))' --json Workflow file
Put repeatable logic in a Lua file, then execute it with JSON output for the calling process.
local zoom = app.integrations.zoom
local result = zoom.create_meeting({topic = "example_topic", type = "example_type", start_time = "example_start_time", duration = 1, timezone = "example_timezone", agenda = "example_agenda", user_id = "example_user_id", settings = "example_settings"})
dump(result) kosmo integrations:lua workflow.lua --json
kosmo integrations:lua workflow.lua --force --json integrations:lua exposes app.integrations.zoom, app.mcp.*, docs.*, json.*, and regex.*. Use app.integrations.zoom.default.* or app.integrations.zoom.work.* when you configured named credential accounts.
MCP-only Lua
If the script only needs configured MCP servers and does not need Zoom, use the narrower mcp:lua command.
# Use mcp:lua for MCP-only scripts; use integrations:lua for this integration namespace.
kosmo mcp:lua --eval 'dump(mcp.servers())' --json Agent-Facing Lua Docs
This is the rendered version of the full Lua documentation exposed to agents when they inspect the integration namespace.
Zoom — Lua API Reference
list_meetings
List meetings for a Zoom user.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
user_id | string | no | User ID or "me" for the authenticated user. Default: "me". |
type | string | no | Meeting type filter: scheduled, live, or upcoming. Default: "live". |
page_size | integer | no | Number of meetings per page (1–300). Default: 30. |
next_page_token | string | no | Token for the next page of results. |
Response
Returns an object with meetings array:
| Field | Type | Description |
|---|---|---|
id | string | Meeting ID |
topic | string | Meeting topic/title |
type | integer | Meeting type (1=instant, 2=scheduled, 3=recurring no time, 8=recurring) |
start_time | string | Start time (ISO 8601) |
duration | integer | Duration in minutes |
timezone | string | Meeting timezone |
join_url | string | URL to join the meeting |
Example
local meetings = app.integrations.zoom.list_meetings({
type = "live",
page_size = 20
})
for _, m in ipairs(meetings.meetings or {}) do
print(m.topic .. " at " .. m.start_time .. " (" .. m.duration .. " min)")
end
get_meeting
Get details of a specific meeting by ID.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
meeting_id | string | yes | The meeting ID or UUID. |
Response
Returns the full meeting object:
| Field | Type | Description |
|---|---|---|
id | string | Meeting ID |
topic | string | Meeting topic/title |
type | integer | Meeting type |
start_time | string | Start time (ISO 8601) |
duration | integer | Duration in minutes |
timezone | string | Meeting timezone |
agenda | string | Meeting agenda/description |
join_url | string | URL to join the meeting |
password | string | Meeting password |
settings | object | Meeting settings |
Example
local meeting = app.integrations.zoom.get_meeting({
meeting_id = "123456789"
})
print("Topic: " .. meeting.topic)
print("Join: " .. meeting.join_url)
print("Password: " .. (meeting.password or "none"))
create_meeting
Create a new Zoom meeting.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
topic | string | yes | Meeting topic/title. |
type | string | no | "1" = instant, "2" = scheduled (default), "3" = recurring no fixed time, "8" = recurring fixed time. |
start_time | string | no | Start time in ISO 8601 (e.g. "2024-01-15T10:00:00Z"). Required for scheduled meetings. |
duration | integer | no | Duration in minutes. Default: 30. |
timezone | string | no | Timezone (e.g. "America/New_York"). |
agenda | string | no | Meeting description/agenda. |
user_id | string | no | User ID to create meeting for. Default: "me". |
settings | object | no | Meeting settings object. |
Response
Returns the created meeting with id, topic, start_time, join_url, and password.
Example
local meeting = app.integrations.zoom.create_meeting({
topic = "Project Sync",
type = "2",
start_time = "2024-06-15T10:00:00Z",
duration = 45,
timezone = "America/New_York",
agenda = "Weekly project sync meeting"
})
print("Created meeting: " .. meeting.id)
print("Join URL: " .. meeting.join_url)
list_users
List users in the Zoom account.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
page_size | integer | no | Number of users per page (1–300). Default: 30. |
next_page_token | string | no | Token for the next page of results. |
Response
Returns an object with users array:
| Field | Type | Description |
|---|---|---|
id | string | User ID |
email | string | Email address |
first_name | string | First name |
last_name | string | Last name |
type | integer | User type (1=basic, 2=licensed, 3=on-prem) |
status | string | Account status (active, pending, inactive) |
Example
local users = app.integrations.zoom.list_users({
page_size = 50
})
for _, u in ipairs(users.users or {}) do
print(u.first_name .. " " .. u.last_name .. " <" .. u.email .. ">")
end
get_user
Get details of a specific Zoom user.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
user_id | string | yes | User ID or "me". |
Response
Returns a user object:
| Field | Type | Description |
|---|---|---|
id | string | User ID |
email | string | Email address |
first_name | string | First name |
last_name | string | Last name |
type | integer | User type |
status | string | Account status |
timezone | string | User timezone |
created_at | string | Account creation timestamp |
Example
local user = app.integrations.zoom.get_user({
user_id = "me"
})
print("Name: " .. user.first_name .. " " .. user.last_name)
print("Email: " .. user.email)
print("Timezone: " .. user.timezone)
list_recordings
List cloud recordings for a user.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
user_id | string | no | User ID or "me". Default: "me". |
page_size | integer | no | Number of recordings per page (1–300). Default: 30. |
next_page_token | string | no | Token for the next page of results. |
Response
Returns an object with meetings array, each containing recording info:
| Field | Type | Description |
|---|---|---|
id | string | Meeting instance ID |
topic | string | Meeting topic |
start_time | string | Recording start time |
duration | integer | Duration in minutes |
recording_files | array | Array of recording file objects with download URLs |
share_url | string | Sharing URL |
Example
local recordings = app.integrations.zoom.list_recordings({
user_id = "me",
page_size = 10
})
for _, r in ipairs(recordings.meetings or {}) do
print(r.topic .. " - " .. r.start_time .. " (" .. r.duration .. " min)")
for _, f in ipairs(r.recording_files or {}) do
print(" File: " .. f.file_type .. " - " .. (f.download_url or "no url"))
end
end
get_current_user
Get the profile of the currently authenticated user.
Parameters
None.
Response
Returns a user object:
| Field | Type | Description |
|---|---|---|
id | string | User ID |
email | string | Email address |
first_name | string | First name |
last_name | string | Last name |
type | integer | User type |
status | string | Account status |
timezone | string | User timezone |
created_at | string | Account creation timestamp |
Example
local user = app.integrations.zoom.get_current_user({})
print("Logged in as: " .. user.first_name .. " " .. user.last_name .. " (" .. user.email .. ")")
Additional Tools
The integration also exposes these Zoom API operations:
| Tool | Purpose |
|---|---|
create_user | Create a user in the Zoom account with an action and user_info payload. |
create_webinar | Create a webinar for a user with topic, start time, duration, timezone, and agenda. |
delete_meeting | Delete a meeting by meeting_id. |
get_account | Get the current Zoom account information. |
get_user_settings | Get settings for a user by user_id. |
get_webinar | Get webinar details by webinar_id. |
list_past_meetings | List past instances for a meeting by meeting_id. |
list_webinars | List webinars for a user with optional page_size. |
update_meeting | Update topic, start time, duration, or agenda for an existing meeting. |
Examples:
local webinar = app.integrations.zoom.create_webinar({
user_id = "me",
topic = "Customer onboarding",
type = 5,
start_time = "2026-06-15T10:00:00Z",
duration = 60,
timezone = "UTC"
})
local settings = app.integrations.zoom.get_user_settings({
user_id = "me"
})
Multi-Account Usage
If you have multiple Zoom accounts configured, use account-specific namespaces:
-- Default account (always works)
app.integrations.zoom.function_name({...})
-- Explicit default (portable across setups)
app.integrations.zoom.default.function_name({...})
-- Named accounts
app.integrations.zoom.work.function_name({...})
app.integrations.zoom.personal.function_name({...})
All functions are identical across accounts — only the credentials differ.
Raw agent markdown
# Zoom — Lua API Reference
## list_meetings
List meetings for a Zoom user.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `user_id` | string | no | User ID or `"me"` for the authenticated user. Default: `"me"`. |
| `type` | string | no | Meeting type filter: `scheduled`, `live`, or `upcoming`. Default: `"live"`. |
| `page_size` | integer | no | Number of meetings per page (1–300). Default: 30. |
| `next_page_token` | string | no | Token for the next page of results. |
### Response
Returns an object with `meetings` array:
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Meeting ID |
| `topic` | string | Meeting topic/title |
| `type` | integer | Meeting type (1=instant, 2=scheduled, 3=recurring no time, 8=recurring) |
| `start_time` | string | Start time (ISO 8601) |
| `duration` | integer | Duration in minutes |
| `timezone` | string | Meeting timezone |
| `join_url` | string | URL to join the meeting |
### Example
```lua
local meetings = app.integrations.zoom.list_meetings({
type = "live",
page_size = 20
})
for _, m in ipairs(meetings.meetings or {}) do
print(m.topic .. " at " .. m.start_time .. " (" .. m.duration .. " min)")
end
```
---
## get_meeting
Get details of a specific meeting by ID.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `meeting_id` | string | yes | The meeting ID or UUID. |
### Response
Returns the full meeting object:
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Meeting ID |
| `topic` | string | Meeting topic/title |
| `type` | integer | Meeting type |
| `start_time` | string | Start time (ISO 8601) |
| `duration` | integer | Duration in minutes |
| `timezone` | string | Meeting timezone |
| `agenda` | string | Meeting agenda/description |
| `join_url` | string | URL to join the meeting |
| `password` | string | Meeting password |
| `settings` | object | Meeting settings |
### Example
```lua
local meeting = app.integrations.zoom.get_meeting({
meeting_id = "123456789"
})
print("Topic: " .. meeting.topic)
print("Join: " .. meeting.join_url)
print("Password: " .. (meeting.password or "none"))
```
---
## create_meeting
Create a new Zoom meeting.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `topic` | string | yes | Meeting topic/title. |
| `type` | string | no | `"1"` = instant, `"2"` = scheduled (default), `"3"` = recurring no fixed time, `"8"` = recurring fixed time. |
| `start_time` | string | no | Start time in ISO 8601 (e.g. `"2024-01-15T10:00:00Z"`). Required for scheduled meetings. |
| `duration` | integer | no | Duration in minutes. Default: 30. |
| `timezone` | string | no | Timezone (e.g. `"America/New_York"`). |
| `agenda` | string | no | Meeting description/agenda. |
| `user_id` | string | no | User ID to create meeting for. Default: `"me"`. |
| `settings` | object | no | Meeting settings object. |
### Response
Returns the created meeting with `id`, `topic`, `start_time`, `join_url`, and `password`.
### Example
```lua
local meeting = app.integrations.zoom.create_meeting({
topic = "Project Sync",
type = "2",
start_time = "2024-06-15T10:00:00Z",
duration = 45,
timezone = "America/New_York",
agenda = "Weekly project sync meeting"
})
print("Created meeting: " .. meeting.id)
print("Join URL: " .. meeting.join_url)
```
---
## list_users
List users in the Zoom account.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `page_size` | integer | no | Number of users per page (1–300). Default: 30. |
| `next_page_token` | string | no | Token for the next page of results. |
### Response
Returns an object with `users` array:
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | User ID |
| `email` | string | Email address |
| `first_name` | string | First name |
| `last_name` | string | Last name |
| `type` | integer | User type (1=basic, 2=licensed, 3=on-prem) |
| `status` | string | Account status (active, pending, inactive) |
### Example
```lua
local users = app.integrations.zoom.list_users({
page_size = 50
})
for _, u in ipairs(users.users or {}) do
print(u.first_name .. " " .. u.last_name .. " <" .. u.email .. ">")
end
```
---
## get_user
Get details of a specific Zoom user.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `user_id` | string | yes | User ID or `"me"`. |
### Response
Returns a user object:
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | User ID |
| `email` | string | Email address |
| `first_name` | string | First name |
| `last_name` | string | Last name |
| `type` | integer | User type |
| `status` | string | Account status |
| `timezone` | string | User timezone |
| `created_at` | string | Account creation timestamp |
### Example
```lua
local user = app.integrations.zoom.get_user({
user_id = "me"
})
print("Name: " .. user.first_name .. " " .. user.last_name)
print("Email: " .. user.email)
print("Timezone: " .. user.timezone)
```
---
## list_recordings
List cloud recordings for a user.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `user_id` | string | no | User ID or `"me"`. Default: `"me"`. |
| `page_size` | integer | no | Number of recordings per page (1–300). Default: 30. |
| `next_page_token` | string | no | Token for the next page of results. |
### Response
Returns an object with `meetings` array, each containing recording info:
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Meeting instance ID |
| `topic` | string | Meeting topic |
| `start_time` | string | Recording start time |
| `duration` | integer | Duration in minutes |
| `recording_files` | array | Array of recording file objects with download URLs |
| `share_url` | string | Sharing URL |
### Example
```lua
local recordings = app.integrations.zoom.list_recordings({
user_id = "me",
page_size = 10
})
for _, r in ipairs(recordings.meetings or {}) do
print(r.topic .. " - " .. r.start_time .. " (" .. r.duration .. " min)")
for _, f in ipairs(r.recording_files or {}) do
print(" File: " .. f.file_type .. " - " .. (f.download_url or "no url"))
end
end
```
---
## get_current_user
Get the profile of the currently authenticated user.
### Parameters
None.
### Response
Returns a user object:
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | User ID |
| `email` | string | Email address |
| `first_name` | string | First name |
| `last_name` | string | Last name |
| `type` | integer | User type |
| `status` | string | Account status |
| `timezone` | string | User timezone |
| `created_at` | string | Account creation timestamp |
### Example
```lua
local user = app.integrations.zoom.get_current_user({})
print("Logged in as: " .. user.first_name .. " " .. user.last_name .. " (" .. user.email .. ")")
```
---
## Additional Tools
The integration also exposes these Zoom API operations:
| Tool | Purpose |
|------|---------|
| `create_user` | Create a user in the Zoom account with an action and user_info payload. |
| `create_webinar` | Create a webinar for a user with topic, start time, duration, timezone, and agenda. |
| `delete_meeting` | Delete a meeting by `meeting_id`. |
| `get_account` | Get the current Zoom account information. |
| `get_user_settings` | Get settings for a user by `user_id`. |
| `get_webinar` | Get webinar details by `webinar_id`. |
| `list_past_meetings` | List past instances for a meeting by `meeting_id`. |
| `list_webinars` | List webinars for a user with optional `page_size`. |
| `update_meeting` | Update topic, start time, duration, or agenda for an existing meeting. |
Examples:
```lua
local webinar = app.integrations.zoom.create_webinar({
user_id = "me",
topic = "Customer onboarding",
type = 5,
start_time = "2026-06-15T10:00:00Z",
duration = 60,
timezone = "UTC"
})
local settings = app.integrations.zoom.get_user_settings({
user_id = "me"
})
```
---
## Multi-Account Usage
If you have multiple Zoom accounts configured, use account-specific namespaces:
```lua
-- Default account (always works)
app.integrations.zoom.function_name({...})
-- Explicit default (portable across setups)
app.integrations.zoom.default.function_name({...})
-- Named accounts
app.integrations.zoom.work.function_name({...})
app.integrations.zoom.personal.function_name({...})
```
All functions are identical across accounts — only the credentials differ. local result = app.integrations.zoom.create_meeting({topic = "example_topic", type = "example_type", start_time = "example_start_time", duration = 1, timezone = "example_timezone", agenda = "example_agenda", user_id = "example_user_id", settings = "example_settings"})
print(result) Functions
create_meeting Write
Create a new Zoom meeting. Provide a topic, start time (ISO 8601), duration, and optional timezone. Returns the meeting with join URL and password.
- Lua path
app.integrations.zoom.create_meeting- Full name
zoom.zoom_create_meeting
| Parameter | Type | Required | Description |
|---|---|---|---|
topic | string | yes | Meeting topic/title. |
type | string | no | Meeting type: "1" = instant, "2" = scheduled (default), "3" = recurring no fixed time, "8" = recurring fixed time. |
start_time | string | no | Meeting start time in ISO 8601 format (e.g. "2024-01-15T10:00:00Z"). Required for scheduled meetings. |
duration | integer | no | Meeting duration in minutes. Default: 30. |
timezone | string | no | Timezone for the meeting (e.g. "America/New_York"). |
agenda | string | no | Meeting description/agenda. |
user_id | string | no | User ID to create the meeting for. Default: "me". |
settings | object | no | Meeting settings (join_before_host, mute_upon_entry, etc.). |
get_current_user Read
Get the profile of the currently authenticated Zoom user. Returns email, name, account type, status, and timezone.
- Lua path
app.integrations.zoom.get_current_user- Full name
zoom.zoom_get_current_user
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
get_meeting Read
Get details of a specific Zoom meeting by ID. Returns the meeting topic, agenda, start time, duration, join URL, and settings.
- Lua path
app.integrations.zoom.get_meeting- Full name
zoom.zoom_get_meeting
| Parameter | Type | Required | Description |
|---|---|---|---|
meeting_id | string | yes | The meeting ID or UUID. |
get_user Read
Get details of a specific Zoom user by ID or "me" for the authenticated user. Returns email, name, type, status, and timezone.
- Lua path
app.integrations.zoom.get_user- Full name
zoom.zoom_get_user
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | yes | The user ID or "me" for the authenticated user. |
list_meetings Read
List meetings for a Zoom user. Returns meeting IDs, topics, start times, durations, and join URLs. Use type "live" for in-progress, "scheduled" for upcoming, or "upcoming" for all upcoming meetings.
- Lua path
app.integrations.zoom.list_meetings- Full name
zoom.zoom_list_meetings
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | no | User ID or "me" for the authenticated user. Default: "me". |
type | string | no | Meeting type filter: scheduled, live, or upcoming. Default: "live". |
page_size | integer | no | Number of meetings per page (1–300). Default: 30. |
next_page_token | string | no | Token for the next page of results. |
list_recordings Read
List cloud recordings for a Zoom user. Returns recording IDs, topics, start times, durations, and download URLs for recording files.
- Lua path
app.integrations.zoom.list_recordings- Full name
zoom.zoom_list_recordings
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | no | User ID or "me" for the authenticated user. Default: "me". |
page_size | integer | no | Number of recordings per page (1–300). Default: 30. |
next_page_token | string | no | Token for the next page of results. |
list_users Read
List users in the Zoom account. Returns user IDs, emails, names, types (1=basic, 2=licensed), and status. Use this to find user IDs for other operations.
- Lua path
app.integrations.zoom.list_users- Full name
zoom.zoom_list_users
| Parameter | Type | Required | Description |
|---|---|---|---|
page_size | integer | no | Number of users per page (1–300). Default: 30. |
next_page_token | string | no | Token for the next page of results. |
create_user Write
Create a new user in the Zoom account.
- Lua path
app.integrations.zoom.create_user- Full name
zoom.zoom_create_user
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | yes | Creation action: "create" (email invitation), "autoCreate", "custCreate", or "ssoCreate". |
email | string | yes | Email address for the new user. |
first_name | string | no | First name of the user. |
last_name | string | no | Last name of the user. |
type | integer | no | User type: 1=Basic, 2=Licensed, 3=On-prem. |
create_webinar Write
Create a Zoom webinar for a user. Supports scheduling with topic, start time, duration, and timezone.
- Lua path
app.integrations.zoom.create_webinar- Full name
zoom.zoom_create_webinar
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | yes | User ID or email address to create the webinar for. |
topic | string | yes | Webinar topic / title. |
type | integer | no | Webinar type: 5=Webinar, 6=Recurring webinar, 9=Recurring webinar no fixed time. |
start_time | string | no | Webinar start time in ISO 8601 format. |
duration | integer | no | Webinar duration in minutes. |
timezone | string | no | Timezone for the webinar (e.g., "America/New_York"). |
agenda | string | no | Webinar description / agenda. |
delete_meeting Write
Delete a Zoom meeting by ID.
- Lua path
app.integrations.zoom.delete_meeting- Full name
zoom.zoom_delete_meeting
| Parameter | Type | Required | Description |
|---|---|---|---|
meeting_id | string | yes | The meeting ID to delete. |
get_account Read
Get the current Zoom account information.
- Lua path
app.integrations.zoom.get_account- Full name
zoom.zoom_get_account
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
get_user_settings Read
Get settings for a Zoom user.
- Lua path
app.integrations.zoom.get_user_settings- Full name
zoom.zoom_get_user_settings
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | yes | User ID or email address. |
get_webinar Read
Get details of a Zoom webinar by ID.
- Lua path
app.integrations.zoom.get_webinar- Full name
zoom.zoom_get_webinar
| Parameter | Type | Required | Description |
|---|---|---|---|
webinar_id | string | yes | The webinar ID. |
list_past_meetings Read
List past instances of a Zoom meeting.
- Lua path
app.integrations.zoom.list_past_meetings- Full name
zoom.zoom_list_past_meetings
| Parameter | Type | Required | Description |
|---|---|---|---|
meeting_id | string | yes | The meeting ID to list past instances for. |
list_webinars Read
List webinars for a Zoom user.
- Lua path
app.integrations.zoom.list_webinars- Full name
zoom.zoom_list_webinars
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | yes | User ID or email address. |
page_size | integer | no | Number of records returned per page (default 30, max 300). |
update_meeting Write
Update an existing Zoom meeting. Supports changing topic, start time, duration, and agenda.
- Lua path
app.integrations.zoom.update_meeting- Full name
zoom.zoom_update_meeting
| Parameter | Type | Required | Description |
|---|---|---|---|
meeting_id | string | yes | The meeting ID to update. |
topic | string | no | New meeting topic / title. |
start_time | string | no | New start time in ISO 8601 format. |
duration | integer | no | New duration in minutes. |
agenda | string | no | New meeting agenda. |