Monday.com node reference - all 71 operations, the credential it needs, and a worked example.
monday.com GraphQL API (Project management). 71 operations: items, subitems and column values; columns, boards and groups; updates and replies; workspaces and folders; users, teams and account; tags, notifications and docs; assets, board activity logs and webhooks.
Credential: monday.com API token - see Credentials.
Each operation below lists the scope it needs. Scopes are carried automatically. Pipory's monday.com credential is a PERSONAL API TOKEN (Avatar -> Administration -> API in monday.com), and monday's own authentication reference says personal tokens have ALL permission scopes — so there is no consent screen, no checkbox, and no narrower token to mint. What a personal token actually carries is the full UI permissions of the USER who created it, which is why a refusal here is never a missing scope: UserUnauthorizedException means that user cannot do this in monday.com's own interface either, and the fix is their board, workspace or admin access rather than anything in Pipory. The scope named below is what an OAuth app would have to request, and it doubles as an honest statement of which plane each operation touches — useful because monday refuses without naming what was refused. Three things this catches people out on. First, folders live under workspaces:read / workspaces:write; there is no folders:* scope, and likewise no tags:write — creating a tag is a boards:write action. Second, monday answers application-level failures with HTTP 200 and an errors array, so a permission problem does not arrive as a 403 at all; the real status is in errors[].extensions.status_code. Third, no scope fixes a PLAN gate or an API-VERSION gate — this node pins API-Version: 2026-07, and monday retires a version roughly six months after it stops being Current, which surfaces as InvalidVersionException rather than as a permission error. If a run fails with a permission error, the node names the missing scope in the error - grant it and re-run; you do not need to rebuild the workflow.
| Operation | What it does | Scope |
|---|
createItem | Create item | boards:write |
getItems | Get items by ID | boards:read |
queryItems | Query items by column value | boards:read |
queryItemsByColumnValues | Find items by column values | boards:read |
getNextItemsPage | Get next page of items | boards:read |
duplicateItem | Duplicate item | boards:write |
moveItemToGroup | Move item to group | boards:write |
moveItemToBoard | Move item to board | boards:write |
changeItemPosition | Reposition item | boards:write |
archiveItem | Archive item | boards:write |
deleteItem | Delete item | boards:write |
clearItemUpdates | Clear all updates on an item | boards:write and updates:write |
| Operation | What it does | Scope |
|---|
createSubitem | Create subitem | boards:write |
getSubitems | Get an item's subitems | boards:read |
| Operation | What it does | Scope |
|---|
updateColumn | Update column (simple value) | boards:write |
updateColumnJson | Update column (JSON value) | boards:write |
updateMultipleColumns | Update multiple columns | boards:write |
| Operation | What it does | Scope |
|---|
getColumns | Get board columns | boards:read |
createColumn | Create column | boards:write |
changeColumnTitle | Rename column | boards:write |
changeColumnMetadata | Change column title or description | boards:write |
deleteColumn | Delete column | boards:write |
| Operation | What it does | Scope |
|---|
getBoards | Get boards | boards:read |
createBoard | Create board | boards:write |
duplicateBoard | Duplicate board | boards:write |
updateBoard | Update board attribute | boards:write |
archiveBoard | Archive board | boards:write |
deleteBoard | Delete board | boards:write |
| Operation | What it does | Scope |
|---|
getGroups | Get board groups | boards:read |
createGroup | Create group | boards:write |
updateGroup | Update group attribute | boards:write |
duplicateGroup | Duplicate group | boards:write |
archiveGroup | Archive group | boards:write |
deleteGroup | Delete group | boards:write |
| Operation | What it does | Scope |
|---|
getUpdates | Get updates | updates:read |
createUpdate | Post update or reply | updates:write |
editUpdate | Edit update | updates:write |
deleteUpdate | Delete update | updates:write |
likeUpdate | Like update | updates:write |
unlikeUpdate | Unlike update | updates:write |
pinUpdate | Pin update to top | updates:write |
unpinUpdate | Unpin update from top | updates:write |
| Operation | What it does | Scope |
|---|
getWorkspaces | Get workspaces | workspaces:read |
createWorkspace | Create workspace | workspaces:write |
updateWorkspace | Update workspace | workspaces:write |
deleteWorkspace | Delete workspace | workspaces:write |
addUsersToWorkspace | Add users to workspace | workspaces:write |
deleteUsersFromWorkspace | Remove users from workspace | workspaces:write |
getFolders | Get folders | workspaces:read |
createFolder | Create folder | workspaces:write |
updateFolder | Update folder | workspaces:write |
deleteFolder | Delete folder | workspaces:write |
| Operation | What it does | Scope |
|---|
getMe | Get the token's own user | me:read |
getUsers | Get users | users:read |
getTeams | Get teams | teams:read |
getAccount | Get account | account:read |
| Operation | What it does | Scope |
|---|
getTags | Get tags | tags:read |
createOrGetTag | Create or get tag | boards:write |
createNotification | Send notification | notifications:write |
| Operation | What it does | Scope |
|---|
getDocs | Get docs | docs:read |
createDoc | Create doc | docs:write |
addContentToDocFromMarkdown | Append markdown to a doc | docs:write |
updateDocName | Rename doc | docs:write |
duplicateDoc | Duplicate doc | docs:write |
deleteDoc | Delete doc | docs:write |
| Operation | What it does | Scope |
|---|
getAssets | Get assets by ID | assets:read |
getActivityLogs | Get board activity log | boards:read |
getWebhooks | List board webhooks | webhooks:read |
createWebhook | Create webhook | webhooks:write |
deleteWebhook | Delete webhook | webhooks:write |
getComplexity | Check remaining complexity budget | (no scope of its own — reports the calling token's budget) |
Set a status column, which the simple write path cannot do
This is the operation the 6-operation node could not reach, and it is what most monday automations are actually for. monday has two single-column write paths and they are not interchangeable: change_simple_column_value takes a plain scalar, so pointing it at a status column writes the literal text and the board still shows the old label. change_column_value takes JSON, and it is the only path that reaches status, dropdown, date, people, timeline and board-relation columns — and the only way to clear a files column, via {"clear_all": true}.
Set Operation to updateColumnJson, then fill in:
| Field | Value | Notes |
|---|
boardId | {{ vars.mondayBoardId }} | The numeric ID from the board's URL |
itemId | {{ trigger.monday.itemId }} | monday types this argument as nullable but treats it as required, so GraphQL will not catch a missing one — the node checks it instead |
columnId | status | The column's ID, not its title. Read them with Get board columns |
value | {"label": "Done"} | The shape follows the column type: {"label": ...} for status, {"date": "2026-07-28"} for date, {"personsAndTeams": [...]} for people |
createLabelsIfMissing | true | Creates the label instead of refusing the write when the board has no Done yet. Needs board-owner permission |
Sets {{updated.item}} plus {{updated.id}} and {{updated.name}}. monday answers application-level failures with HTTP 200 and an errors array rather than an error status, so a wrong column ID or a bad value shape surfaces as a failed run with monday's own ColumnValueException text — not as a silent success, which is what a status-code-only client would report.