KosmoKrator

productivity

Monday.com Lua API for KosmoKrator Agents

Agent-facing Lua documentation and function reference for the Monday.com KosmoKrator integration.

7 functions 6 read 1 write API token auth

Lua Namespace

Agents call this integration through app.integrations.monday.*. Use lua_read_doc("integrations.monday") inside KosmoKrator to discover the same reference at runtime.

Agent-Facing Lua Docs

This is the rendered version of the full Lua documentation exposed to agents when they inspect the integration namespace.

Monday.com — Lua API Reference

Monday.com is a Work OS that powers teams to run projects and workflows with confidence. This integration lets you list boards, get board details with columns and groups, list and get items, create items, list workspaces, and get the current user — all from Lua scripts.

Authentication

Uses an API Token (personal token or OAuth token). Generate a personal API token at Monday.com → Avatar (bottom-left) → Developers → API tokens. The token authenticates via the Monday.com GraphQL API at https://api.monday.com/v2. Tokens inherit the permissions of the user who created them.


Overview

All tools are called via app.integrations.monday.<tool_name>({ ... }). Every function takes a single Lua table of named parameters and returns a result table.

local result = app.integrations.monday.get_board({ board_id = 12345678 })

Errors surface as result.error (string). Check for it before using the response.

if result.error then
  print("Error: " .. result.error)
  return
end

Boards

app.integrations.monday.list_boards(...)

List Monday.com boards the authenticated user has access to. Optionally filter by workspace.

NameTypeRequiredDescription
limitintegernoMax boards to return. Default: 25.
workspace_idintegernoFilter boards by workspace ID. Use list_workspaces to discover workspace IDs.

Returns: boards (array), total. Each board contains: id, name, description, board_kind, workspace (table with id, name), owner (table with id, name), items_count, created_at, updated_at.

-- List all boards
local result = app.integrations.monday.list_boards({ limit = 50 })

for _, board in ipairs(result.boards) do
  print(board.name .. " (" .. board.id .. ") — " .. board.items_count .. " items")
end
-- List boards in a specific workspace
local result = app.integrations.monday.list_boards({
  workspace_id = 98765,
  limit = 10
})

for _, board in ipairs(result.boards) do
  print(board.name .. " [" .. board.board_kind .. "]")
end

app.integrations.monday.get_board(...)

Get a single Monday.com board by ID. Returns full board details including all columns (with types) and groups. Use list_boards to discover board IDs.

NameTypeRequiredDescription
board_idintegeryesBoard ID to retrieve.

Returns: id, name, description, board_kind, state, workspace, owner, items_count, columns (array of tables with id, title, type, archived), groups (array of tables with id, title, color, position, deleted), created_at, updated_at.

-- Get a board with its columns and groups
local result = app.integrations.monday.get_board({ board_id = 12345678 })

if result.error then
  print("Error: " .. result.error)
else
  print("Board: " .. result.name)
  print("State: " .. result.state)
  print("Items: " .. tostring(result.items_count))

  print("\nColumns:")
  for _, col in ipairs(result.columns) do
    print("  " .. col.title .. " (" .. col.type .. ") — ID: " .. col.id)
  end

  print("\nGroups:")
  for _, grp in ipairs(result.groups) do
    print("  " .. grp.title .. " [color: " .. grp.color .. "] — ID: " .. grp.id)
  end
end

Items

app.integrations.monday.list_items(...)

List items on a Monday.com board with pagination. Returns item name, state, group, creator, and timestamps.

NameTypeRequiredDescription
board_idintegeryesBoard ID to list items for.
limitintegernoResults per page. Default: 25.
pageintegernoPage number (1-based). Default: 1.

Returns: items (array), total, page, limit. Each item contains: id, name, state, group (table with id, title), creator (table with id, name), created_at, updated_at.

-- List the first 10 items on a board
local result = app.integrations.monday.list_items({
  board_id = 12345678,
  limit = 10
})

for _, item in ipairs(result.items) do
  local group = item.group and item.group.title or "—"
  print(item.name .. " [state: " .. item.state .. ", group: " .. group .. "]")
end
-- Paginate through all items
local page = 1
local all_items = {}

repeat
  local result = app.integrations.monday.list_items({
    board_id = 12345678,
    limit = 100,
    page = page
  })

  if result.error then
    print("Error: " .. result.error)
    break
  end

  for _, item in ipairs(result.items) do
    table.insert(all_items, item)
  end

  page = page + 1
