We have made a handful of improvements to our rate limits to help maintain a high-quality API and support optimal performance. Some of these updates include:

  1. Standardized error codes: Rate limit errors will now return a 429 HTTP error code to help standardize responses and simplify error handling.
  2. Retry-After header: Errors will now include the Retry-After header to indicate how long you need to wait before making another request.
  3. New rate limits: We've introduced new limits, including per-minute request limits and a concurrency limit. These changes help reduce the frequency of complexity limits, giving you more control over your API usage and providing a smoother developer experience.
  4. Daily limits: Daily request limits will be enforced for basic and standard accounts starting next week. Limits for pro and enterprise accounts will be gradually rolled out next year.

For more information, check out our rate limits documentation. Questions or comments? Add them here!

In API versions 2025-01 and later, you can remove owners from a team through the API using the new remove_team_owners mutation!

mutation {
  remove_team_owners (user_ids: [654321, 123456], team_id: 24681012) {
    errors {
      message
      code
      user_id
    }
    team {
      owners {
        id
      }
    }
  }
}

In API versions 2025-01 and later, you can owners to a team through the API using the new assign_team_owners mutation!

mutation {
  assign_team_owners (user_ids: [654321, 123456], team_id: 24681012) {
    errors {
      message
      code
      user_id
    }
    team {
      owners {
        id
      }
    }
  }
}

In API versions 2025-01 and later, you can update a user's role through the API using the new update_users_role mutation!

mutation {
  update_users_role (user_ids: [12345, 54321], new_role: ADMIN) {
    updated_users {
      name
      is_admin
    }
    errors {
      user_id
      code
      message
    }
  }
} 

In API versions 2025-01 and later, you can deactivate users through the API using the new deactivate_users mutation!

mutation {
  deactivate_users (user_ids: [54321, 12345]) {
    deactivated_users {
     id
     name
    }
    errors {
      message
      code
      user_id
    }
  }
}

In API versions 2025-01 and later, you can read the formula column using the display_value field. This field returns the content of the formula column as a string.

This feature is in an early release phase and has the following limitations:

  • Formulas that use mirror columns are not supported.
  • You can retrieve up to 10,000 formula values per minute.
  • You can query up to five formula columns in one request.

As we do additional testing and development, these limitations will gradually be reduced or removed.

query {
  boards(ids: [1234567890]){
    items_page(limit:2){
      items{
        id
        column_values {
          ...on FormulaValue{
            display_value
            id
            type
          }
        }
      }
    }
  }
}

We recently fixed a bug that caused updates to be returned in chronological order (oldest first) instead of reverse chronological order (newest first) when queried through items. This bug impacted API versions 2024-10 and later.

The fix was deployed, and updates should now be returned in reverse chronological order.

query {
  items (ids: 123456890) {
    updates {
      id
      created_at
    }
  }
}

In version 2025-01, we added two new fields on updates queries:

  • edited_at: Returns the date the update's body was last edited
  • viewers: Returns data about the update's viewers
query {
  updates {
    body
    edited_at
    viewers {
      user_id
      medium
      user {
        name
      }
    }
  }
}
let query = "query { updates { body edited_at viewers { user_id medium user { 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)));