Monday.com Integration
Connect your AI agents to Monday.com Work OS
One-Click Connect available! Go to Settings → Integrations → Connect Platform → Monday.com to connect with a single click via OAuth. Tokens refresh automatically.
Step 1: Connect Monday.com
Recommended: Use the one-click OAuth connection. This handles authentication and token refresh automatically.
- 1Go to Settings → Integrations
- 2Click Connect Platform → select Monday.com
- 3Authorize Staffify in the Monday.com popup and you're done!
| Setting | Value |
|---|---|
| Base URL | https://api.monday.com/v2 |
| Auth Type | OAuth 2.0 (automatic) |
| Token Refresh | Automatic |
| API Type | GraphQL (all requests are POST /) |
Step 2: Add Actions with Pre-Built Templates
Click Add Action on your Monday.com connection to browse 36 pre-built templates across 10 categories. Select a template and it auto-fills the GraphQL query, parameters, and settings.
36 pre-built templates! All templates use Monday.com's GraphQL API. Every request is POST / with a {"query": "..."} body. The templates handle this automatically.
Boards (4)
Items (6)
Subitems (3)
Groups (4)
Updates / Comments (3)
Columns (3)
Users (3)
Workspaces (3)
Tags (2)
Direct Lookups (5)
Tip: You can add the same template multiple times with different configurations. For example, add List Board Items twice, once for your “Sales Pipeline” board and once for your “Support Tickets” board.
What Each Action Does
Detailed documentation for every template category. All actions use POST / with a GraphQL query body.
Boards
Boards are the main containers in Monday.com. They hold items (rows), groups, and columns.
List Boards
Retrieve all boards in the account with their names, states, and types.
| Setting | Value |
|---|---|
| Action Name | list_boards |
| Method | POST |
| Endpoint | / |
| Parameters | limit (optional, default 25) |
GraphQL Query:
{
"query": "query { boards(limit: 25) { id name state board_kind description } }"
}Example Response:
{
"data": {
"boards": [
{
"id": "1234567890",
"name": "Sales Pipeline",
"state": "active",
"board_kind": "public",
"description": "Track all sales opportunities"
},
{
"id": "1234567891",
"name": "Support Tickets",
"state": "active",
"board_kind": "public",
"description": ""
}
]
}
}Get Board Details
Fetch a specific board with its columns and groups. Use this to discover column IDs before creating or updating items.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board ID to look up |
{
"query": "query { boards(ids: [1234567890]) { id name columns { id title type } groups { id title color } } }"
}Create Board
Create a new board in Monday.com. Returns the new board's ID.
| Parameter | Required | Description |
|---|---|---|
| board_name | Yes | Name for the new board |
| board_kind | No | public, private, or share (default: public) |
{
"query": "mutation { create_board(board_name: "New Sales Pipeline", board_kind: public) { id name } }"
}Archive Board
Archive a board. Archived boards can be restored later from Monday.com's settings.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board ID to archive |
{
"query": "mutation { archive_board(board_id: 1234567890) { id state } }"
}Destructive: This action is marked as destructive. The AI will always confirm with the customer before archiving.
Items
Items are the rows in a board. Each item has column values that store data (status, text, numbers, dates, etc.).
List Board Items
List all items in a specific board with their column values.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to list items from |
| limit | No | Max items to return (default 25) |
{
"query": "query { boards(ids: [1234567890]) { items_page(limit: 25) { items { id name column_values { id text value } } } } }"
}Example Response:
{
"data": {
"boards": [{
"items_page": {
"items": [
{
"id": "9876543210",
"name": "Acme Corp Deal",
"column_values": [
{ "id": "status", "text": "Working on it", "value": "{\"index\":1}" },
{ "id": "person", "text": "John Smith", "value": "{\"personsAndTeams\":[{\"id\":12345}]}" },
{ "id": "date4", "text": "2026-03-15", "value": "{\"date\":\"2026-03-15\"}" }
]
}
]
}
}]
}
}Search Items
Search for items in a board by column value. Great for finding records by name, email, status, or any column.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to search in |
| column_id | No | Column to search (default: "name") |
| search_value | Yes | The value to search for |
{
"query": "query { boards(ids: [1234567890]) { items_page_by_column_values(columns: [{column_id: "name", column_values: ["Acme"]}]) { items { id name column_values { id text } } } } }"
}Tip: The column_id defaults to "name" (the item name column). Use Get Board Details first to discover other column IDs you can search by (e.g., email, status, phone).
Create Item
Add a new item (row) to a board. Optionally place it in a specific group and set column values.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to create the item in |
| item_name | Yes | Name for the new item |
| group_id | No | Group to place the item in (uses default group if omitted) |
| column_values | No | JSON string of column values to set |
{
"query": "mutation { create_item(board_id: 1234567890, item_name: "New Support Ticket", group_id: "topics", column_values: "{\"status\":\"Working on it\",\"text0\":\"High priority request\"}") { id name } }"
}Example Response:
{
"data": {
"create_item": {
"id": "9876543211",
"name": "New Support Ticket"
}
}
}Column values format: The column_values parameter is a JSON string (escaped inside the GraphQL string). See the Column Values Reference section below for how to format different column types.
Update Item
Update one or more column values on an existing item. Only the columns you specify are changed.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board containing the item |
| item_id | Yes | The item to update |
| column_values | Yes | JSON string of column values to change |
{
"query": "mutation { change_multiple_column_values(board_id: 1234567890, item_id: 9876543210, column_values: "{\"status\":\"Done\",\"date4\":\"2026-03-20\"}") { id name } }"
}Delete Item
Permanently delete an item from a board. This cannot be undone.
| Parameter | Required | Description |
|---|---|---|
| item_id | Yes | The item ID to delete |
{
"query": "mutation { delete_item(item_id: 9876543210) { id } }"
}Permanent: Unlike Monday.com's UI (which moves to trash), the API permanently deletes items. The AI always confirms before executing.
Subitems
Subitems are nested items under a parent item. Useful for breaking work into smaller tasks.
List Subitems
List all subitems of a parent item with their column values.
| Parameter | Required | Description |
|---|---|---|
| item_id | Yes | The parent item ID |
{
"query": "query { items(ids: [9876543210]) { subitems { id name column_values { id text } } } }"
}Create Subitem
Add a new subitem under a parent item.
| Parameter | Required | Description |
|---|---|---|
| parent_item_id | Yes | The parent item to add the subitem to |
| item_name | Yes | Name for the new subitem |
| column_values | No | JSON string of column values |
{
"query": "mutation { create_subitem(parent_item_id: 9876543210, item_name: "Follow up with client", column_values: "{\"status\":\"Working on it\"}") { id name } }"
}Delete Subitem
Permanently delete a subitem.
| Parameter | Required | Description |
|---|---|---|
| item_id | Yes | The subitem ID to delete |
{
"query": "mutation { delete_item(item_id: 9876543211) { id } }"
}Groups
Groups organize items within a board into sections (e.g., “New Leads”, “In Progress”, “Closed”).
List Groups
List all groups in a board.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to list groups for |
{
"query": "query { boards(ids: [1234567890]) { groups { id title color archived deleted } } }"
}Create Group
Add a new group to a board.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to add the group to |
| group_name | Yes | Name for the new group |
{
"query": "mutation { create_group(board_id: 1234567890, group_name: "Hot Leads") { id title } }"
}Move Item to Group
Move an item from one group to another within the same board.
| Parameter | Required | Description |
|---|---|---|
| item_id | Yes | The item to move |
| group_id | Yes | The destination group ID |
{
"query": "mutation { move_item_to_group(item_id: 9876543210, group_id: "hot_leads") { id name } }"
}Archive Group
Archive a group and all its items. Can be restored from Monday.com.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board containing the group |
| group_id | Yes | The group to archive |
{
"query": "mutation { archive_group(board_id: 1234567890, group_id: "old_leads") { id archived } }"
}Updates (Comments)
Updates are comments/notes attached to items. They support HTML formatting.
List Item Updates
Retrieve the latest 25 comments on an item.
| Parameter | Required | Description |
|---|---|---|
| item_id | Yes | The item to get updates for |
{
"query": "query { items(ids: [9876543210]) { updates(limit: 25) { id body text_body creator { id name } created_at } } }"
}Add Comment
Post a new comment on an item. Supports HTML in the body.
| Parameter | Required | Description |
|---|---|---|
| item_id | Yes | The item to comment on |
| body | Yes | Comment text (supports HTML tags like <b>, <p>, <ul>) |
{
"query": "mutation { create_update(item_id: 9876543210, body: "Called the customer. They confirmed the order and will pay by Friday.") { id } }"
}Delete Comment
Delete a comment by its update ID.
| Parameter | Required | Description |
|---|---|---|
| update_id | Yes | The update/comment ID to delete |
{
"query": "mutation { delete_update(id: 1122334455) { id } }"
}Columns
Columns define the data fields on a board (status, text, numbers, dates, people, etc.).
List Board Columns
Discover all columns on a board with their IDs, titles, and types. Essential for knowing which column IDs to use in create/update operations.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to list columns for |
{
"query": "query { boards(ids: [1234567890]) { columns { id title type settings_str } } }"
}Example Response:
{
"data": {
"boards": [{
"columns": [
{ "id": "name", "title": "Name", "type": "name" },
{ "id": "status", "title": "Status", "type": "status" },
{ "id": "person", "title": "Owner", "type": "people" },
{ "id": "date4", "title": "Due Date", "type": "date" },
{ "id": "email", "title": "Email", "type": "email" },
{ "id": "phone", "title": "Phone", "type": "phone" },
{ "id": "text0", "title": "Notes", "type": "text" },
{ "id": "numbers", "title": "Amount", "type": "numbers" }
]
}]
}
}Create Column
Add a new column to a board.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to add the column to |
| title | Yes | Display name for the column |
| column_type | Yes | Column type (see list below) |
Available column types:
text · numbers · status · date · people · email · phone · link · long_text · dropdown · checkbox · rating · timeline · tags
{
"query": "mutation { create_column(board_id: 1234567890, title: "Priority", column_type: status) { id title type } }"
}Change Column Value
Update a single column value on an item. Use this for quick single-field updates.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board containing the item |
| item_id | Yes | The item to update |
| column_id | Yes | The column ID to change |
| value | Yes | New value (JSON string format) |
{
"query": "mutation { change_column_value(board_id: 1234567890, item_id: 9876543210, column_id: "status", value: "{\"label\":\"Done\"}") { id name } }"
}Users
Retrieve user information from the Monday.com account.
List Users
Retrieve all users in the Monday.com account with their details.
{
"query": "query { users { id name email title phone mobile_phone is_guest enabled account { name } } }"
}Example Response:
{
"data": {
"users": [
{
"id": "12345",
"name": "Sarah Johnson",
"email": "[email protected]",
"title": "Account Manager",
"phone": "+1 555-0123",
"mobile_phone": "+1 555-0124",
"is_guest": false,
"enabled": true,
"account": { "name": "Acme Corp" }
}
]
}
}Get Current User
Get the currently authenticated user's info and account details.
{
"query": "query { me { id name email account { name id } } }"
}Get User by ID
Look up a specific user by their ID. Use this after a List Users to get detailed information about a team member.
| Parameter | Required | Description |
|---|---|---|
| user_id | Yes | The user ID to look up |
{
"query": "query { users(ids: [12345]) { id name email title phone mobile_phone is_guest enabled created_at } }"
}Workspaces
Workspaces are top-level containers that hold boards. They help organize boards by team or department.
List Workspaces
List all workspaces in the account.
{
"query": "query { workspaces { id name kind description } }"
}Get Workspace Details
Get details for a specific workspace including its settings.
| Parameter | Required | Description |
|---|---|---|
| workspace_id | Yes | The workspace ID to look up |
{
"query": "query { workspaces(ids: [54321]) { id name kind description settings { icon { color image } } } }"
}Create Workspace
Create a new workspace to organize boards.
| Parameter | Required | Description |
|---|---|---|
| name | Yes | Name for the new workspace |
| kind | No | open or closed (default: open) |
| description | No | Workspace description |
{
"query": "mutation { create_workspace(name: "Sales Team", kind: open, description: "All sales boards and dashboards") { id name } }"
}Tags
Tags help categorize and label items across boards.
List Tags
Retrieve all tags in the account.
{
"query": "query { tags { id name color } }"
}Create Tag
Create a new tag or get an existing one if the name already exists.
| Parameter | Required | Description |
|---|---|---|
| tag_name | Yes | Name for the tag |
{
"query": "mutation { create_or_get_tag(tag_name: "VIP") { id name } }"
}Direct Lookups
Look up any record by its ID when you already have it from a previous action.
Get Board by ID
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board ID to look up |
{
"query": "query { boards(ids: [1234567890]) { id name state board_kind description columns { id title type } groups { id title } } }"
}Get Item by ID
| Parameter | Required | Description |
|---|---|---|
| item_id | Yes | The item ID to look up |
{
"query": "query { items(ids: [9876543210]) { id name column_values { id text value } subitems { id name } updates(limit: 5) { id text_body created_at } } }"
}Get Account Info
Get information about the Monday.com account including plan details.
{
"query": "query { me { account { id name plan { max_users period tier } } } }"
}Get Board Activity
View recent activity on a board, including who changed what and when.
| Parameter | Required | Description |
|---|---|---|
| board_id | Yes | The board to get activity for |
| limit | No | Max entries (default 25) |
{
"query": "query { boards(ids: [1234567890]) { activity_logs(limit: 25) { id event data entity user_id created_at } } }"
}Column Values Reference
When creating or updating items, column values are passed as a JSON string. Here's how to format each column type:
| Column Type | JSON Format | Example |
|---|---|---|
| Text | "column_id": "value" | "text0": "Hello world" |
| Numbers | "column_id": "123" | "numbers": "5000" |
| Status | "column_id": "Label" | "status": "Done" |
| Date | "column_id": "YYYY-MM-DD" | "date4": "2026-03-15" |
| "column_id": {"email": "...", "text": "..."} | "email": {"email": "[email protected]", "text": "[email protected]"} | |
| Phone | "column_id": {"phone": "...", "countryShortName": "..."} | "phone": {"phone": "+15551234", "countryShortName": "US"} |
| People | "column_id": {"personsAndTeams": [...]} | "person": {"personsAndTeams": [{"id": 12345, "kind": "person"}]} |
| Checkbox | "column_id": {"checked": "true"} | "checkbox": {"checked": "true"} |
| Link | "column_id": {"url": "...", "text": "..."} | "link": {"url": "https://...", "text": "Click here"} |
| Long Text | "column_id": {"text": "..."} | "long_text": {"text": "Long description here"} |
| Rating | "column_id": {"rating": 5} | "rating": {"rating": 5} |
| Dropdown | "column_id": {"labels": [...]} | "dropdown": {"labels": ["Option A"]} |
| Timeline | "column_id": {"from": "YYYY-MM-DD", "to": "YYYY-MM-DD"} | "timeline": {"from": "2026-03-01", "to": "2026-03-31"} |
| Tags | "column_id": {"tag_ids": [...]} | "tags": {"tag_ids": [12345, 67890]} |
Important: Column values are double-escaped inside the GraphQL mutation string. For example: column_values: "{\"status\":\"Done\"}". The templates handle this escaping automatically.
Step 3: Enable on Your AI Agent
- 1Go to AI Agents → select your employee → Edit
- 2Scroll to Integrations section
- 3Toggle on Monday.com and select which actions the employee can use
- 4Save. The AI will now use Monday.com during calls and widget conversations when relevant
Example Conversation
Here's how your AI agent uses Monday.com during a real customer interaction:
Caller: “Hi, I want to check the status of my project. The name is Website Redesign.”
AI Agent: “Let me look that up for you.”
→ Executes: search_items with search_value=“Website Redesign”
AI Agent: “I found your project. The Website Redesign is currently marked as ‘Working on it’ with a due date of March 15th. It has 3 subitems. Would you like more details?”
Caller: “Yes, can you show me the subtasks?”
→ Executes: list_subitems for the found item
AI Agent: “The subtasks are: Design mockups is Done, Content writing is Working on it, and Development is Stuck. Would you like me to update any of them?”
Caller: “Yes, please mark Development as Working on it and add a comment that I approved the design.”
→ Executes: update_item to change status
→ Executes: create_update with body=“Design approved by customer. Moving to development.”
AI Agent: “Done! I've updated the Development subtask to Working on it and added your comment. Is there anything else I can help with?”
Monday.com-Specific Notes
GraphQL only: Monday.com uses GraphQL instead of REST. All API calls are POST / with a {"query": "..."} body. The templates handle this automatically, so you never need to write GraphQL yourself.
Rate limits: Monday.com has strict rate limits based on query complexity (not just request count). The platform automatically limits concurrency to 2 simultaneous requests to avoid hitting these limits.
Board IDs are required: Most operations need a board_id. Use List Boards first, or find the board ID in the URL: monday.com/boards/1234567890.
Column IDs: Column IDs are auto-generated strings like status, text0, date4, numbers. Use List Board Columns to discover the correct IDs for your board before updating items.
IDs are always internal: The AI never reveals board IDs, item IDs, or user IDs to customers. It uses them internally to make API calls but presents only human-readable names and values.
Available Variables
Use these variables in your custom action GraphQL queries. They are automatically replaced at runtime.
| Variable | Description | Example |
|---|---|---|
| {{caller_phone}} | Phone number of the current customer | +15551234567 |
| {{employee_id}} | ID of the AI agent handling the call | emp_abc123 |
| {{call_id}} | Unique ID of the current call session | call_xyz789 |
| {{action.field}} | Value from a previous action result | {{search_items.id}} |
Error Handling
Common Monday.com API errors:
| Error | Cause | Solution |
|---|---|---|
| ComplexityBudgetExhausted | Query is too complex or too many requests | Reduce limit parameter or wait before retrying |
| InvalidBoardIdException | Board ID does not exist | Use List Boards to find correct ID |
| InvalidColumnIdException | Column ID is wrong | Use List Board Columns to discover correct column IDs |
| ItemsLimitationException | Board has hit item limit | Archive old items or upgrade Monday.com plan |
| UserUnauthorizedException | Token expired or lacks permissions | Reconnect the integration via OAuth |
| ResourceNotFoundException | Item/user/board not found | Verify the ID exists before operating on it |
Alternative: Manual Setup (API Token)
Only use this method if you cannot use OAuth. API tokens have full account access and don't expire, but they also don't support automatic refresh.
- 1Click your Profile Picture → Developers
- 2Go to Developer → My Access Tokens
- 3Click Show to reveal your API token and copy it
- 4In Staffify, create a manual connection with the settings below
| Field | Value |
|---|---|
| Connection Name | Monday.com |
| Base URL | https://api.monday.com/v2 |
| Auth Type | Bearer Token |
| Token | Your Monday.com API token |
| Token Expires | Disabled (doesn't expire) |
Monday.com API Reference
| Category | Actions | Key Operations |
|---|---|---|
| Boards | 4 templates | List, Get Details, Create, Archive |
| Items | 6 templates | List, Get, Search, Create, Update, Delete |
| Subitems | 3 templates | List, Create, Delete |
| Groups | 4 templates | List, Create, Move Item, Archive |
| Updates | 3 templates | List Comments, Add Comment, Delete Comment |
| Columns | 3 templates | List, Create, Change Value |
| Users | 3 templates | List, Get Current, Get by ID |
| Workspaces | 3 templates | List, Get Details, Create |
| Tags | 2 templates | List, Create |
| Direct Lookups | 5 templates | Get Board/Item/User by ID, Account Info, Activity Log |
Full API documentation: developer.monday.com/api-reference
Last updated: February 2026