Learn how to read, create, update, and delete items from monday boards using the platform API

Items are core objects in the monday.com platform that hold the actual data within the board. To better illustrate the platform, imagine that each board is a table and an item is a single row in that table. Take one row, fill it with whatever information you'd like, and you now have an item!

🚧

Want to read all items on a board?

The items object allows you to query specific items by their IDs. If you want to read all items on a board, use the items_page object instead!

Queries

Required scope: boards:read

Querying items will return metadata about one or a collection of specific items. This method accepts various arguments and returns an array.

You can only query items at the root, so it can't be nested within another query (like boards). You can return up to 100 items at a time using the ids argument.

query {
  items (ids: [1234567890, 9876543210, 2345678901]) {
    name
  }
}
let query = "query { items (ids: [1234567890, 9876543210, 2345678901]) { name }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to reduce the number of results returned in your items query.

ArgumentDescription
exclude_nonactive BooleanExcludes items that are inactive, deleted, or belong to deleted items. Please note that this argument will only work when used with the ids argument.
ids [ID!]The IDs of the specific items, subitems, or parent items to return. Please note that you can return a maximum of 100 IDs at one time using the limit argument.
limit IntThe number of items returned. The default is 25.
newest_first BooleanLists the most recently created items at the top.
page IntThe page number to return. Starts at 1.

Fields

You can use the following field(s) to specify what information your items query will return. Please note that some fields will have their own arguments.

FieldDescriptionEnum valuesSupported arguments
assets [Asset]The item's assets/files.assets_source AssetsSource
column_ids [String]
board BoardThe board that contains the item.
column_values [ColumnValue]The item's column values.ids [String]
column_values_str String!The item's string-formatted column values.
created_at DateThe item's creation date.
creator UserThe item's creator.
creator_id String!The unique identifier of the item's creator. Returns null if the item was created by default on the board.
email String!The item's email.
group GroupThe item's group.
id ID!The item's unique identifier.
linked_items [Item!]!The item's linked items. linked_board_id ID!
link_to_item_column_id String!
name String!The item's name.
parent_item ItemA subitem's parent item. If used for a parent item, it will return null.
relative_link StringThe item's relative path.
state StateThe item's state. active, all, archived, deleted
subitems [Item]The item's subitems.
subscribers [User]!The item's subscribers.
updated_at DateThe date the item was last updated.
updates [Update]The item's updates.limit Int
page Int
url String!The item's URL.

Mutations

Required scope: boards:write

Create an item

The create_item mutation allows you to create a new item via the API. You can also specify what fields to query back from the new item when you run the mutation.

Item data is stored in columns that hold particular information based on the column type. Each type expects a different set of parameters to update their values. When sending data to a particular column, use a JSON-formatted string. If you're using Javascript, you can use JSON.stringify() to convert a JSON object into a string.

You can also use simple values in this mutation or combine them with regular values. Read more about sending data for each column in our column types reference.

mutation {
  create_item (board_id: 1234567890, group_id: "group_one", item_name: "new item", column_values: "{\"date\":\"2023-05-25\"}") {
    id
  }
}
let query = "mutation { create_item (board_id: 1234567890, group_id: \"Group 1\", item_name: \"new item\", column_values: \"{\\\"date4\\\":\\\"2023-05-25\\\"}\") { id }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to define the new item's characteristics.

ArgumentDescriptionAccepted values
board_id ID!The board's unique identifier.
column_values JSONThe column values of the new item.
create_labels_if_missing BooleanCreates status/dropdown labels if they are missing (requires permission to change the board structure).
group_id StringThe group's unique identifier.
item_name String!The new item's name.
position_relative_method PositionRelativeThe desired position of the new item. You can use this argument in conjunction with relative_to to specify which item you want to create the new item above or below.

- before_at: This enum value creates the new item above the relative_to value. If you don't use the relative_to argument, the new item will be created at the bottom of the first active group (unless you specify a group using group_id).

- after_at: This enum value creates the new item below the relative_to value. If you don't use the relative_to argument, the new item will be created at the top of the first active group (unless you specify a group using group_id).
relative_to IDThe unique identifier of the item you want to create the new one in relation to.

You can also use this argument in conjunction with position_relative_method to specify if you want to create the new item above or below the item in question.

