KosmoKrator

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.

Inline Lua call
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
Read Lua docs headlessly
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.

workflow.lua
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)
Run the workflow
kosmo integrations:lua workflow.lua --json
kosmo integrations:lua workflow.lua --force --json
Namespace note. 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.

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

NameTypeRequiredDescription
user_idstringnoUser ID or "me" for the authenticated user. Default: "me".
typestringnoMeeting type filter: scheduled, live, or upcoming. Default: "live".
page_sizeintegernoNumber of meetings per page (1–300). Default: 30.
next_page_tokenstringnoToken for the next page of results.

Response

Returns an object with meetings array:

FieldTypeDescription
idstringMeeting ID
topicstringMeeting topic/title
typeintegerMeeting type (1=instant, 2=scheduled, 3=recurring no time, 8=recurring)
start_timestringStart time (ISO 8601)
durationintegerDuration in minutes
timezonestringMeeting timezone
join_urlstringURL 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

NameTypeRequiredDescription
meeting_idstringyesThe meeting ID or UUID.

Response

Returns the full meeting object:

FieldTypeDescription
idstringMeeting ID
topicstringMeeting topic/title
typeintegerMeeting type
start_timestringStart time (ISO 8601)
durationintegerDuration in minutes
timezonestringMeeting timezone
agendastringMeeting agenda/description
join_urlstringURL to join the meeting
passwordstringMeeting password
settingsobjectMeeting 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

NameTypeRequiredDescription
topicstringyesMeeting topic/title.
typestringno"1" = instant, "2" = scheduled (default), "3" = recurring no fixed time, "8" = recurring fixed time.
start_timestringnoStart time in ISO 8601 (e.g. "2024-01-15T10:00:00Z"). Required for scheduled meetings.
durationintegernoDuration in minutes. Default: 30.
timezonestringnoTimezone (e.g. "America/New_York").
agendastringnoMeeting description/agenda.
user_idstringnoUser ID to create meeting for. Default: "me".
settingsobjectnoMeeting 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

NameTypeRequiredDescription
page_sizeintegernoNumber of users per page (1–300). Default: 30.
next_page_tokenstringnoToken for the next page of results.

Response

Returns an object with users array:

FieldTypeDescription
idstringUser ID
emailstringEmail address
first_namestringFirst name
last_namestringLast name
typeintegerUser type (1=basic, 2=licensed, 3=on-prem)
statusstringAccount 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

NameTypeRequiredDescription
user_idstringyesUser ID or "me".

Response

Returns a user object:

FieldTypeDescription
idstringUser ID
emailstringEmail address
first_namestringFirst name
last_namestringLast name
typeintegerUser type
statusstringAccount status
timezonestringUser timezone
created_atstringAccount 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

NameTypeRequiredDescription
user_idstringnoUser ID or "me". Default: "me".
page_sizeintegernoNumber of recordings per page (1–300). Default: 30.
next_page_tokenstringnoToken for the next page of results.

Response

Returns an object with meetings array, each containing recording info:

FieldTypeDescription
idstringMeeting instance ID
topicstringMeeting topic
start_timestringRecording start time
durationintegerDuration in minutes
recording_filesarrayArray of recording file objects with download URLs
share_urlstringSharing 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:

FieldTypeDescription
idstringUser ID
emailstringEmail address
first_namestringFirst name
last_namestringLast name
typeintegerUser type
statusstringAccount status
timezonestringUser timezone
created_atstringAccount 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:

ToolPurpose
create_userCreate a user in the Zoom account with an action and user_info payload.
create_webinarCreate a webinar for a user with topic, start time, duration, timezone, and agenda.
delete_meetingDelete a meeting by meeting_id.
get_accountGet the current Zoom account information.
get_user_settingsGet settings for a user by user_id.
get_webinarGet webinar details by webinar_id.
list_past_meetingsList past instances for a meeting by meeting_id.
list_webinarsList webinars for a user with optional page_size.
update_meetingUpdate 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.
Metadata-derived Lua example
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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.