API version: 2025-04

You can now update one or multiple users' attributes through the update_multiple_users mutation.

mutation {
  update_multiple_users (
    user_updates: [
      { 
        user_id: 12345678, 
        user_attribute_updates: {birthday: "1985-06-01", email: "[email protected]"}
      },
      { 
        user_id: 87654321, 
        user_attribute_updates: {birthday: "1975-01-20", email: "[email protected]"}
      }
    ]
  ) {
    updated_users {
      name
      birthday
      email
      id
    }
    errors {
      message
      code
      user_id
    }
  }
}
API version: 2025-04

Variables can now only be sent as a JSON object instead of a JSON string. Queries using JSON string variables will fail. This update impacts all users and queries where the variables were previously sent as a string.

Check out the example below of the same query before and after this change:

{
  "query": "query GetBoardItems($boardId: [ID!]) { boards(ids: $boardId) { items_page(limit: 1) { cursor items { id subitems { id name column_values { column { title } text ... on MirrorValue { display_value } ... on BoardRelationValue { linked_item_ids linked_items { name } } } } } } } }",
  "variables": {
    "boardId": 7670657643
  }
}
{
  "query": "query GetBoardItems($boardId: [ID!]) { boards(ids: $boardId) { items_page(limit: 1) { cursor items { id subitems { id name column_values { column { title } text ... on MirrorValue { display_value } ... on BoardRelationValue { linked_item_ids linked_items { name } } } } } } } }",
  "variables": "{\"boardId\":7670657643}"
}
API version: 2024-10 and later

The create_webhook mutation now returns InvalidArgumentException errors when:

  • the board ID is not found
  • a subitem board ID is passed

Check out the sample error responses below:

{
  "data": {
    "create_webhook": null
  },
  "errors": [
    {
      "message": "Board not found",
      "locations": [
        {
          "line": 1,
          "column": 10
        }
      ],
      "path": [
        "create_webhook"
      ],
      "extensions": {
        "code": "InvalidArgumentException",
        "status_code": 200,
        "error_data": {
          "board_id": 1186075578
        }
      }
    }
  ]
}
{
  "data": {
    "create_webhook": null
  },
  "errors": [
    {
      "message": "Creating webhook on subitems board isn't allowed",
      "locations": [
        {
          "line": 1,
          "column": 10
        }
      ],
      "path": [
        "create_webhook"
      ],
      "extensions": {
        "code": "InvalidArgumentException",
        "status_code": 200,
        "error_data": {
          "board_id": 118607557
        }
      }
    }
  ]
}
API version: 2025-04

The new end_date field on the app subscription details object allows you to query the date an inactive subscription ended. It returns null for any subscriptions with an active status.

query {
  app_subscriptions (app_id: 1234567890) {
    cursor
    total_count 
    subscriptions {
      account_id
      monthly_price
      currency
      status
      end_date
    }
  }
}

To improve error consistency, we've released a bug fix that impacts the error response format for complexity budget exhausted errors. This fix applies to versions 2025-01 and later.

Now, errors are returned in the following format when the complexity budget is exhausted:

{
    "errors": [
        {
            "message": "Complexity budget exhausted",
            "extensions": {
                "code": "COMPLEXITY_BUDGET_EXHAUSTED",
                "complexity": 6182,
                "complexity_budget_left": 100,
                "complexity_budget_limit": 5000000,
                "retry_in_seconds": 60,
                "status_code": 429
            }
        }
    ]
}

In API versions 2025-04 and later, you can create page break blocks using the create_doc_block mutation.

mutation {
  create_doc_block (type: page_break, doc_id: 1234567, after_block_id: "a3f6b7c9-ee2f-5b10-8921-cc47e7d745d3", content: "{\"alignment\":\"left\",\"direction\":\"ltr\"}") {
    id
  }
}

In API versions 2025-01 and later, the updates query will return a maximum of 100 updates per page. To retrieve all updates, you'll need to paginate through the subsequent pages.

For example, the following query will return the first page of 100 updates. You can modify the page argument to return additional pages.

query {
  updates (page: 1) {
    id
    text_body
  }
}