until #result.items < 100

print("Fetched " .. #all_items .. " items total")

app.integrations.monday.get_item(...)

Get a single Monday.com item by ID with all column values.

NameTypeRequiredDescription
item_idintegeryesItem ID to retrieve.

Returns: id, name, state, board (table with id, name), group (table with id, title), creator (table with id, name), column_values (array of tables with id, title, type, text, value), created_at, updated_at.

-- Get an item with its column values
local result = app.integrations.monday.get_item({ item_id = 42 })

if result.error then
  print("Error: " .. result.error)
else
  print("Item: " .. result.name)
  print("Board: " .. (result.board and result.board.name or "—"))
  print("Group: " .. (result.group and result.group.title or "—"))
  print("State: " .. result.state)

  print("\nColumn Values:")
  for _, cv in ipairs(result.column_values) do
    print("  " .. cv.title .. " (" .. cv.type .. "): " .. (cv.text or "—"))
  end
end

app.integrations.monday.create_item(...)

Create a new item on a Monday.com board. Requires a board ID and item name. Optionally set a group and initial column values.

NameTypeRequiredDescription
board_idintegeryesBoard ID to create the item on.
item_namestringyesName of the new item.
group_idstringnoGroup ID to place the item in. Use get_board to discover group IDs.
column_valuestablenoColumn values to set, keyed by column ID. Values depend on column type.

Returns: id, name, state, board (table with id, name), group (table with id, title), created_at.

-- Create a simple item
local result = app.integrations.monday.create_item({
  board_id = 12345678,
  item_name = "New task from integration"
})

if not result.error then
  print("Created item: " .. result.name .. " (ID: " .. result.id .. ")")
end
-- Create an item with group and column values
local result = app.integrations.monday.create_item({
  board_id = 12345678,
  item_name = "Fix production bug",
  group_id = "topics",
  column_values = {
    status = "Working on it",
    priority = "High",
    date4 = "2026-04-10"
  }
})

if not result.error then
  print("Created: " .. result.name .. " in group " .. (result.group and result.group.title or "—"))
end

Workspaces

app.integrations.monday.list_workspaces(...)

List Monday.com workspaces the authenticated user has access to. Returns workspace name, kind, description, and subscriber counts.

NameTypeRequiredDescription
limitintegernoMax workspaces to return. Default: 50.

Returns: workspaces (array), total. Each workspace contains: id, name, description, kind, owners_count, subscribers_count, is_deleted, created_at.

-- List all workspaces
local result = app.integrations.monday.list_workspaces({})

for _, ws in ipairs(result.workspaces) do
  print(ws.name .. " (" .. ws.kind .. ") — " .. ws.subscribers_count .. " subscribers")
end

User

app.integrations.monday.get_current_user(...)

Get the currently authenticated Monday.com user’s profile, including ID, name, email, avatar URL, title, location, and timezone.

NameTypeRequiredDescription
(none)This tool takes no parameters. Pass an empty table {}.

Returns: id, name, email, avatar_url, title, country_code, location, phone, timezone, join_date, enabled.

-- Get the authenticated user's profile
local result = app.integrations.monday.get_current_user({})

print("Logged in as: " .. result.name .. " <" .. result.email .. ">")
print("Title: " .. (result.title or "—"))
print("Timezone: " .. (result.timezone or "—"))
print("User ID: " .. result.id)

Pagination

The list_items tool supports page-based pagination. The response includes:

FieldTypeDescription
pageintegerCurrent page number.
limitintegerResults per page.

Paginating through all items

local items = {}
local page = 1

repeat
  local result = app.integrations.monday.list_items({
    board_id = 12345678,
    limit = 100,
    page = page
  })

  if result.error then
    print("Error: " .. result.error)
    break
  end

  for _, item in ipairs(result.items) do
    table.insert(items, item)
  end

  page = page + 1
until #result.items < 100

print("Fetched " .. #items .. " items total")

Notes

  • Board IDs are integers: Monday.com uses numeric IDs for boards and items. You can find these in the Monday.com UI URL or via the list_boards tool.
  • Column values format: When setting column values in create_item, use the column ID (not the title) as the key. Use get_board to discover column IDs and types. The value format depends on the column type (e.g., status columns use label strings, date columns use "YYYY-MM-DD" format).
  • GraphQL backend: All operations use the Monday.com GraphQL API at https://api.monday.com/v2.
  • Rate limits: Monday.com enforces API rate limits based on your plan. If you encounter errors during bulk operations, add delays between calls.
  • Discovery flow: Call list_workspaces({}) to find workspace IDs → list_boards({ workspace_id = ... }) to find board IDs → get_board({ board_id = ... }) to see columns and groups → create_item or list_items to work with items.

Multi-Account Usage

If you have multiple Monday.com accounts configured, use account-specific namespaces:

-- Default account (always works)
app.integrations.monday.function_name({...})

-- Explicit default (portable across setups)
app.integrations.monday.default.function_name({...})

-- Named accounts
app.integrations.monday.work.function_name({...})
app.integrations.monday.personal.function_name({...})

All functions are identical across accounts — only the credentials differ.

Raw agent markdown
# Monday.com — Lua API Reference

Monday.com is a Work OS that powers teams to run projects and workflows with confidence. This integration lets you list boards, get board details with columns and groups, list and get items, create items, list workspaces, and get the current user — all from Lua scripts.

## Authentication

Uses an **API Token** (personal token or OAuth token). Generate a personal API token at Monday.com → Avatar (bottom-left) → Developers → API tokens. The token authenticates via the Monday.com GraphQL API at `https://api.monday.com/v2`. Tokens inherit the permissions of the user who created them.

---

## Overview

All tools are called via `app.integrations.monday.<tool_name>({ ... })`. Every function takes a single Lua table of named parameters and returns a result table.

```lua
local result = app.integrations.monday.get_board({ board_id = 12345678 })
```

Errors surface as `result.error` (string). Check for it before using the response.

```lua
if result.error then
  print("Error: " .. result.error)
  return
end
```

---

## Boards

### `app.integrations.monday.list_boards(...)`

List Monday.com boards the authenticated user has access to. Optionally filter by workspace.

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `limit` | integer | no | Max boards to return. Default: 25. |
| `workspace_id` | integer | no | Filter boards by workspace ID. Use `list_workspaces` to discover workspace IDs. |

Returns: `boards` (array), `total`. Each board contains: `id`, `name`, `description`, `board_kind`, `workspace` (table with `id`, `name`), `owner` (table with `id`, `name`), `items_count`, `created_at`, `updated_at`.

```lua
-- List all boards
local result = app.integrations.monday.list_boards({ limit = 50 })

for _, board in ipairs(result.boards) do
  print(board.name .. " (" .. board.id .. ") — " .. board.items_count .. " items")
end
```

```lua
-- List boards in a specific workspace
local result = app.integrations.monday.list_boards({
  workspace_id = 98765,
  limit = 10
})

for _, board in ipairs(result.boards) do
  print(board.name .. " [" .. board.board_kind .. "]")
end
```

---

### `app.integrations.monday.get_board(...)`

Get a single Monday.com board by ID. Returns full board details including all columns (with types) and groups. Use `list_boards` to discover board IDs.

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `board_id` | integer | yes | Board ID to retrieve. |

Returns: `id`, `name`, `description`, `board_kind`, `state`, `workspace`, `owner`, `items_count`, `columns` (array of tables with `id`, `title`, `type`, `archived`), `groups` (array of tables with `id`, `title`, `color`, `position`, `deleted`), `created_at`, `updated_at`.

```lua
-- Get a board with its columns and groups
local result = app.integrations.monday.get_board({ board_id = 12345678 })

if result.error then
  print("Error: " .. result.error)
else
  print("Board: " .. result.name)
  print("State: " .. result.state)
  print("Items: " .. tostring(result.items_count))

  print("\nColumns:")
  for _, col in ipairs(result.columns) do
    print("  " .. col.title .. " (" .. col.type .. ") — ID: " .. col.id)
  end

  print("\nGroups:")
  for _, grp in ipairs(result.groups) do
    print("  " .. grp.title .. " [color: " .. grp.color .. "] — ID: " .. grp.id)
  end
end
```

---

## Items

### `app.integrations.monday.list_items(...)`

List items on a Monday.com board with pagination. Returns item name, state, group, creator, and timestamps.

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `board_id` | integer | yes | Board ID to list items for. |
| `limit` | integer | no | Results per page. Default: 25. |
| `page` | integer | no | Page number (1-based). Default: 1. |

Returns: `items` (array), `total`, `page`, `limit`. Each item contains: `id`, `name`, `state`, `group` (table with `id`, `title`), `creator` (table with `id`, `name`), `created_at`, `updated_at`.

```lua
-- List the first 10 items on a board
local result = app.integrations.monday.list_items({
  board_id = 12345678,
  limit = 10
})

for _, item in ipairs(result.items) do
  local group = item.group and item.group.title or "—"
  print(item.name .. " [state: " .. item.state .. ", group: " .. group .. "]")
end
```

```lua
-- Paginate through all items
local page = 1
local all_items = {}

repeat
  local result = app.integrations.monday.list_items({
    board_id = 12345678,
    limit = 100,
    page = page
  })

  if result.error then
    print("Error: " .. result.error)
    break
  end

  for _, item in ipairs(result.items) do
    table.insert(all_items, item)
  end

  page = page + 1
until #result.items < 100

print("Fetched " .. #all_items .. " items total")
```

---

### `app.integrations.monday.get_item(...)`

Get a single Monday.com item by ID with all column values.

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `item_id` | integer | yes | Item ID to retrieve. |

Returns: `id`, `name`, `state`, `board` (table with `id`, `name`), `group` (table with `id`, `title`), `creator` (table with `id`, `name`), `column_values` (array of tables with `id`, `title`, `type`, `text`, `value`), `created_at`, `updated_at`.

```lua
-- Get an item with its column values
local result = app.integrations.monday.get_item({ item_id = 42 })

if result.error then
  print("Error: " .. result.error)
else
  print("Item: " .. result.name)
  print("Board: " .. (result.board and result.board.name or "—"))
  print("Group: " .. (result.group and result.group.title or "—"))
  print("State: " .. result.state)

  print("\nColumn Values:")
  for _, cv in ipairs(result.column_values) do
    print("  " .. cv.title .. " (" .. cv.type .. "): " .. (cv.text or "—"))
  end
end
```

---

### `app.integrations.monday.create_item(...)`

Create a new item on a Monday.com board. Requires a board ID and item name. Optionally set a group and initial column values.

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `board_id` | integer | yes | Board ID to create the item on. |
| `item_name` | string | yes | Name of the new item. |
| `group_id` | string | no | Group ID to place the item in. Use `get_board` to discover group IDs. |
| `column_values` | table | no | Column values to set, keyed by column ID. Values depend on column type. |

Returns: `id`, `name`, `state`, `board` (table with `id`, `name`), `group` (table with `id`, `title`), `created_at`.

```lua
-- Create a simple item
local result = app.integrations.monday.create_item({
  board_id = 12345678,
  item_name = "New task from integration"
})

if not result.error then
  print("Created item: " .. result.name .. " (ID: " .. result.id .. ")")
end
```

```lua
-- Create an item with group and column values
local result = app.integrations.monday.create_item({
  board_id = 12345678,
  item_name = "Fix production bug",
  group_id = "topics",
  column_values = {
    status = "Working on it",
    priority = "High",
    date4 = "2026-04-10"
  }
})

if not result.error then
  print("Created: " .. result.name .. " in group " .. (result.group and result.group.title or "—"))
end
```

---

## Workspaces

### `app.integrations.monday.list_workspaces(...)`

List Monday.com workspaces the authenticated user has access to. Returns workspace name, kind, description, and subscriber counts.

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `limit` | integer | no | Max workspaces to return. Default: 50. |

Returns: `workspaces` (array), `total`. Each workspace contains: `id`, `name`, `description`, `kind`, `owners_count`, `subscribers_count`, `is_deleted`, `created_at`.

```lua
-- List all workspaces
local result = app.integrations.monday.list_workspaces({})

for _, ws in ipairs(result.workspaces) do
  print(ws.name .. " (" .. ws.kind .. ") — " .. ws.subscribers_count .. " subscribers")
end
```

---

## User

### `app.integrations.monday.get_current_user(...)`

Get the currently authenticated Monday.com user's profile, including ID, name, email, avatar URL, title, location, and timezone.

| Name | Type | Required | Description |
|------|------|----------|-------------|
| *(none)* | | | This tool takes no parameters. Pass an empty table `{}`. |

Returns: `id`, `name`, `email`, `avatar_url`, `title`, `country_code`, `location`, `phone`, `timezone`, `join_date`, `enabled`.

```lua
-- Get the authenticated user's profile
local result = app.integrations.monday.get_current_user({})

print("Logged in as: " .. result.name .. " <" .. result.email .. ">")
print("Title: " .. (result.title or "—"))
print("Timezone: " .. (result.timezone or "—"))
print("User ID: " .. result.id)
```

---

## Pagination

The `list_items` tool supports page-based pagination. The response includes:

| Field | Type | Description |
|-------|------|-------------|
| `page` | integer | Current page number. |
| `limit` | integer | Results per page. |

### Paginating through all items

```lua
local items = {}
local page = 1

repeat
  local result = app.integrations.monday.list_items({
    board_id = 12345678,
    limit = 100,
    page = page
  })

  if result.error then
    print("Error: " .. result.error)
    break
  end

  for _, item in ipairs(result.items) do
    table.insert(items, item)
  end

  page = page + 1
until #result.items < 100

print("Fetched " .. #items .. " items total")
```

---

## Notes

- **Board IDs are integers**: Monday.com uses numeric IDs for boards and items. You can find these in the Monday.com UI URL or via the `list_boards` tool.
- **Column values format**: When setting column values in `create_item`, use the column ID (not the title) as the key. Use `get_board` to discover column IDs and types. The value format depends on the column type (e.g., status columns use label strings, date columns use `"YYYY-MM-DD"` format).
- **GraphQL backend**: All operations use the Monday.com GraphQL API at `https://api.monday.com/v2`.
- **Rate limits**: Monday.com enforces API rate limits based on your plan. If you encounter errors during bulk operations, add delays between calls.
- **Discovery flow**: Call `list_workspaces({})` to find workspace IDs → `list_boards({ workspace_id = ... })` to find board IDs → `get_board({ board_id = ... })` to see columns and groups → `create_item` or `list_items` to work with items.

---

## Multi-Account Usage

If you have multiple Monday.com accounts configured, use account-specific namespaces:

```lua
-- Default account (always works)
app.integrations.monday.function_name({...})

-- Explicit default (portable across setups)
app.integrations.monday.default.function_name({...})

-- Named accounts
app.integrations.monday.work.function_name({...})
app.integrations.monday.personal.function_name({...})
```

All functions are identical across accounts — only the credentials differ.

Metadata-Derived Lua Example

local result = app.integrations.monday.monday_list_boards({
  limit = 1,
  workspace_id = 1
})
print(result)

Functions

monday_list_boards

List Monday.com boards the authenticated user has access to. Optionally filter by workspace. Returns board name, kind, workspace, owner, and item count. Use monday_list_workspaces to discover workspace IDs.

Operation
Read read
Full name
monday.monday_list_boards
ParameterTypeRequiredDescription
limit integer no Max boards to return. Default: 25.
workspace_id integer no Filter boards by workspace ID.

monday_get_board

Get a single Monday.com board by ID. Returns full board details including all columns (with types) and groups. Use monday_list_boards to discover board IDs.

Operation
Read read
Full name
monday.monday_get_board
ParameterTypeRequiredDescription
board_id integer yes Board ID to retrieve.

monday_list_items

List items on a Monday.com board with pagination. Returns item name, state, group, creator, and timestamps. Use monday_list_boards or monday_get_board to discover board IDs.

Operation
Read read
Full name
monday.monday_list_items
ParameterTypeRequiredDescription
board_id integer yes Board ID to list items for.
limit integer no Results per page. Default: 25.
page integer no Page number (1-based). Default: 1.

monday_get_item

Get a single Monday.com item by ID. Returns full item details including all column values, board info, group, and creator.

Operation
Read read
Full name
monday.monday_get_item
ParameterTypeRequiredDescription
item_id integer yes Item ID to retrieve.

monday_create_item

Create a new item on a Monday.com board. Requires a board ID and item name. Optionally set a group and initial column values. Use monday_get_board to discover group IDs and column IDs.

Operation
Write write
Full name
monday.monday_create_item
ParameterTypeRequiredDescription
board_id integer yes Board ID to create the item on.
item_name string yes Name of the new item.
group_id string no Group ID to place the item in.
column_values object no Column values to set, keyed by column ID. Values depend on column type.

monday_list_workspaces

List Monday.com workspaces the authenticated user has access to. Returns workspace name, kind, description, and subscriber counts. Use workspace IDs to filter boards in monday_list_boards.

Operation
Read read
Full name
monday.monday_list_workspaces
ParameterTypeRequiredDescription
limit integer no Max workspaces to return. Default: 50.

monday_get_current_user

Get the currently authenticated Monday.com user's profile, including ID, name, email, avatar URL, title, location, and timezone.

Operation
Read read
Full name
monday.monday_get_current_user
ParameterTypeRequiredDescription
No parameters.