🚧

Changing an item's name

If you'd like to change an existing item's name, you need to use the change_column_value mutation with a JSON string value. Check out this doc for more info!

Duplicate an item

The duplicate_item mutation allows you to duplicate a single item via the API. You can also specify what fields to query back from the duplicated item when you run the mutation.

mutation {
  duplicate_item (board_id: 1234567890, item_id: 9876543210, with_updates: true) {
    id
  }
}
let query = "mutation { duplicate_item (board_id: 1234567890, item_id: 9876543210, with_updates: true) { id }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to specify which item to duplicate.

ArgumentDescription
board_id ID!The board's unique identifier.
item_id IDThe item's unique identifier. Required.
with_updates BooleanDuplicates the item with existing updates.

Move item to group

The move_item_to_group mutation allows you to move an item between groups on the same board via the API. You can also specify what fields to query back from the item when you run the mutation.

mutation {
  move_item_to_group (item_id: 1234567890, group_id: "group_one") {
    id
  }
}
let query = "mutation { move_item_to_group (item_id: 1234567890, group_id: \"Group 1\") { id }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to specify which item to move and to where.

ArgumentDescription
group_id String!The group's unique identifier.
item_id IDThe item's unique identifier.

Move item to board

The move_item_to_board mutation allows you to move an item to a different board via the API. You can also specify what fields to query back from the item when you run the mutation.

mutation {
  move_item_to_board (board_id:1234567890, group_id: "new_group", item_id:9876543210, columns_mapping: [{source:"status", target:"status2"}, {source:"person", target:"person"}, {source:"date", target:"date4"}]) {
    id
  }
}
let query = "mutation { move_item_to_board (board_id: 1234567890, group_id: \"new_group\", item_id: 9876543210, columns_mapping: [{source:\"status\", target:\"status2\"}, {source:\"person\", target:\"person\"}, {source:\"date\", target:\"date4\"}]) { id }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to specify which item to move and to where.

ArgumentDescriptionSupported fields
board_id ID!The unique identifier of the board to move the item to (target board)
group_id ID!The unique identifier of the group to move the item to (target group).
item_id ID!The unique identifier of the item to move.
columns_mapping [ColumnMappingInput!]The object that defines the column mapping between the original and target board. Every column type can be mapped except for formula columns.

When using this argument, you must specify the mapping for all columns. You can select the target as null for any columns you don't want to map, but doing so will lose the column's data.

If you omit this argument, the columns will be mapped based on the best match.
source ID!
target ID
subitems_columns_mapping [ColumnMappingInput!]The object that defines the subitems' column mapping between the original and target board. Every column type can be mapped except for formula columns.

When using this argument, you must specify the mapping for all columns. You can select the target as null for any columns you don't want to map, but doing so will lose the column's data.

If you omit this argument, the columns will be mapped based on the best match.
source ID!
target ID

Archive an item

The archive_item mutation allows you to archive a single item via the API. You can also specify what fields to query back from the archived item when you run the mutation.

mutation {
  archive_item (item_id: 1234567890) {
    id
  }
}
let query = "mutation {archive_item (item_id: 1234567890) { id }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to specify which item to archive.

ArgumentDescription
item_id IDThe item's unique identifier.

Delete an item

The delete_item mutation allows you to delete a single item via the API. You can also specify what fields to query back from the deleted item when you run the mutation.

mutation {
  delete_item (item_id: 1234567890) {
    id
  }
}
let query = "mutation { delete_item (item_id: 1234567890) { id }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to specify which item to delete.

ArgumentDescription
item_id IDThe item's unique identifier.

Clear an item's updates

The clear_item_updates mutation allows you to clear all updates on a specific item, including replies and likes. You can also specify what fields to query back from the item when you run the mutation.

mutation {
  clear_item_updates (item_id: 1234567890) {
    id
  }
}
let query = "mutation { clear_item_updates (item_id: 1234567890) { id }}";

fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));

Arguments

You can use the following argument(s) to specify which item to clear updates from.

ArgumentsDescription
item_id ID!The item's unique identifier.

📘

Join our developer community!

We've created a community specifically for our devs where you can search through previous topics to find solutions, ask new questions, hear about new features and updates, and learn tips and tricks from other devs. Come join in on the fun! 😎