We recently added a new descriptive FIELD_LIMIT_EXCEEDED error to all API versions.

The error occurs when there are to many requests running concurrently. Previously, this returned a non-descriptive Internal Server Error . You can resolve the error by waiting for the amount of time indicated in the error before retrying the call.

{
  "error_message": "Concurrency limit exceeded for the field",
  "error_code": "FIELD_LIMIT_EXCEEDED", 
  "error_data": {
    "retry_in_seconds": 15,
    "entity": "boards"
  },
  "status_code": 429,
  "account_id": 123456
}

In API version 2024-10, we added the errors object to all API errors to comply with GraphQL specifications. Check out the before and after sample errors below!

Before

{
  "error_message": "User unauthorized to perform action",
  "error_code": "UserUnauthorizedException",
  "error_data": {}, 
  "status_code": 403,
  "account_id": 123456
}

After

{
  "errors": [
    {
      "message": "User unauthorized to perform action",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "me"
      ],
      "extensions": {
        "code": "UserUnauthorizedException",
        "error_data": {},
        "status_code": 403
      }
    }
  ],
  "error_message": "User unauthorized to perform action",
  "error_code": "UserUnauthorizedException",
  "error_data": {},
  "status_code": 403,
  "account_id": 123456
}

We recently added a new descriptive JsonParseException error to all API versions.

The error occurs when an issue with JSON syntax error is identified in a query. Previously, this returned a non-descriptive Internal Server Error . You can resolve the error by verifying the validity of the JSON input.

{
  "error_message": "Syntax error in JSON input",
  "error_code": "JsonParseException", 
  "error_data": {
    "json": "{\"columnId..."
  },
  "status_code": 400,
  "account_id": 123456
}

In API version 2024-10, we added two new mutations to enable marketplace app developers to grant and delete discounts through the platform API.

Grant discounts

Using the grant_marketplace_app_discount mutation, you can give discounts through the API.

mutation {
  grant_marketplace_app_discount (
      account_slug: "Test",  
      app_id: 123456,
    	data: {
    		app_plan_ids: ["Basic"],
      	days_valid: 30, 
      	discount: 10, 
      	is_recurring: false, 
      	period: MONTHLY
    }) {
    granted_discount {
        app_id
      	period
      	discount
    }
  }
}

Delete discounts

Using the delete_marketplace_app_discount mutation, you can remove discounts through the API.

mutation {
  delete_marketplace_app_discount (
    account_slug: "Test", 
    app_id: 123456
  ) {
    deleted_discount {
      account_slug
      app_id
    }
  }
}

In API version 2024-10, we added the new marketplace_app_discounts object for marketplace app developers to manage discounts using the platform API. You can query this object to return discount metadata.

query {
  marketplace_app_discounts (app_id: 123456) {
    account_slug
    discount
    valid_until  	
  }
}