NAV

Introduction

Bramble provides an API which makes it easy for developers to integrate external systems with our platform.

Our API is designed to handle the data integration needs for your business or application while making the integration process as painless as possible.

Through the API you can you seamlessly synchronize your key workflow events with Bramble check-ins, inventory volumes, quality scores and much more.

We designed the Bramble API around REST principles influenced by the JSON API specification.

This version of our API reference is auto-generated from an Open API specification.

API Endpoint

All API calls must be made to https://api.SUBDOMAIN.brmbl.io/v1.

JSON-only

All responses will be in JSON. Input data passed through the request body can be form-encoded or JSON-encoded. If using a JSON body, please specify the Content-Type header as application/json.

In the API dates are represented as ISO8601. Each entity like entries or groups has a unique integer ID.

Pagination

The Bramble API supports two ways to paginate collections. The most common way to paginate is through offset-based pagination which is often used where the list of items is of a fixed, predetermined length.

In most cases we will paginate requests returning more than 100 results. You can control pagination with the page parameter (object). Pages start at 1 and the first page will be returned if no page is specified.

curl https://api.YOURDOMAIN.brmbl.io/v1/groups?page[number]=3&page[size]=10 \
-H "authorization: Bearer ACCESS_TOKEN"

Most endpoints will return meta.pagination information in the response (see the example on the right).

  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 25,
      "total_entries": 1,
      "total_pages": 1
    }
  }

In some cases an API endpoint supports marker-based pagination, either as an alternative to offset-based pagination or as a full replacement. Marker-based pagination is often used in cases where the length of the total set of items is either changing frequently, or where the total length might not be known upfront.

Sorting

Where an API returns a collection of items it often supports sorting of API responses.

Use the sort query parameters to sort the collection. Use a hyphen prefix to sort in

Not all API endpoints that return collections have support for sorting. Especially endpoints that use marker-based pagination often lack support for sorting the results.

Both the field and the direction to sort on is defined by the sort query parameter. Check the API endpoint's documentation for the possible options for this value.

curl https://api.YOURDOMAIN.brmbl.io/v1/users/?sort=full_name,-inserted_at \
-H "authorization: Bearer ACCESS_TOKEN"

Working with Dates

When working with dates, the Bramble API endpoints expect the following:

Dates in ISO 8601 format (YYYY-MM-DD). For example, date_happened in the TaskEvent type.

Timestamps (date and time) in RFC 3339 format. For example, a UTC time 2022-01-15T00:00:00Z.

An offset from UTC time indicates a time zone, such as 2013-01-15T00:00:00-08:00 (8 hours behind UTC time).

Clients must account for daylight savings time when providing offset dates.

Versioning

We follow the Global URL versioning scheme. This means that major changes to our API will be versioned in order to maintain backwards compatibility with existing integrations.

In order to notify consumers of upcoming upgrades, deprecated operations will be annotated using the OpenAPI spec

Scoped API keys

API keys can be issued with full access or with a restricted set of scopes that limit which resources the key may read or modify. Scopes are fixed when the key is created — to change them, the key must be revoked and a new one issued.

A scope is a resource_group:permission pair:

A full-access key holds the single scope all:all. A scoped key holds one or more explicit scopes, e.g. checkins:read and inventory:all.

Each endpoint belongs to exactly one resource group. A request is authorized when the key holds all:all, a matching <group>:all, or a matching <group>:<permission> for the request's HTTP method. Requests that do not satisfy the key's scopes are rejected with 403 Forbidden and an "Insufficient scope" error.

Getting Help or Contributing

We've made this document open source. Please report any issues or suggestions in the API doc issues. Any pull requests to improve this document are welcome too! If you need help using the API or need to discuss anything sensitive please message us at support@brmbl.io.

Errors

Each API call returns an HTTP status code that reflects the nature of the response. We have done our best to follow the HTTP status code conventions.

Any request that did not succeed will return a 4xx or 5xx error. The 4xx range means there was a problem with the request, like a missing parameter. The 5xx range means that something went wrong on our end.

Codes

The Bramble API returns the following HTTP status codes:

Code Description
200 OK Request succeeded
201 Created A resource was created
204 No Content Request succeeded but there is no response body
400 Bad Request Invalid request parameters
401 Unauthorized Incorrect or missing API key
403 Forbidden You do not have permission to view a resource or perform an action
404 Not Found The specified resource could not be found
409 Conflict The requested change cannot be done, because it conflicts with the Brmbl internal state of the resource
422 Unprocessable Entity The request body you sent is missing fields / fields have the wrong data type
500 Internal Server Error There was a problem on our end

Response format

Error responses are separated into two categories:

All error responses will have an errors array field, containing objects with these attributes:

Parameter Description
detail Explanation of the error
source.pointer Available when a specific request parameter was responsible
title A concise summary of the error
type (If available), a machine readable type of error, for example "AUTHENTICATION_FAILED"

Rate Limits

Each request is tracked by its unique IP. The limit is 1000 requests per minute. Hitting the limit will block further requests for that minute.

Please contact your Account Manager or Customer Success to request a limit increase.

Authentication

All calls to Bramble APIs are authenticated with an API key that an admin can generate within your Bramble app. Allowed resources can be customized per API key.

Please keep your API keys private.

API Keys created should never be exposed in untrusted contexts. Never put an API Key in client-side JavaScript, embed it in a web page, or otherwise allow users to access it. If an API Key is exposed, lost, or stolen, then it is compromised. Revoke compromised keys immediately from your Integration Settings page to prevent unauthorized access.

apiKey

Header: Authorization

Enter the token with the Bearer: prefix, e.g. "Bearer brmbl_ZLXZ4PYn_E34CJQSRtlmf0CXLsKFjMOf7".

Checkins

Creates a check-in for a user

Request: Create a check-in

curl -X POST https://api.COMPANY.brmbl.io/v1/checkins \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_XGaQIWzT_PEzU3uySFv8chKvp7Cfjy3ho" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "19935",
  "work_location": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:03Z",
      "updated_at": "2026-09-01T12:25:03Z",
      "work_location": "office"
    },
    "id": "14494",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkins/14494"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "19935",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19935",
          "self": "http://api.COMPANY.brmbl.io/v1/checkins/14494/relationships/user"
        }
      }
    },
    "type": "checkins"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkins/14494"
  }
}

Request: Create a check-in

curl -X POST https://api.COMPANY.brmbl.io/v1/checkins \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_qBbaIY8R_BvEm0fs3lBRpIK80qxDfaIPW" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "19925",
  "work_location": "distributed"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:03Z",
      "updated_at": "2026-09-01T12:25:03Z",
      "work_location": "distributed"
    },
    "id": "14488",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkins/14488"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "19925",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19925",
          "self": "http://api.COMPANY.brmbl.io/v1/checkins/14488/relationships/user"
        }
      }
    },
    "type": "checkins"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkins/14488"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "already entered on this day",
      "source": {
        "pointer": ":date"
      },
      "title": "Conflict"
    }
  ]
}

You can create a check-in for a user per day.

A Check-in is used to track where you plan on doing work, and is also referenced in how we create the check-in items.

Request

POST /v1/checkins

Required scope: checkins:write

Parameters

Parameter Description In Type Required Default Example
x-external-resource-uri Log optional external-resource-uri data with which to build an audit version. header string false

Responses

Status Description Schema
201 Checkin
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Fetch a check-in by ID

Request: Returns a check-in

curl -X GET https://api.COMPANY.brmbl.io/v1/checkins/id/14486 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_zrzAaWtD_qdsfFUS0KFpZ9JQLNiZ6sUqm" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:03Z",
      "updated_at": "2026-09-01T12:25:03Z",
      "work_location": "office"
    },
    "id": "14486",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkins/14486"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "19919",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19919",
          "self": "http://api.COMPANY.brmbl.io/v1/checkins/14486/relationships/user"
        }
      }
    },
    "type": "checkins"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkins/14486"
  }
}

Returns the check-in identified by an internal Bramble ID.

Request

GET /v1/checkins/id/{id}

Required scope: checkins:read

Parameters

Parameter Description In Type Required Default Example
id Check-in ID path integer true 233
include Comma separated list of relationships to include. query array false user
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Checkin
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Fetch a check-in by user ID, and date

Request: Returns a check-in by user id and date

curl -X GET https://api.COMPANY.brmbl.io/v1/checkins/user/19923/date/2020-01-01 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_hqYSpklQ_TZTWabS8mSKxEm8yWtoUV3WN" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:03Z",
      "updated_at": "2026-09-01T12:25:03Z",
      "work_location": "office"
    },
    "id": "14487",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkins/14487"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "19923",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19923",
          "self": "http://api.COMPANY.brmbl.io/v1/checkins/14487/relationships/user"
        }
      }
    },
    "type": "checkins"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkins/14487"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "Could not find check-in with user_id: -1 and date: 2020-01-01",
      "status": "404",
      "title": "Resource Not Found"
    }
  ]
}

Returns the check-in identified by an internal Bramble user ID, and date.

Request

GET /v1/checkins/user/{user_id}/date/{date}

Required scope: checkins:read

Parameters

Parameter Description In Type Required Default Example
user_id User ID path integer true 233
date Date path string true 2022-01-01
include Comma separated list of relationships to include. query array false user
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Checkin
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Checkin Items

Creates a user's check-in item

Request: Create a production task check-in item

curl -X POST https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_pjEtarly_X5W9nVkKYnPDhbucT7xZwbYp" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20197",
  "volume": 1,
  "checkin_id": "14629",
  "replacement": false,
  "production_task_id": 5124,
  "cost_category_id": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:11Z",
      "minutes": "10.00",
      "updated_at": "2026-09-01T12:25:11Z",
      "volume": 1
    },
    "id": "26461",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26461"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14629",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14629",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26461/relationships/checkin"
        }
      },
      "production_task": {
        "data": {
          "id": "5124",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5124",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26461/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20197",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20197",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26461/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26461"
  }
}

Request: Create a production task check-in item with cost category

curl -X POST https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ZbMNeTpT_2SZrqQN2UPRMgGniKt5CWS0N" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20204",
  "volume": 1,
  "checkin_id": "14634",
  "replacement": false,
  "production_task_id": 5127,
  "cost_category_id": "1259"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:11Z",
      "minutes": "10.00",
      "updated_at": "2026-09-01T12:25:11Z",
      "volume": 1
    },
    "id": "26471",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26471"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14634",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14634",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26471/relationships/checkin"
        }
      },
      "cost_category": {
        "data": {
          "id": "1259",
          "type": "cost_categories"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/cost_categories/1259",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26471/relationships/cost_category"
        }
      },
      "production_task": {
        "data": {
          "id": "5127",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5127",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26471/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20204",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20204",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26471/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26471"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: supporting_task_id",
      "source": {
        "pointer": "/supporting_task_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: friction_type_id",
      "source": {
        "pointer": "/friction_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: leave_type_id",
      "source": {
        "pointer": "/leave_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: base_time",
      "source": {
        "pointer": "/base_time"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: overtime",
      "source": {
        "pointer": "/overtime"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "already entered on this day",
      "source": {
        "pointer": ":production_task_id"
      },
      "title": "Conflict"
    }
  ]
}

Request: Create a supporting task check-in item

curl -X POST https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ZjHVGRp4_oi2sOcePHdefuSD7yPnkJWAL" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20249",
  "checkin_id": "14663",
  "replacement": false,
  "supporting_task_id": "2678"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": null
    },
    "id": "26522",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26522"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14663",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14663",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26522/relationships/checkin"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2678",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/2678",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26522/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "20249",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20249",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26522/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26522"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: production_task_id",
      "source": {
        "pointer": "/production_task_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: volume",
      "source": {
        "pointer": "/volume"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: friction_type_id",
      "source": {
        "pointer": "/friction_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: leave_type_id",
      "source": {
        "pointer": "/leave_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: base_time",
      "source": {
        "pointer": "/base_time"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: overtime",
      "source": {
        "pointer": "/overtime"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "already entered on this day",
      "source": {
        "pointer": ":supporting_task_id"
      },
      "title": "Conflict"
    }
  ]
}

Request: Create a friction type check-in item

curl -X POST https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_yhnPVXgn_VlkVyPRy14vS6zZc5JKZjymC" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20127",
  "checkin_id": "14577",
  "replacement": false,
  "friction_type_id": "1683"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:08Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:08Z",
      "volume": null
    },
    "id": "26358",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26358"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14577",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14577",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26358/relationships/checkin"
        }
      },
      "friction_type": {
        "data": {
          "id": "1683",
          "type": "friction_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/friction_types/1683",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26358/relationships/friction_type"
        }
      },
      "user": {
        "data": {
          "id": "20127",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20127",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26358/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26358"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: production_task_id",
      "source": {
        "pointer": "/production_task_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: volume",
      "source": {
        "pointer": "/volume"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: supporting_task_id",
      "source": {
        "pointer": "/supporting_task_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: leave_type_id",
      "source": {
        "pointer": "/leave_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: base_time",
      "source": {
        "pointer": "/base_time"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: overtime",
      "source": {
        "pointer": "/overtime"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "already entered on this day",
      "source": {
        "pointer": ":friction_type_id"
      },
      "title": "Conflict"
    }
  ]
}

Request: Create a leave type check-in item

curl -X POST https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_A8enWYOS_a2xypR7DRk2aAVQTt7MyQkBv" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20245",
  "checkin_id": "14661",
  "replacement": false,
  "leave_type_id": "1305"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": null
    },
    "id": "26515",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26515"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14661",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14661",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26515/relationships/checkin"
        }
      },
      "leave_type": {
        "data": {
          "id": "1305",
          "type": "leave_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/leave_types/1305",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26515/relationships/leave_type"
        }
      },
      "user": {
        "data": {
          "id": "20245",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20245",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26515/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26515"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: production_task_id",
      "source": {
        "pointer": "/production_task_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: volume",
      "source": {
        "pointer": "/volume"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: supporting_task_id",
      "source": {
        "pointer": "/supporting_task_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: friction_type_id",
      "source": {
        "pointer": "/friction_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: base_time",
      "source": {
        "pointer": "/base_time"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: overtime",
      "source": {
        "pointer": "/overtime"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "already entered on this day",
      "source": {
        "pointer": ":leave_type_id"
      },
      "title": "Conflict"
    }
  ]
}

Creates user's check-in item for a day, could be a production task, supporting task, leave type or friction type.

Request

POST /v1/checkin_items

Required scope: checkins:write

Parameters

Parameter Description In Type Required Default Example
x-external-resource-uri Log optional external-resource-uri data with which to build an audit version. header string false

Responses

Status Description Schema
201 Checkin Item Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Deletes a user's check-in item

Request: Delete a production task check-in item.

curl -X DELETE https://api.COMPANY.brmbl.io/v1/checkin_items/26372 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_QLA8xzbj_wjer3Rs94W0RdozmwPyuAswC" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:09Z",
      "minutes": "150.00",
      "updated_at": "2026-09-01T12:25:09Z",
      "volume": 15
    },
    "id": "26372",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26372"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14584",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14584",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26372/relationships/checkin"
        }
      },
      "production_task": {
        "data": {
          "id": "5102",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5102",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26372/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20140",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20140",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26372/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26372"
  }
}

Soft-Deletes user's check-in item for a day.

Request

DELETE /v1/checkin_items/{id}

Required scope: checkins:write

Parameters

Parameter Description In Type Required Default Example
x-external-resource-uri Log optional external-resource-uri data with which to build an audit version. header string false

Responses

Status Description Schema
200 Checkin Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a check-in item.

Request: Returns a check-in item

curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/26418 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_6Uh6Eocj_apH0eQOqFbQ7VuFMVaclz7Vu" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:10Z",
      "minutes": "150.00",
      "updated_at": "2026-09-01T12:25:10Z",
      "volume": 15
    },
    "id": "26418",
    "links": {
      "self": "http://company.brmbl.io/v1/checkin_items/26418"
    },
    "relationships": {},
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://company.brmbl.io/v1/checkin_items/26418"
  }
}

Request: Returns a check-in item

curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/26517?include=production_task \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_VCd44QsB_5bkCcYfiZ184psmQcnO89UNW" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "150.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": 15
    },
    "id": "26517",
    "links": {
      "self": "http://company.brmbl.io/v1/checkin_items/26517"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5142",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/production_tasks/5142",
          "self": "http://company.brmbl.io/v1/checkin_items/26517/relationships/production_task"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [
    {
      "attributes": {
        "description": "pt-RB8ICAdX",
        "entry_mode": "AUTO",
        "improvement_category": "rpa",
        "inserted_at": "2026-09-01T12:25:12Z",
        "name": "TaskB",
        "state": "detached",
        "updated_at": "2026-09-01T12:25:12Z"
      },
      "id": "5142",
      "links": {
        "self": "http://company.brmbl.io/v1/production_tasks/5142"
      },
      "relationships": {},
      "type": "production_tasks"
    }
  ],
  "links": {
    "self": "http://company.brmbl.io/v1/checkin_items/26517"
  }
}

Request: Returns a check-in item

curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/26518?include=supporting_task \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_VCd44QsB_5bkCcYfiZ184psmQcnO89UNW" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "60.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": null
    },
    "id": "26518",
    "links": {
      "self": "http://company.brmbl.io/v1/checkin_items/26518"
    },
    "relationships": {
      "supporting_task": {
        "data": {
          "id": "2677",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/supporting_tasks/2677",
          "self": "http://company.brmbl.io/v1/checkin_items/26518/relationships/supporting_task"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [
    {
      "attributes": {
        "category": "meet",
        "description": "AMF6jG7J",
        "inserted_at": "2026-09-01T12:25:12Z",
        "name": "AMF6jG7J",
        "state": "active",
        "updated_at": "2026-09-01T12:25:12Z"
      },
      "id": "2677",
      "links": {
        "self": "http://company.brmbl.io/v1/supporting_tasks/2677"
      },
      "relationships": {},
      "type": "supporting_tasks"
    }
  ],
  "links": {
    "self": "http://company.brmbl.io/v1/checkin_items/26518"
  }
}

Request: Returns a check-in item

curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/26519?include=friction_type \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_VCd44QsB_5bkCcYfiZ184psmQcnO89UNW" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "30.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": null
    },
    "id": "26519",
    "links": {
      "self": "http://company.brmbl.io/v1/checkin_items/26519"
    },
    "relationships": {
      "friction_type": {
        "data": {
          "id": "1690",
          "type": "friction_types"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/friction_types/1690",
          "self": "http://company.brmbl.io/v1/checkin_items/26519/relationships/friction_type"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [
    {
      "attributes": {
        "category": "interruption",
        "description": "eSDi7Rzx",
        "inserted_at": "2026-09-01T12:25:12Z",
        "name": "eSDi7Rzx",
        "state": "active",
        "updated_at": "2026-09-01T12:25:12Z"
      },
      "id": "1690",
      "links": {
        "self": "http://company.brmbl.io/v1/friction_types/1690"
      },
      "relationships": {},
      "type": "friction_types"
    }
  ],
  "links": {
    "self": "http://company.brmbl.io/v1/checkin_items/26519"
  }
}

Request: Returns a check-in item

curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/26520?include=leave_type \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_VCd44QsB_5bkCcYfiZ184psmQcnO89UNW" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "480.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": null
    },
    "id": "26520",
    "links": {
      "self": "http://company.brmbl.io/v1/checkin_items/26520"
    },
    "relationships": {
      "leave_type": {
        "data": {
          "id": "1306",
          "type": "leave_types"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/leave_types/1306",
          "self": "http://company.brmbl.io/v1/checkin_items/26520/relationships/leave_type"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [
    {
      "attributes": {
        "category": "planned_paid",
        "description": "juDznFlv",
        "inserted_at": "2026-09-01T12:25:12Z",
        "name": "juDznFlv",
        "state": "active",
        "updated_at": "2026-09-01T12:25:12Z"
      },
      "id": "1306",
      "links": {
        "self": "http://company.brmbl.io/v1/leave_types/1306"
      },
      "relationships": {},
      "type": "leave_types"
    }
  ],
  "links": {
    "self": "http://company.brmbl.io/v1/checkin_items/26520"
  }
}

You can fetch the details of a single item.

Request

GET /v1/checkin_items/{id}

Required scope: checkins:read

Parameters

Parameter Description In Type Required Default Example
id Checkin item ID to retrieve. path integer true 233
include Comma separated list of relationships to include. query array false user
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Checkin Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all check-in items

Request: List of check-in items (filtered by date)

curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items?date=2020-01-02&page[number]=1&page[size]=10&sort=date&fields[checkin_items]=volume,date \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_wCrgZW2A_3MEi0gDVHRuKLEYRaagyjNQK" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "date": "2020-01-02",
        "volume": 15
      },
      "id": "26500",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26500"
      },
      "relationships": {},
      "type": "checkin_items"
    },
    {
      "attributes": {
        "date": "2020-01-02",
        "volume": 20
      },
      "id": "26501",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26501"
      },
      "relationships": {},
      "type": "checkin_items"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items?date=2020-01-02&fields%5Bcheckin_items%5D=volume%2Cdate&page%5Bnumber%5D=1&page%5Bsize%5D=10&sort=date"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 10,
      "total_entries": 2,
      "total_pages": 1
    }
  }
}

You can fetch a list of all check-in items.

Request

GET /v1/checkin_items

Required scope: checkins:read

Parameters

Parameter Description In Type Required Default Example
date Filter results for this date query string false 2022-02-28
user_id Filter results with this Bramble user ID query integer false 12
overtime Filter results to the user's overtime entries query boolean false true
base_time Filter results to the user's base time entries query boolean false true
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -date,-volume
include Comma separated list of relationships to include. query array false user
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 CheckinItems
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Updates a user's check-in item

Request: Update a production task check-in item. Note that this will replace the existing values.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items/26486 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_u7uNgnZZ_Ly1OlY8rlsfjbQnw8xBrVw0Z" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20216",
  "volume": 1,
  "checkin_id": "14643",
  "replacement": false,
  "production_task_id": 5131,
  "cost_category_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:11Z",
      "minutes": "10.00",
      "updated_at": "2026-09-01T12:25:11Z",
      "volume": 1
    },
    "id": "26486",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26486"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14643",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14643",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26486/relationships/checkin"
        }
      },
      "production_task": {
        "data": {
          "id": "5131",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5131",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26486/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20216",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20216",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26486/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26486"
  }
}

Request: Update a production task check-in item with a cost category. Note that this will replace the existing values.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items/26503 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_IZJQYDPD_4Le9yTU636eZgoaNWfDQoVnB" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20234",
  "volume": 1,
  "checkin_id": "14655",
  "replacement": false,
  "production_task_id": 5136,
  "cost_category_id": "1261"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "10.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": 1
    },
    "id": "26503",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26503"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14655",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14655",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26503/relationships/checkin"
        }
      },
      "cost_category": {
        "data": {
          "id": "1261",
          "type": "cost_categories"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/cost_categories/1261",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26503/relationships/cost_category"
        }
      },
      "production_task": {
        "data": {
          "id": "5136",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5136",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26503/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20234",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20234",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26503/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26503"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: supporting_task_id",
      "source": {
        "pointer": "/supporting_task_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: friction_type_id",
      "source": {
        "pointer": "/friction_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: leave_type_id",
      "source": {
        "pointer": "/leave_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: base_time",
      "source": {
        "pointer": "/base_time"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: minutes",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: overtime",
      "source": {
        "pointer": "/overtime"
      },
      "title": "Invalid value"
    }
  ]
}

Request: Update a supporting task check-in item. Note that this will replace the existing values.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items/26343 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_zKLPs8Xl_x89u3EPEQakKuKJkFTXzWzsH" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20116",
  "checkin_id": "14570",
  "replacement": false,
  "supporting_task_id": "2651"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:08Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:08Z",
      "volume": null
    },
    "id": "26343",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26343"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14570",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14570",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26343/relationships/checkin"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2651",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/2651",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26343/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "20116",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20116",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26343/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26343"
  }
}

Request: Update a friction type check-in item. Note that this will replace the existing values.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items/26489 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_AKvqr7Bz_H4hGfqIPAtJbCZp2Cn81iSvu" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20218",
  "checkin_id": "14645",
  "replacement": false,
  "friction_type_id": "1688"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:11Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:11Z",
      "volume": null
    },
    "id": "26489",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26489"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14645",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14645",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26489/relationships/checkin"
        }
      },
      "friction_type": {
        "data": {
          "id": "1688",
          "type": "friction_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/friction_types/1688",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26489/relationships/friction_type"
        }
      },
      "user": {
        "data": {
          "id": "20218",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20218",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26489/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26489"
  }
}

Request: Update a leave type check-in item. Note that this will replace the existing values.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items/26463 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_hHJxM8xq_rQRjFE1YZyatwLFtVeEJ3QEj" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20199",
  "checkin_id": "14631",
  "replacement": false,
  "leave_type_id": "1301"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:11Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:11Z",
      "volume": null
    },
    "id": "26463",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26463"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14631",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14631",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26463/relationships/checkin"
        }
      },
      "leave_type": {
        "data": {
          "id": "1301",
          "type": "leave_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/leave_types/1301",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26463/relationships/leave_type"
        }
      },
      "user": {
        "data": {
          "id": "20199",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20199",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26463/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26463"
  }
}

Updates user's check-in item for a day, could be a production task, supporting task, leave type or friction type.

Request

PUT /v1/checkin_items/{id}

Required scope: checkins:write

Parameters

Parameter Description In Type Required Default Example
x-external-resource-uri Log optional external-resource-uri data with which to build an audit version. header string false

Responses

Status Description Schema
200 Checkin Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Upserts a user's production task, supporting task, leave type or friction type check-in item.

Request: Upserts a not existing production task check-in item will create a new one

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_9J5IWAUj_7OhQOzz0VLa2BkWiZFhEZeK0" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20125",
  "volume": 1,
  "checkin_id": "14576",
  "replacement": false,
  "production_task_id": 5097,
  "cost_category_id": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:08Z",
      "minutes": "10.00",
      "updated_at": "2026-09-01T12:25:08Z",
      "volume": 1
    },
    "id": "26356",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26356"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14576",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14576",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26356/relationships/checkin"
        }
      },
      "production_task": {
        "data": {
          "id": "5097",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5097",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26356/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20125",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20125",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26356/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26356"
  }
}

Request: Upserts a not existing production task check-in item will create a new one

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_96dXe43l_gpBbQTqunUu7HXbIytPImhIk" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20114",
  "volume": 1,
  "checkin_id": "14568",
  "replacement": false,
  "production_task_id": 5092,
  "cost_category_id": "1244"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:08Z",
      "minutes": "10.00",
      "updated_at": "2026-09-01T12:25:08Z",
      "volume": 1
    },
    "id": "26341",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26341"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14568",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14568",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26341/relationships/checkin"
        }
      },
      "cost_category": {
        "data": {
          "id": "1244",
          "type": "cost_categories"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/cost_categories/1244",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26341/relationships/cost_category"
        }
      },
      "production_task": {
        "data": {
          "id": "5092",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5092",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26341/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20114",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20114",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26341/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26341"
  }
}

Request: Upsert an existing production task check-in item

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_llzE7eDI_ZhEWmxht1KDnLXaSXyfchQwJ" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20093",
  "volume": 1,
  "checkin_id": "14553",
  "replacement": false,
  "production_task_id": 5083,
  "cost_category_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:07Z",
      "minutes": "20.00",
      "updated_at": "2026-09-01T12:25:08Z",
      "volume": 2
    },
    "id": "26311",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26311"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14553",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14553",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26311/relationships/checkin"
        }
      },
      "production_task": {
        "data": {
          "id": "5083",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5083",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26311/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20093",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20093",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26311/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26311"
  }
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Request: When upserting negative volume, if that upsert will bring the entry's volume or minutes equal to or below zero, then a delete will ultimately be performed.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_eAxOUWXa_Fk6DEe0j2ZOhe3o6i2LMzryh" \
-d @- << EOF

{
  "date": "2022-02-23",
  "user_id": "20187",
  "volume": -101,
  "checkin_id": "14622",
  "replacement": false,
  "production_task_id": 5120,
  "cost_category_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:10Z",
      "minutes": "1000.00",
      "updated_at": "2026-09-01T12:25:10Z",
      "volume": 100
    },
    "id": "26447",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26447"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14622",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14622",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26447/relationships/checkin"
        }
      },
      "production_task": {
        "data": {
          "id": "5120",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5120",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26447/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "20187",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20187",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26447/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26447"
  }
}

Request: Upserting a non-existent supporting task check-in item will create a new one

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_NsFZu2FE_toxh7h9pB3RjIUmMy8V2ZNNr" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20163",
  "checkin_id": "14604",
  "replacement": false,
  "supporting_task_id": "2664"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:09Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:09Z",
      "volume": null
    },
    "id": "26408",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26408"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14604",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14604",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26408/relationships/checkin"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2664",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/2664",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26408/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "20163",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20163",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26408/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26408"
  }
}

Request: Upsert an existing supporting task check-in item

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_LNZ7rrO5_V1V99pyFogun8g1g8NFVuczg" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20165",
  "checkin_id": "14606",
  "replacement": false,
  "supporting_task_id": "2665"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:09Z",
      "minutes": "900.00",
      "updated_at": "2026-09-01T12:25:10Z",
      "volume": null
    },
    "id": "26412",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26412"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14606",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14606",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26412/relationships/checkin"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2665",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/2665",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26412/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "20165",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20165",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26412/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26412"
  }
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Request: When upserting negative minutes, if that upsert will bring the entry's minutes equal to or below zero, then a delete will ultimately be performed.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_JEt46MKR_To5ezeUOfFtHK3qMTO4lBAHs" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": -6.0,
  "user_id": "20122",
  "checkin_id": "14574",
  "replacement": false,
  "supporting_task_id": "2654"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:08Z",
      "minutes": "5.00",
      "updated_at": "2026-09-01T12:25:08Z",
      "volume": null
    },
    "id": "26351",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26351"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14574",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14574",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26351/relationships/checkin"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2654",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/2654",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26351/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "20122",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20122",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26351/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26351"
  }
}

Request: Upserting a non-existent friction type check-in item will create a new one

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_iWzElP5e_DBY0cEiuBhSRqs7LzkbJAwyu" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20260",
  "checkin_id": "14671",
  "replacement": false,
  "friction_type_id": "1692"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:12Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:12Z",
      "volume": null
    },
    "id": "26540",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26540"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14671",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14671",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26540/relationships/checkin"
        }
      },
      "friction_type": {
        "data": {
          "id": "1692",
          "type": "friction_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/friction_types/1692",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26540/relationships/friction_type"
        }
      },
      "user": {
        "data": {
          "id": "20260",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20260",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26540/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26540"
  }
}

Request: Upsert an existing friction type check-in item

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_mh2WOXkL_V5uvf0vxJQI6SZZyK7KBTV7G" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20088",
  "checkin_id": "14549",
  "replacement": false,
  "friction_type_id": "1679"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:07Z",
      "minutes": "900.00",
      "updated_at": "2026-09-01T12:25:08Z",
      "volume": null
    },
    "id": "26303",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26303"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14549",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14549",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26303/relationships/checkin"
        }
      },
      "friction_type": {
        "data": {
          "id": "1679",
          "type": "friction_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/friction_types/1679",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26303/relationships/friction_type"
        }
      },
      "user": {
        "data": {
          "id": "20088",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20088",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26303/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26303"
  }
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Request: When upserting negative minutes, if that upsert will bring the entry's minutes equal to or below zero, then a delete will ultimately be performed.

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_iSKrPRMG_Nlma1bdYaVTpFky9PYHrkq14" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": -6.0,
  "user_id": "20086",
  "checkin_id": "14547",
  "replacement": false,
  "friction_type_id": "1678"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:07Z",
      "minutes": "5.00",
      "updated_at": "2026-09-01T12:25:07Z",
      "volume": null
    },
    "id": "26298",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26298"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14547",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14547",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26298/relationships/checkin"
        }
      },
      "friction_type": {
        "data": {
          "id": "1678",
          "type": "friction_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/friction_types/1678",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26298/relationships/friction_type"
        }
      },
      "user": {
        "data": {
          "id": "20086",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20086",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26298/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26298"
  }
}

Request: Upserting a non-existent leave type check-in item will create a new one

curl -X PUT https://api.COMPANY.brmbl.io/v1/checkin_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_FT0CE7Ny_OWOLzYS7bTPiEfbCxg1sZI1U" \
-d @- << EOF

{
  "date": "2022-02-23",
  "minutes": 450.0,
  "user_id": "20191",
  "checkin_id": "14625",
  "replacement": false,
  "leave_type_id": "1300"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:10Z",
      "minutes": "450.00",
      "updated_at": "2026-09-01T12:25:10Z",
      "volume": null
    },
    "id": "26453",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26453"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "14625",
          "type": "checkins"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkins/14625",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26453/relationships/checkin"
        }
      },
      "leave_type": {
        "data": {
          "id": "1300",
          "type": "leave_types"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/leave_types/1300",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26453/relationships/leave_type"
        }
      },
      "user": {
        "data": {
          "id": "20191",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20191",
          "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26453/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkin_items/26453"
  }
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot exceed 24h",
      "source": {
        "pointer": ":minutes"
      },
      "title": "Conflict"
    }
  ]
}

Tries to create a user's production task, supporting task, leave type, friction type, base time or overtime check-in item. If an existing item exists, it will update the existing one instead. If an upsert tries to update with negative volume or minutes, but that would bring minutes less than or equal to zero, that entry will ultimately be deleted.

Request

PUT /v1/checkin_items

Required scope: checkins:write

Parameters

Parameter Description In Type Required Default Example
x-external-resource-uri Log optional external-resource-uri data with which to build an audit version. header string false

Responses

Status Description Schema
200 Checkin Item Response
201 Checkin Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Checkpoint Item

Create a checkpoint item

Request: Create an inventory checkpoint item for a production task date combination and update or create the associated checkpoint

curl -X POST https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_UDWdoVX9_nCnXDwTqFbkkswJnYSG6TJzn" \
-d @- << EOF

{
  "date": "2024-04-09",
  "amount": 10,
  "production_task_id": 4986
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "amount": 10,
      "date": "2024-04-09",
      "external_resource_uri": null,
      "inserted_at": "2026-09-01T12:24:53Z",
      "updated_at": "2026-09-01T12:24:53Z"
    },
    "id": "280",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/280"
    },
    "relationships": {
      "checkpoint": {
        "data": {
          "id": "878",
          "type": "checkpoints"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoints/878",
          "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/280/relationships/checkpoint"
        }
      },
      "production_task": {
        "data": {
          "id": "4986",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/4986",
          "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/280/relationships/production_task"
        }
      }
    },
    "type": "checkpoint_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/280"
  }
}

You can adjust an Inventory Checkpoint and it's balance by creating a Checkpoint Item.

Request

POST /v1/inventory/checkpoint_items

Required scope: inventory:write

Parameters

Parameter Description In Type Required Default Example
x-external-resource-uri Log optional external-resource-uri data with which to build a history. header string false

Responses

Status Description Schema
201 Checkpoint Item
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete an Inventory Checkpoint Item

Request: Deletes a checkpoint item and updates or deletes the associated checkpoint

curl -X DELETE https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/287 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_gsoH4kzK_4EF1a3TazSDcRXOYk3f5POc7" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "amount": 10,
      "date": "2024-01-01",
      "external_resource_uri": null,
      "inserted_at": "2026-09-01T12:24:53Z",
      "updated_at": "2026-09-01T12:24:53Z"
    },
    "id": "287",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/287"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "4990",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/4990",
          "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/287/relationships/production_task"
        }
      }
    },
    "type": "checkpoint_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/287"
  }
}

(Soft-)delete an Inventory Checkpoint Item. The operation will also subtract the amount of the checkpoint item from the balance of the checkpoint.

Request

DELETE /v1/inventory/checkpoint_items/{id}

Required scope: inventory:write

Parameters

Parameter Description In Type Required Default Example
id The ID of the Inventory Checkpoint Item to delete. path integer true 123

Responses

Status Description Schema
200 Checkpoint Item
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a Checkpoint Item

Request: Retrieve a checkpoint item

curl -X GET https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/284 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Z3c5ohdD_985REvIUdBdTjpnMVw8jz5aJ" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "amount": 30,
      "date": "2024-01-01",
      "external_resource_uri": null,
      "inserted_at": "2026-09-01T12:24:53Z",
      "updated_at": "2026-09-01T12:24:53Z"
    },
    "id": "284",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/284"
    },
    "relationships": {
      "checkpoint": {
        "data": {
          "id": "884",
          "type": "checkpoints"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoints/884",
          "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/284/relationships/checkpoint"
        }
      },
      "production_task": {
        "data": {
          "id": "4988",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/4988",
          "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/284/relationships/production_task"
        }
      }
    },
    "type": "checkpoint_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/284"
  }
}

You can fetch the details of a single Checkpoint Item.

Request

GET /v1/inventory/checkpoint_items/{id}

Required scope: inventory:read

Parameters

Parameter Description In Type Required Default Example
id Checkpoint Item ID path integer true 233
include Comma separated list of relationships to include. query array false production_task
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Checkpoint Item
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Contact Center

Create an Agent Metric set

Request: Create daily metrics for an agent

curl -X POST https://api.COMPANY.brmbl.io/v1/agent_daily_metrics \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_dcuyqSdt_xZaVBVANbm49zUieMlJejqu4" \
-d @- << EOF

{
  "date": "2022-12-13",
  "user_id": 19475,
  "after_call_work_seconds": null,
  "aux_seconds": null,
  "available_seconds": null,
  "conversations": 3,
  "handle_seconds": null,
  "hold_seconds": null,
  "idle_seconds": null,
  "staffed_seconds": null,
  "talk_seconds": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "aux_seconds": null,
      "available_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "handle_seconds": null,
      "hold_seconds": null,
      "idle_seconds": null,
      "staffed_seconds": null,
      "talk_seconds": null,
      "user_id": 19475
    },
    "id": "245",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/245"
    },
    "relationships": {},
    "type": "agent_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/245"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "Agent data already exists for the given day",
      "source": {
        "pointer": ":date"
      },
      "title": "Conflict"
    }
  ]
}

You can record several agent metrics on a day-by-day basis from an Automatic Call Distribution (ACD) system.

Request

POST /v1/agent_daily_metrics

Required scope: contact_center:write

Responses

Status Description Schema
201 Agent Daily Metrics Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Create an Agent Queue Metric set

Request: Create queue metrics for an agent

curl -X POST https://api.COMPANY.brmbl.io/v1/agent_queue_metrics \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_yZikoKKs_rj5zFq0Gpj04kG8foOtdHu9W" \
-d @- << EOF

{
  "date": "2022-12-13",
  "user_id": 19497,
  "production_task_id": 4996,
  "entry_id": 26207,
  "quality_score": 0.8,
  "quality_score_id": 1611,
  "after_call_work_seconds": null,
  "conversations": 3,
  "handle_seconds": null,
  "hold_seconds": null,
  "talk_seconds": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "entry_id": 26207,
      "handle_seconds": null,
      "hold_seconds": null,
      "production_task_id": 4996,
      "quality": 0.8,
      "talk_seconds": null,
      "user_id": 19497
    },
    "id": "311",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/311"
    },
    "relationships": {
      "checkin_item": {
        "data": {
          "id": "26207",
          "type": "checkin_items"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkin_items/26207",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/311/relationships/checkin_item"
        }
      },
      "quality_score": {
        "data": {
          "id": "1611",
          "type": "quality_scores"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/quality_scores/1611",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/311/relationships/quality_score"
        }
      }
    },
    "type": "agent_queue_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/311"
  }
}

Request: Create queue metrics for an agent

curl -X POST https://api.COMPANY.brmbl.io/v1/agent_queue_metrics \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_226h60Uh_jpDKiPDeZyO5doh8OGLLXLrk" \
-d @- << EOF

{
  "date": "2022-12-13",
  "user_id": 19491,
  "production_task_id": 4993,
  "entry_id": 26203,
  "quality_score": 0.87,
  "quality_score_id": 1609,
  "after_call_work_seconds": null,
  "conversations": 3,
  "handle_seconds": null,
  "hold_seconds": null,
  "talk_seconds": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "entry_id": 26203,
      "handle_seconds": null,
      "hold_seconds": null,
      "production_task_id": 4993,
      "quality": 0.87,
      "talk_seconds": null,
      "user_id": 19491
    },
    "id": "309",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/309"
    },
    "relationships": {
      "checkin_item": {
        "data": {
          "id": "26203",
          "type": "checkin_items"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkin_items/26203",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/309/relationships/checkin_item"
        }
      },
      "quality_score": {
        "data": {
          "id": "1609",
          "type": "quality_scores"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/quality_scores/1609",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/309/relationships/quality_score"
        }
      }
    },
    "type": "agent_queue_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/309"
  }
}

Request: Create queue metrics for an agent

curl -X POST https://api.COMPANY.brmbl.io/v1/agent_queue_metrics \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_aQt7qCq2_CBoy8kuP7Q5ZsLEYYvectISl" \
-d @- << EOF

{
  "date": "2022-12-13",
  "user_id": 19503,
  "production_task_id": 5000,
  "entry_id": 26215,
  "quality_score": 0.8,
  "quality_score_id": 1614,
  "after_call_work_seconds": null,
  "conversations": 3,
  "handle_seconds": null,
  "hold_seconds": null,
  "talk_seconds": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "entry_id": 26215,
      "handle_seconds": null,
      "hold_seconds": null,
      "production_task_id": 5000,
      "quality": 0.8,
      "talk_seconds": null,
      "user_id": 19503
    },
    "id": "314",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/314"
    },
    "relationships": {
      "checkin_item": {
        "data": {
          "id": "26215",
          "type": "checkin_items"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkin_items/26215",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/314/relationships/checkin_item"
        }
      },
      "quality_score": {
        "data": {
          "id": "1614",
          "type": "quality_scores"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/quality_scores/1614",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/314/relationships/quality_score"
        }
      }
    },
    "type": "agent_queue_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/314"
  }
}

You can record several agent metrics on a per-queue, per-day basis from an Automatic Call Distribution (ACD) system.

Request

POST /v1/agent_queue_metrics

Required scope: contact_center:write

Responses

Status Description Schema
201 Agent Queue Metrics Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Create a Queue Metric set

Request: Create daily metrics for a queue

curl -X POST https://api.COMPANY.brmbl.io/v1/queue_daily_metrics \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_p4MOTLbn_lyZ1BZft6utXcrfclAEyMjbr" \
-d @- << EOF

{
  "date": "2022-12-13",
  "production_task_id": 5035,
  "service_level": 0.6,
  "after_call_work_seconds": null,
  "conversations": 3,
  "handle_seconds": null,
  "hold_seconds": null,
  "talk_seconds": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "handle_seconds": null,
      "hold_seconds": null,
      "queue_id": 5035,
      "talk_seconds": null
    },
    "id": "202",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/202"
    },
    "relationships": {
      "service_level": {
        "data": {
          "id": "679",
          "type": "service_levels"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/service_levels/679",
          "self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/202/relationships/service_level"
        }
      }
    },
    "type": "queue_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/202"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "Queue data already exists for the given day",
      "source": {
        "pointer": ":date"
      },
      "title": "Conflict"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "You have to change the Production Task to Contact Center type",
      "source": {
        "pointer": ":production_task_id"
      },
      "title": "Production Task not of type Contact Center"
    }
  ]
}

Use this endpoint to import contact-center queue-data on a day-by-day basis.

Request

POST /v1/queue_daily_metrics

Required scope: contact_center:write

Responses

Status Description Schema
201 Agent Queue Metrics Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete an Agent Daily Metrics set

Request: Deletes agent metrics and updates or deletes the associated entry

curl -X DELETE https://api.COMPANY.brmbl.io/v1/agent_daily_metrics/243 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_2up6M5XJ_b6ZDB84iZN6DdN9o4SF7cLl0" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "aux_seconds": null,
      "available_seconds": null,
      "conversations": 422,
      "date": "2026-09-01",
      "handle_seconds": null,
      "hold_seconds": null,
      "idle_seconds": null,
      "staffed_seconds": null,
      "talk_seconds": null,
      "user_id": 19467
    },
    "id": "243",
    "links": {
      "self": "http://company.brmbl.io/v1/agent_daily_metrics/243"
    },
    "relationships": {},
    "type": "agent_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://company.brmbl.io/v1/agent_daily_metrics/243"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "The given agent daily metrics could not be found.",
      "status": "404",
      "title": "Agent Daily Metrics Not Found"
    }
  ]
}

Delete an Agent Daily Metrics set.

Request

DELETE /v1/agent_daily_metrics/{id}

Required scope: contact_center:write

Parameters

Parameter Description In Type Required Default Example
id The ID of the agent daily metrics to delete. path integer true 123

Responses

Status Description Schema
200 Agent Daily Metrics Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete an Agent Queue Metrics set

Request: Deletes an agent queue dataset and updates the entry

curl -X DELETE https://api.COMPANY.brmbl.io/v1/agent_queue_metrics/310 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Y3rawwhQ_trOFG3LZkxoo1tN6XCTrTZtr" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 11,
      "date": "2026-08-31",
      "entry_id": null,
      "handle_seconds": null,
      "hold_seconds": null,
      "production_task_id": 4995,
      "quality": null,
      "talk_seconds": 500,
      "user_id": 19495
    },
    "id": "310",
    "links": {
      "self": "http://company.brmbl.io/v1/agent_queue_metrics/310"
    },
    "relationships": {},
    "type": "agent_queue_metrics"
  },
  "included": [],
  "links": {
    "self": "http://company.brmbl.io/v1/agent_queue_metrics/310"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "The given agent queue metrics could not be found.",
      "status": "404",
      "title": "Agent Queue Metrics Not Found"
    }
  ]
}

Delete an Agent Queue Metrics set.

Request

DELETE /v1/agent_queue_metrics/{id}

Required scope: contact_center:write

Parameters

Parameter Description In Type Required Default Example
id The ID of the agent queue metrics to delete. path integer true 233

Responses

Status Description Schema
200 Agent Queue Metrics Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Queue Daily Metrics set

Request: Deletes queue metrics and updates or deletes the associated entry

curl -X DELETE https://api.COMPANY.brmbl.io/v1/queue_daily_metrics/205 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_i5FfLeNk_97iW8noAm8bXQ0vEk6wPZ3iN" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 519,
      "date": "2026-09-01",
      "handle_seconds": null,
      "hold_seconds": null,
      "queue_id": 5037,
      "talk_seconds": null
    },
    "id": "205",
    "links": {
      "self": "http://company.brmbl.io/v1/queue_daily_metrics/205"
    },
    "relationships": {},
    "type": "queue_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://company.brmbl.io/v1/queue_daily_metrics/205"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "The given queue daily metrics could not be found.",
      "status": "404",
      "title": "Queue Daily Metrics Not Found"
    }
  ]
}

Delete a Queue Daily Metrics set.

Request

DELETE /v1/queue_daily_metrics/{id}

Required scope: contact_center:write

Parameters

Parameter Description In Type Required Default Example
id The ID of the queue daily metrics to delete. path integer true 123

Responses

Status Description Schema
200 Agent Queue Metrics Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Upserts an Agent Metric set

Request: Create daily metrics for an agent

curl -X PUT https://api.COMPANY.brmbl.io/v1/agent_daily_metrics \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_GkisEHhr_8so8GHxjaOHSL7SKoJqh6YiV" \
-d @- << EOF

{
  "date": "2022-12-13",
  "user_id": 19465,
  "after_call_work_seconds": null,
  "aux_seconds": null,
  "available_seconds": null,
  "conversations": 3,
  "handle_seconds": null,
  "hold_seconds": null,
  "idle_seconds": null,
  "staffed_seconds": null,
  "talk_seconds": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "aux_seconds": null,
      "available_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "handle_seconds": null,
      "hold_seconds": null,
      "idle_seconds": null,
      "staffed_seconds": null,
      "talk_seconds": null,
      "user_id": 19465
    },
    "id": "242",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/242"
    },
    "relationships": {},
    "type": "agent_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/242"
  }
}

Request: Update daily metrics for an agent

curl -X PUT https://api.COMPANY.brmbl.io/v1/agent_daily_metrics \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_nwBkNNqa_BbJVy3QhqESTer0o7zdLV6eb" \
-d @- << EOF

{
  "date": "2022-12-13",
  "user_id": 19479,
  "after_call_work_seconds": null,
  "aux_seconds": null,
  "available_seconds": null,
  "conversations": null,
  "handle_seconds": null,
  "hold_seconds": null,
  "idle_seconds": null,
  "staffed_seconds": 60,
  "talk_seconds": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "aux_seconds": null,
      "available_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "handle_seconds": null,
      "hold_seconds": null,
      "idle_seconds": null,
      "staffed_seconds": 60,
      "talk_seconds": null,
      "user_id": 19479
    },
    "id": "248",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/248"
    },
    "relationships": {},
    "type": "agent_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/248"
  }
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "Agent metrics data is empty",
      "source": {
        "pointer": ":metrics"
      },
      "title": "Conflict"
    }
  ]
}

Tries to create a an Agent Metric set. If an existing dataset exists, it will update the existing one instead

Request

PUT /v1/agent_daily_metrics

Required scope: contact_center:write

Responses

Status Description Schema
200 Agent Daily Metrics Response
201 Agent Daily Metrics Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Cost Categories

Create a Cost Category

Request: Create a cost category

curl -X POST https://api.COMPANY.brmbl.io/v1/cost_categories \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_FX1bsrwb_KT74al9GvDQWCAiFr9bssYwk" \
-d @- << EOF

{
  "name": "New Category",
  "description": "A new cost bucket."
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "description": "A new cost bucket.",
      "inserted_at": "2026-09-01T12:25:04Z",
      "name": "New Category",
      "state": "active",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "1238",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1238"
    },
    "relationships": {},
    "type": "cost_categories"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1238"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: name",
      "source": {
        "pointer": "/name"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "has already been taken",
      "source": {
        "pointer": ":name"
      },
      "title": "Conflict"
    }
  ]
}

Create a new cost category.

Request

POST /v1/cost_categories

Required scope: process:write

Responses

Status Description Schema
201 Cost Category Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Cost Category

Request: Delete a cost category

curl -X DELETE https://api.COMPANY.brmbl.io/v1/cost_categories/1233 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_D5sXQ0tt_Ef0vUaeou296fEE14spbgzqW" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "pt-biBO9W+P",
      "inserted_at": "2026-09-01T12:25:04Z",
      "name": "Property",
      "state": "active",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "1233",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1233"
    },
    "relationships": {},
    "type": "cost_categories"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1233"
  }
}

Delete a cost category.

Request

DELETE /v1/cost_categories/{id}

Required scope: process:write

Parameters

Parameter Description In Type Required Default Example
id Cost Category ID to delete. path integer true 233

Responses

Status Description Schema
200 Cost Category Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a cost category

Request: Returns a cost category

curl -X GET https://api.COMPANY.brmbl.io/v1/cost_categories/1225 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_pqRMqg1O_HRLbf46Iyu83aN01KPk5Dj36" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "pt-/IrGy2pX",
      "inserted_at": "2026-09-01T12:25:03Z",
      "name": "Property",
      "state": "active",
      "updated_at": "2026-09-01T12:25:03Z"
    },
    "id": "1225",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1225"
    },
    "relationships": {},
    "type": "cost_categories"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1225"
  }
}

You can fetch the details of a single cost category.

Request

GET /v1/cost_categories/{id}

Required scope: process:read

Parameters

Parameter Description In Type Required Default Example
id Cost category ID to retrieve. path integer true 233

Responses

Status Description Schema
200 Cost Category Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all cost categories

Request: List of cost categories

curl -X GET https://api.COMPANY.brmbl.io/v1/cost_categories?page[number]=1&page[size]=2&sort=name&fields[cost_categories]=name,state \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_1w0Ycs15_VlPN8c618rOuz5uniLq4nuq3" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "name": "Auto",
        "state": "active"
      },
      "id": "1220",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1220"
      },
      "relationships": {},
      "type": "cost_categories"
    },
    {
      "attributes": {
        "name": "Property",
        "state": "active"
      },
      "id": "1221",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1221"
      },
      "relationships": {},
      "type": "cost_categories"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/cost_categories?fields%5Bcost_categories%5D=name%2Cstate&page%5Bnumber%5D=1&page%5Bsize%5D=2&sort=name"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 2,
      "total_entries": 2,
      "total_pages": 1
    }
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Unexpected field: FOO",
      "source": {
        "pointer": "/FOO"
      },
      "title": "Invalid value"
    }
  ]
}

You can fetch a list of all cost categories.

You can optionally filter the list by state.

Request

GET /v1/cost_categories

Required scope: process:read

Parameters

Parameter Description In Type Required Default Example
state Filter cost categories by given states (comma-separated) query array false active,archived
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,updated_at,-state
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Cost Categories
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Cost Category

Request: Update a cost category

curl -X PATCH https://api.COMPANY.brmbl.io/v1/cost_categories/1231 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_wLBivWsL_IQNiefECWp8GjroyOrJgNHyj" \
-d @- << EOF

{
  "name": "Renamed",
  "description": "Updated description."
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "Updated description.",
      "inserted_at": "2026-09-01T12:25:03Z",
      "name": "Renamed",
      "state": "active",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "1231",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1231"
    },
    "relationships": {},
    "type": "cost_categories"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/1231"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "null value where string expected",
      "source": {
        "pointer": "/name"
      },
      "title": "Invalid value"
    }
  ]
}

Update an existing cost category.

Request

PUT /v1/cost_categories/{id}

Required scope: process:write

Parameters

Parameter Description In Type Required Default Example
id Cost Category ID to update. path integer true 233

Responses

Status Description Schema
200 Cost Category Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Friction Types

Create a Friction Type

Request: Create a friction type

curl -X POST https://api.COMPANY.brmbl.io/v1/friction_types \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_C1qFwWx8_ILTNgDMJ0miVrbwpi81eR5bn" \
-d @- << EOF

{
  "name": "Slow tooling",
  "state": null,
  "description": "Tooling that slows agents down.",
  "category": "WORKFLOW"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "category": "workflow",
      "description": "Tooling that slows agents down.",
      "inserted_at": "2026-09-01T12:24:56Z",
      "name": "Slow tooling",
      "state": "active",
      "updated_at": "2026-09-01T12:24:56Z"
    },
    "id": "1653",
    "links": {
      "self": "http://www.example.com/v1/friction_types/1653"
    },
    "relationships": {},
    "type": "friction_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/friction_types/1653"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: description",
      "source": {
        "pointer": "/description"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: category",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Create a new friction type.

Request

POST /v1/friction_types

Required scope: operations:write

Responses

Status Description Schema
201 FrictionType
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Friction Type

Request: Delete a friction type

curl -X DELETE https://api.COMPANY.brmbl.io/v1/friction_types/1646 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_tyIAkQjt_gDyIc2R9xHB3eDYka1kaaxNa" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "downtime",
      "description": "RZJSW8FD",
      "inserted_at": "2026-09-01T12:24:56Z",
      "name": "Power Outage",
      "state": "active",
      "updated_at": "2026-09-01T12:24:56Z"
    },
    "id": "1646",
    "links": {
      "self": "http://www.example.com/v1/friction_types/1646"
    },
    "relationships": {},
    "type": "friction_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/friction_types/1646"
  }
}

Delete a friction type.

Request

DELETE /v1/friction_types/{id}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
id Friction Type ID to delete. path integer true 32

Responses

Status Description Schema
200 FrictionType
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a friction type

Request: Retrieve a supporting task

curl -X GET https://api.COMPANY.brmbl.io/v1/friction_types/1663 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Zv0XPXNC_wf5JvSHg6ibHbBq4VLVqVjzB" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "downtime",
      "description": "/0NNUf/6",
      "inserted_at": "2026-09-01T12:24:56Z",
      "name": "Power Outage",
      "state": "active",
      "updated_at": "2026-09-01T12:24:56Z"
    },
    "id": "1663",
    "links": {
      "self": "http://www.example.com/v1/friction_types/1663"
    },
    "relationships": {},
    "type": "friction_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/friction_types/1663"
  }
}

You can fetch the details of a single friction type.

Request

GET /v1/friction_types/{id}

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
id Friction Type ID to retrieve. path integer true 32

Responses

Status Description Schema
200 FrictionType
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all Friction Types

Request: List all friction types (filtered).

curl -X GET https://api.COMPANY.brmbl.io/v1/friction_types?state=active \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_EypwLFYN_gMtcbhGM5uUcrtgmspjY3zf4" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "category": "downtime",
        "description": "w2KumkUI",
        "inserted_at": "2026-09-01T12:24:57Z",
        "name": "Power Outage",
        "state": "active",
        "updated_at": "2026-09-01T12:24:57Z"
      },
      "id": "1673",
      "links": {
        "self": "http://www.example.com/v1/friction_types/1673"
      },
      "relationships": {},
      "type": "friction_types"
    }
  ],
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/friction_types?state=active"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 25,
      "total_entries": 1,
      "total_pages": 1
    }
  }
}

You can fetch a list of all friction types.

Request

GET /v1/friction_types

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
category Filter the friction type's in given category(ies). query array false downtime,coaching
state Filter by the friction type's status. query array false active,archived
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,updated_at,-state
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Friction Types
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Friction Type

Request: Update a friction type

curl -X PATCH https://api.COMPANY.brmbl.io/v1/friction_types/1657 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ucYRmmfZ_bkAYdtQ3oaj9Na3jUsC5ExWO" \
-d @- << EOF

{
  "name": "Renamed",
  "state": null,
  "description": "g9cTLxdw",
  "category": "REWORK"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "rework",
      "description": "g9cTLxdw",
      "inserted_at": "2026-09-01T12:24:56Z",
      "name": "Renamed",
      "state": "active",
      "updated_at": "2026-09-01T12:24:56Z"
    },
    "id": "1657",
    "links": {
      "self": "http://www.example.com/v1/friction_types/1657"
    },
    "relationships": {},
    "type": "friction_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/friction_types/1657"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Update an existing friction type.

Request

PUT /v1/friction_types/{id}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
id Friction Type ID to update. path integer true 32

Responses

Status Description Schema
200 FrictionType
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Groups

Create a Group

Request: Create a group

curl -X POST https://api.COMPANY.brmbl.io/v1/groups \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_VqHWJedb_dWK1TOVUuJAd5LYAXCjnAV5i" \
-d @- << EOF

{
  "name": "New Team",
  "state": null,
  "parent_id": 19591
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "inserted_at": "2026-09-01T12:24:59Z",
      "name": "New Team",
      "state": "active",
      "updated_at": "2026-09-01T12:24:59Z"
    },
    "id": "19592",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/groups/19592"
    },
    "relationships": {},
    "type": "groups"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/groups/19592"
  }
}

Create a new group in the hierarchy.

Request

POST /v1/groups

Required scope: groups:write

Responses

Status Description Schema
201 Group Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a group

Request: Returns a group

curl -X GET https://api.COMPANY.brmbl.io/v1/groups/19630?include=users \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_66YxgyhK_sdq50aUZxSAWSxKWjNkYcOIQ" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "inserted_at": "2026-09-01T12:25:00Z",
      "name": "Sales",
      "state": "active",
      "updated_at": "2026-09-01T12:25:00Z"
    },
    "id": "19630",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/groups/19630"
    },
    "relationships": {
      "users": {
        "data": [
          {
            "id": "19768",
            "type": "users"
          }
        ],
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users",
          "self": "http://api.COMPANY.brmbl.io/v1/groups/19630/relationships/users"
        }
      }
    },
    "type": "groups"
  },
  "included": [
    {
      "attributes": {
        "account_role": null,
        "email": "nick_kling@lehner.org",
        "full_name": "Some User",
        "inserted_at": "2026-09-01T12:25:00Z",
        "preferred_first_name": "Some",
        "state": "new",
        "team_role": "team_contributor",
        "timezone": "Etc/UTC",
        "updated_at": "2026-09-01T12:25:00Z"
      },
      "id": "19768",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/19768"
      },
      "relationships": {},
      "type": "users"
    }
  ],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/groups/19630"
  }
}

You can fetch the details of a single group, using it's Bramble ID.

Request

GET /v1/groups/{id}

Required scope: groups:read

Parameters

Parameter Description In Type Required Default Example
id The ID of the group to fetch path integer true 233
include Comma separated list of relationships to include. query array false parent,users
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Group Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all groups

Request: List of groups (filtered by parent_id)

curl -X GET https://api.COMPANY.brmbl.io/v1/groups?ancestors_id=19599&page[number]=1&page[size]=2&sort=name&fields[groups]=name,state \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_xEHFupdR_lwvSZpk1N1S8XBcDmKqRZpUs" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "name": "division",
        "state": "active"
      },
      "id": "19600",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/groups/19600"
      },
      "relationships": {},
      "type": "groups"
    },
    {
      "attributes": {
        "name": "root",
        "state": "active"
      },
      "id": "19599",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/groups/19599"
      },
      "relationships": {},
      "type": "groups"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/groups?ancestors_id=19599&fields%5Bgroups%5D=name%2Cstate&page%5Bnumber%5D=1&page%5Bsize%5D=2&sort=name"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 2,
      "total_entries": 3,
      "total_pages": 2
    }
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Unexpected field: FOO",
      "source": {
        "pointer": "/FOO"
      },
      "title": "Invalid value"
    }
  ]
}

You can fetch a list of all groups.

You can optionally filter the list by group status, or by to all groups that are descendant from a given parent group (using root_group_ids).

Request

GET /v1/groups

Required scope: groups:read

Parameters

Parameter Description In Type Required Default Example
ancestors_id Filter groups who have these IDs above them in the group hierarchy query array false 1,51,42
parent_id Filter groups who have these IDs above them in the group hierarchy query array false 1,51,42
state Filter groups by given states (comma-separated) query array false active,archived
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,updated_at,-state
include Comma separated list of relationships to include. query array false parent,users
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Groups
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Group

Request: Update a group

curl -X PATCH https://api.COMPANY.brmbl.io/v1/groups/19624 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_baVwOrhk_EiPKDCzBNfx9ApLq1A7xMx27" \
-d @- << EOF

{
  "name": "Renamed",
  "state": null,
  "parent_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "inserted_at": "2026-09-01T12:25:00Z",
      "name": "Renamed",
      "state": "active",
      "updated_at": "2026-09-01T12:25:00Z"
    },
    "id": "19624",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/groups/19624"
    },
    "relationships": {},
    "type": "groups"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/groups/19624"
  }
}

Update an existing group.

Request

PUT /v1/groups/{id}

Required scope: groups:write

Parameters

Parameter Description In Type Required Default Example
id Group ID to update. path integer true 233

Responses

Status Description Schema
200 Group Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Identity Searches

Resolve a payload to an outcome

Request: Resolve a payload to its outcome.

curl -X POST https://api.COMPANY.brmbl.io/v1/identity_searches/sla \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_yn1wHt96_6gOIHRfzBjVPPYJ1VcbXckCx" \
-d @- << EOF

{
  "attributes": {
    "type": "claim"
  },
  "namespace": "guidewire"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "entity_id": 621,
      "first_seen_at": "2026-09-01T12:24:55.296892Z",
      "last_seen_at": "2026-09-01T12:24:55.296892Z",
      "occurrence_count": 1,
      "payload": {
        "type": "claim"
      },
      "resource_type": "sla",
      "rule_id": 190,
      "status": "resolved"
    },
    "id": "120",
    "links": {
      "self": "http://www.example.com/v1/identity_searches/120"
    },
    "relationships": {},
    "type": "identity_searches"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/identity_searches/120"
  }
}

Resolves attributes for a namespace and resource_type against the engine's rules, records the search, and returns it with the resolved outcome. POST because the query is a body and the search log is upserted on each call; nothing of the caller's is mutated.

Request

POST /v1/identity_searches/{resource_type}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
resource_type Consumer discriminator — which table the resolved entity_id points at. path string true sla

Responses

Status Description Schema
200 Identity Search Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Leave Types

Create a Leave Type

Request: Create a leave type

curl -X POST https://api.COMPANY.brmbl.io/v1/leave_types \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_jAp0BPVp_dW8pJX7xVQkKsp8MGWQWVmkd" \
-d @- << EOF

{
  "name": "Bereavement",
  "state": null,
  "description": "Time off after the loss of a loved one.",
  "category": "UNPLANNED_PAID"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "category": "unplanned_paid",
      "description": "Time off after the loss of a loved one.",
      "inserted_at": "2026-09-01T12:24:55Z",
      "name": "Bereavement",
      "state": "active",
      "updated_at": "2026-09-01T12:24:55Z"
    },
    "id": "1256",
    "links": {
      "self": "http://www.example.com/v1/leave_types/1256"
    },
    "relationships": {},
    "type": "leave_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/leave_types/1256"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: description",
      "source": {
        "pointer": "/description"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: category",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Create a new leave type.

Request

POST /v1/leave_types

Required scope: operations:write

Responses

Status Description Schema
201 LeaveType
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Leave Type

Request: Delete a leave type

curl -X DELETE https://api.COMPANY.brmbl.io/v1/leave_types/1249 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_y8qQz8Sq_R1Yd1BdpIJ5FOZnsaZh8cdNP" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "unplanned_paid",
      "description": "PzaU5Qm0",
      "inserted_at": "2026-09-01T12:24:55Z",
      "name": "Kid Sickness",
      "state": "active",
      "updated_at": "2026-09-01T12:24:55Z"
    },
    "id": "1249",
    "links": {
      "self": "http://www.example.com/v1/leave_types/1249"
    },
    "relationships": {},
    "type": "leave_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/leave_types/1249"
  }
}

Delete a leave type.

Request

DELETE /v1/leave_types/{id}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
id Leave Type ID to delete. path integer true 42

Responses

Status Description Schema
200 LeaveType
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a leave type

Request: Retrieve a leave type

curl -X GET https://api.COMPANY.brmbl.io/v1/leave_types/1266 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ENyGsunX_g52ftD6ljzJQ10RsUrNsaOG1" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "unplanned_paid",
      "description": "khW6LRwX",
      "inserted_at": "2026-09-01T12:24:55Z",
      "name": "Kid Sickness",
      "state": "active",
      "updated_at": "2026-09-01T12:24:55Z"
    },
    "id": "1266",
    "links": {
      "self": "http://www.example.com/v1/leave_types/1266"
    },
    "relationships": {},
    "type": "leave_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/leave_types/1266"
  }
}

You can fetch the details of a single leave type.

Request

GET /v1/leave_types/{id}

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
id Leave Type ID to retrieve. path integer true 42

Responses

Status Description Schema
200 LeaveType
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all Leave Types

Request: List all leave types (filtered).

curl -X GET https://api.COMPANY.brmbl.io/v1/leave_types?state=active \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_dKFtw54e_9lVXhwmYteExPZ6ekFZRZNhU" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "category": "unplanned_paid",
        "description": "kCf2sNj3",
        "inserted_at": "2026-09-01T12:24:55Z",
        "name": "Kid Sickness",
        "state": "active",
        "updated_at": "2026-09-01T12:24:55Z"
      },
      "id": "1276",
      "links": {
        "self": "http://www.example.com/v1/leave_types/1276"
      },
      "relationships": {},
      "type": "leave_types"
    }
  ],
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/leave_types?state=active"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 25,
      "total_entries": 1,
      "total_pages": 1
    }
  }
}

You can fetch a list of all leave types.

Request

GET /v1/leave_types

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
category Filter the leave type's in given category(ies). query array false planned_paid,unplanned_paid
state Filter by the leave type's status. query array false active,archived
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,updated_at,-state
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Leave Types
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Leave Type

Request: Update a leave type

curl -X PATCH https://api.COMPANY.brmbl.io/v1/leave_types/1260 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_6ocQV8on_j7aDVaXgN2MZR7deA6GNWR6i" \
-d @- << EOF

{
  "name": "Renamed",
  "state": null,
  "description": "Updated description.",
  "category": "PLANNED_UNPAID"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "planned_unpaid",
      "description": "Updated description.",
      "inserted_at": "2026-09-01T12:24:55Z",
      "name": "Renamed",
      "state": "active",
      "updated_at": "2026-09-01T12:24:55Z"
    },
    "id": "1260",
    "links": {
      "self": "http://www.example.com/v1/leave_types/1260"
    },
    "relationships": {},
    "type": "leave_types"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/leave_types/1260"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Update an existing leave type.

Request

PUT /v1/leave_types/{id}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
id Leave Type ID to update. path integer true 42

Responses

Status Description Schema
200 LeaveType
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Namespaces

Create a Namespace

Request: Create a new namespace.

curl -X POST https://api.COMPANY.brmbl.io/v1/namespaces \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_xZDKkMz7_g3ScwXE1Mp3MLwps386QSOPu" \
-d @- << EOF

{
  "code": "outlook",
  "name": "Outlook",
  "description": "Shared mailboxes"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "code": "outlook",
      "description": "Shared mailboxes",
      "inserted_at": "2026-09-01T12:25:02Z",
      "name": "Outlook",
      "state": "active",
      "updated_at": "2026-09-01T12:25:02Z"
    },
    "id": "1295",
    "links": {
      "self": "http://www.example.com/v1/namespaces/1295"
    },
    "relationships": {},
    "type": "namespaces"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/namespaces/1295"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: code",
      "source": {
        "pointer": "/code"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "has already been taken",
      "source": {
        "pointer": ":code"
      },
      "title": "Conflict"
    }
  ]
}

Create a new namespace.

Request

POST /v1/namespaces

Required scope: operations:write

Responses

Status Description Schema
201 Namespace Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a Namespace

Request: Retrieve a single namespace by id.

curl -X GET https://api.COMPANY.brmbl.io/v1/namespaces/1304 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_K4CwctQr_F7QnFgwE08DWaGGTubnj3PJR" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "code": "sap",
      "description": null,
      "inserted_at": "2026-09-01T12:25:02Z",
      "name": "SAP",
      "state": "archived",
      "updated_at": "2026-09-01T12:25:02Z"
    },
    "id": "1304",
    "links": {
      "self": "http://www.example.com/v1/namespaces/1304"
    },
    "relationships": {},
    "type": "namespaces"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/namespaces/1304"
  }
}

Fetch the details of a single namespace by id.

Request

GET /v1/namespaces/{id}

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
id Namespace id to retrieve. path integer true 12

Responses

Status Description Schema
200 Namespace Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all Namespaces

Request: List all namespaces (paginated).

curl -X GET https://api.COMPANY.brmbl.io/v1/namespaces \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_RB54qIbs_IYLO9WuWNk1el6C06H8pIPVZ" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "code": "guidewire",
        "description": null,
        "inserted_at": "2026-09-01T12:25:02Z",
        "name": "Guidewire",
        "state": "active",
        "updated_at": "2026-09-01T12:25:02Z"
      },
      "id": "1305",
      "links": {
        "self": "http://www.example.com/v1/namespaces/1305"
      },
      "relationships": {},
      "type": "namespaces"
    },
    {
      "attributes": {
        "code": "sap",
        "description": null,
        "inserted_at": "2026-09-01T12:25:02Z",
        "name": "SAP",
        "state": "archived",
        "updated_at": "2026-09-01T12:25:02Z"
      },
      "id": "1306",
      "links": {
        "self": "http://www.example.com/v1/namespaces/1306"
      },
      "relationships": {},
      "type": "namespaces"
    }
  ],
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/namespaces"
  },
  "meta": {
    "pagination": {
      "cursors": {
        "after": null,
        "before": null
      },
      "total_count": 2
    }
  }
}

Request: Filter namespaces by lifecycle state.

curl -X GET https://api.COMPANY.brmbl.io/v1/namespaces?state=active \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4rCTq2yb_eTrX0y7327ZUC7zxx1CHU30U" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "code": "guidewire",
        "description": null,
        "inserted_at": "2026-09-01T12:25:02Z",
        "name": "Guidewire",
        "state": "active",
        "updated_at": "2026-09-01T12:25:02Z"
      },
      "id": "1298",
      "links": {
        "self": "http://www.example.com/v1/namespaces/1298"
      },
      "relationships": {},
      "type": "namespaces"
    }
  ],
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/namespaces?state=active"
  },
  "meta": {
    "pagination": {
      "cursors": {
        "after": null,
        "before": null
      },
      "total_count": 1
    }
  }
}

Lists all tenant-owned namespaces. Supports filtering by state and a free-text term match on name and code.

Request

GET /v1/namespaces

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
state Filter by lifecycle state. query array false active,archived
term ILIKE substring search on name and code. query string false guidewire
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,updated_at,-state

Responses

Status Description Schema
200 Namespaces
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Namespace

Request: Update a namespace's name, code and description.

curl -X PATCH https://api.COMPANY.brmbl.io/v1/namespaces/1301 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_nVYASoAg_yJfGbsDBI7wHzXENcD7Tu1X8" \
-d @- << EOF

{
  "code": "sap",
  "name": "Renamed",
  "description": "new desc"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "code": "sap",
      "description": "new desc",
      "inserted_at": "2026-09-01T12:25:02Z",
      "name": "Renamed",
      "state": "archived",
      "updated_at": "2026-09-01T12:25:02Z"
    },
    "id": "1301",
    "links": {
      "self": "http://www.example.com/v1/namespaces/1301"
    },
    "relationships": {},
    "type": "namespaces"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/namespaces/1301"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "can't be blank",
      "source": {
        "pointer": ":name"
      },
      "title": "Conflict"
    }
  ]
}

Update an existing namespace's name, code, and/or description.

Request

PUT /v1/namespaces/{id}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
id Namespace id to update. path integer true 12

Responses

Status Description Schema
200 Namespace Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Production Tasks

Create a Production Task

Request: Create a production task

curl -X POST https://api.COMPANY.brmbl.io/v1/production_tasks \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_uxw38af6_reUAP01sqrLCisTL2ucVPpEw" \
-d @- << EOF

{
  "name": "New Task",
  "state": null,
  "description": "A freshly created production task.",
  "group_id": 19497,
  "process_id": null,
  "has_backlog": false,
  "entry_mode": null,
  "improvement_category": "RPA",
  "has_service_level": false,
  "ideal_task_time_method": null,
  "proficiency_category": null,
  "is_key_task": null,
  "effective_itts": [
    {
      "effective_at": "2024-01-01",
      "ideal_task_time": 5.0
    }
  ]
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "description": "A freshly created production task.",
      "entry_mode": "AUTO",
      "improvement_category": "rpa",
      "inserted_at": "2026-09-01T12:24:58Z",
      "name": "New Task",
      "state": "detached",
      "updated_at": "2026-09-01T12:24:58Z"
    },
    "id": "5014",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5014"
    },
    "relationships": {},
    "type": "production_tasks"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5014"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: description",
      "source": {
        "pointer": "/description"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: group_id",
      "source": {
        "pointer": "/group_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: has_backlog",
      "source": {
        "pointer": "/has_backlog"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: has_service_level",
      "source": {
        "pointer": "/has_service_level"
      },
      "title": "Invalid value"
    }
  ]
}

Create a new production task.

Request

POST /v1/production_tasks

Required scope: process:write

Responses

Status Description Schema
201 ProductionTask
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Production Task

Request: Delete a production task

curl -X DELETE https://api.COMPANY.brmbl.io/v1/production_tasks/5015 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4l1EtFZY_qHMhIwa3LmO376nLpHGMpgkm" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "pt-iagWZ0mY",
      "entry_mode": "AUTO",
      "improvement_category": "rpa",
      "inserted_at": "2026-09-01T12:24:58Z",
      "name": "Customer Outreach",
      "state": "detached",
      "updated_at": "2026-09-01T12:24:58Z"
    },
    "id": "5015",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5015"
    },
    "relationships": {},
    "type": "production_tasks"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5015"
  }
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "cannot delete task with quality scores",
      "source": {
        "pointer": ":quality_scores"
      },
      "title": "Conflict"
    }
  ]
}

Delete a production task.

Request

DELETE /v1/production_tasks/{id}

Required scope: process:write

Parameters

Parameter Description In Type Required Default Example
id Production Task ID to delete. path integer true 233

Responses

Status Description Schema
200 ProductionTask
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a production task

Request: Retrieve a production task

curl -X GET https://api.COMPANY.brmbl.io/v1/production_tasks/5023 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Uif1ihNp_ZT3YZcxcEjZnjW8izzhgKpp9" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "pt-UV3jXgb4",
      "entry_mode": "AUTO",
      "improvement_category": "rpa",
      "inserted_at": "2026-09-01T12:24:58Z",
      "name": "Customer Outreach",
      "state": "active",
      "updated_at": "2026-09-01T12:24:58Z"
    },
    "id": "5023",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5023"
    },
    "relationships": {},
    "type": "production_tasks"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5023"
  }
}

You can fetch the details of a single production task.

Request

GET /v1/production_tasks/{id}

Required scope: process:read

Parameters

Parameter Description In Type Required Default Example
id Production task ID to retrieve. path integer true 233

Responses

Status Description Schema
200 ProductionTask
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all Production Tasks

Request: List all production tasks (filtered).

curl -X GET https://api.COMPANY.brmbl.io/v1/production_tasks?improvement_category=lean \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_OXC8fLly_96VEH1SGWgAMPB3hwnRHoRLp" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "description": "pt-2oh/L1Ue",
        "entry_mode": "AUTO",
        "improvement_category": "lean",
        "inserted_at": "2026-09-01T12:24:57Z",
        "name": "Lodge Claim",
        "state": "active",
        "updated_at": "2026-09-01T12:24:57Z"
      },
      "id": "5006",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5006"
      },
      "relationships": {
        "process": {
          "data": {
            "id": "1682",
            "type": "process"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/process/1682",
            "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5006/relationships/process"
          }
        }
      },
      "type": "production_tasks"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/production_tasks?improvement_category=lean"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 25,
      "total_entries": 1,
      "total_pages": 1
    }
  }
}

You can fetch a list of all production tasks.

Request

GET /v1/production_tasks

Required scope: process:read

Parameters

Parameter Description In Type Required Default Example
group_id Filter the tasks owned by the given group(s). query array false 1, 2, 3
improvement_category Filter the tasks in given continuous improvement category(ies). query array false lean,rpa
process_id Filter by Process(es) query array false 1,2,3
state Filter by the task status. query array false active,archived
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,ideal_task_time
include Comma separated list of relationships to include. query array false process
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Production Tasks
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Production Task

Request: Update a production task

curl -X PATCH https://api.COMPANY.brmbl.io/v1/production_tasks/5008 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_3YmgGnhd_kvUaVyZGWMVhPPGJe77hglXM" \
-d @- << EOF

{
  "name": "Renamed",
  "state": null,
  "description": "pt-vUbI5wDF",
  "group_id": 19491,
  "process_id": null,
  "has_backlog": false,
  "entry_mode": null,
  "improvement_category": "LEAN",
  "has_service_level": false,
  "ideal_task_time_method": null,
  "proficiency_category": null,
  "is_key_task": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "pt-vUbI5wDF",
      "entry_mode": "AUTO",
      "improvement_category": "lean",
      "inserted_at": "2026-09-01T12:24:57Z",
      "name": "Renamed",
      "state": "detached",
      "updated_at": "2026-09-01T12:24:57Z"
    },
    "id": "5008",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5008"
    },
    "relationships": {},
    "type": "production_tasks"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/5008"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/improvement_category"
      },
      "title": "Invalid value"
    }
  ]
}

Update an existing production task.

Request

PUT /v1/production_tasks/{id}

Required scope: process:write

Parameters

Parameter Description In Type Required Default Example
id Production Task ID to update. path integer true 233

Responses

Status Description Schema
200 ProductionTask
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Quality Scores

Create a Quality score

Request: Create a quality score

curl -X POST https://api.COMPANY.brmbl.io/v1/quality_scores \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_9Kh96pSk_ZBPMdjsCVX59oyjqa5zj7Vhw" \
-d @- << EOF

{
  "date": "2022-02-23",
  "score": 0.95,
  "user_id": "19816",
  "note": null,
  "production_task_id": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:01Z",
      "note": null,
      "score": 0.95,
      "updated_at": "2026-09-01T12:25:01Z"
    },
    "id": "1649",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1649"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "19816",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19816",
          "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1649/relationships/user"
        }
      }
    },
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1649"
  }
}

Request: Create a quality score with optional production task

curl -X POST https://api.COMPANY.brmbl.io/v1/quality_scores \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_xhkkEzsJ_EzIRkl5FVCNQcZcQytjbakDF" \
-d @- << EOF

{
  "date": "2022-02-23",
  "score": 0.95,
  "user_id": "19777",
  "note": null,
  "production_task_id": 5069
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:00Z",
      "note": null,
      "score": 0.95,
      "updated_at": "2026-09-01T12:25:00Z"
    },
    "id": "1622",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1622"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5069",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5069",
          "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1622/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "19777",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19777",
          "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1622/relationships/user"
        }
      }
    },
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1622"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    }
  ]
}

You can create a quality score for a user, and optionally for a production task, for a particular day.

Request

POST /v1/quality_scores

Required scope: quality:write

Responses

Status Description Schema
201 Quality Score Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Quality Score

Request: Deletes a quality score

curl -X DELETE https://api.COMPANY.brmbl.io/v1/quality_scores/1617 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_GSnQ4qss_ErLWd8Epcl5j8q5nmTcwRNH4" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2026-09-01",
      "inserted_at": "2026-09-01T12:25:00Z",
      "note": null,
      "score": 0.5,
      "updated_at": "2026-09-01T12:25:00Z"
    },
    "id": "1617",
    "links": {
      "self": "http://company.brmbl.io/v1/quality_scores/1617"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5068",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/production_tasks/5068",
          "self": "http://company.brmbl.io/v1/quality_scores/1617/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "19770",
          "type": "users"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/users/19770",
          "self": "http://company.brmbl.io/v1/quality_scores/1617/relationships/user"
        }
      }
    },
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "http://company.brmbl.io/v1/quality_scores/1617"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "The given quality score could not be found.",
      "status": "404",
      "title": "Quality Score Not Found"
    }
  ]
}

Delete a Quality Score.

Request

DELETE /v1/quality_scores/{id}

Required scope: quality:write

Parameters

Parameter Description In Type Required Default Example
id The ID of the quality score to delete. path integer true 233

Responses

Status Description Schema
200 Quality Score Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a quality score

Request: Retrieve a quality score

curl -X GET https://api.COMPANY.brmbl.io/v1/quality_scores/1636 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_bGXEKEZA_5oX8saD0hbDA8YTmsN9FCjhk" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2023-01-01",
      "inserted_at": "2026-09-01T12:25:00Z",
      "note": null,
      "score": 0.5,
      "updated_at": "2026-09-01T12:25:00Z"
    },
    "id": "1636",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1636"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "19798",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19798",
          "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1636/relationships/user"
        }
      }
    },
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1636"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "Could not find quality score with id: 1638",
      "status": "404",
      "title": "Resource Not Found"
    }
  ]
}

You can fetch the details of a single quality score.

Request

GET /v1/quality_scores/{id}

Required scope: quality:read

Parameters

Parameter Description In Type Required Default Example
id Quality score ID to retrieve. path integer true 233
include Comma separated list of relationships to include. query array false user
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Quality Score Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all quality scores

Request: List of quality scores (filtered by date)

curl -X GET https://api.COMPANY.brmbl.io/v1/quality_scores?date=2023-01-02&page[number]=1&page[size]=10&sort=score&fields[quality_scores]=score,date \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_re0gnDSH_BrIFUWUSPog9E7VruPbieP1n" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "date": "2023-01-02",
        "score": 0.25
      },
      "id": "1629",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1629"
      },
      "relationships": {
        "user": {
          "data": {
            "id": "19790",
            "type": "users"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/users/19790",
            "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1629/relationships/user"
          }
        }
      },
      "type": "quality_scores"
    },
    {
      "attributes": {
        "date": "2023-01-02",
        "score": 0.5
      },
      "id": "1630",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1630"
      },
      "relationships": {
        "user": {
          "data": {
            "id": "19791",
            "type": "users"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/users/19791",
            "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1630/relationships/user"
          }
        }
      },
      "type": "quality_scores"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/quality_scores?date=2023-01-02&fields%5Bquality_scores%5D=score%2Cdate&page%5Bnumber%5D=1&page%5Bsize%5D=10&sort=score"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 10,
      "total_entries": 2,
      "total_pages": 1
    }
  }
}

You can fetch a list of all quality scores.

Request

GET /v1/quality_scores

Required scope: quality:read

Parameters

Parameter Description In Type Required Default Example
date Filter results scored for this date query string false 2022-02-28
user_id Filter results with this Bramble user ID query integer false 12
group_id Filter scores for users in this Bramble group query integer false 2
production_task_id Filter results with this Bramble task ID query integer false 5
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -date,-score
include Comma separated list of relationships to include. query array false user
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Quality Scores
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Quality Score

Request: Update a quality score

curl -X PATCH https://api.COMPANY.brmbl.io/v1/quality_scores/1621 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_KYwcQRLn_igCfvrgiCybE2kjbgxSJaM27" \
-d @- << EOF

{
  "date": "2023-05-01",
  "score": 0.9,
  "user_id": "19775",
  "note": "updated note",
  "production_task_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2023-05-01",
      "inserted_at": "2026-09-01T12:25:00Z",
      "note": "updated note",
      "score": 0.9,
      "updated_at": "2026-09-01T12:25:00Z"
    },
    "id": "1621",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1621"
    },
    "relationships": {},
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1621"
  }
}

Update a quality score.

Request

PUT /v1/quality_scores/{id}

Required scope: quality:write

Parameters

Parameter Description In Type Required Default Example
id Quality score ID to update. path integer true 233

Responses

Status Description Schema
200 Quality Score Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Service Level Scores

Create a Service Level score

Request: Create a service level

curl -X POST https://api.COMPANY.brmbl.io/v1/service_levels \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_MWGAFb2x_nl2SpNTYUAG39d6Em31RMvsB" \
-d @- << EOF

{
  "date": "2022-02-23",
  "score": 0.55,
  "note": null,
  "production_task_id": 5067
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:24:59Z",
      "note": null,
      "score": 0.55,
      "updated_at": "2026-09-01T12:24:59Z"
    },
    "id": "712",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/service_levels/712"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5067",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5067",
          "self": "http://api.COMPANY.brmbl.io/v1/service_levels/712/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels/712"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid format. Expected :date",
      "source": {
        "pointer": "/date"
      },
      "title": "Invalid value"
    }
  ]
}

Request: Several service levels can exist for the same date + production_task parameter

curl -X POST https://api.COMPANY.brmbl.io/v1/service_levels \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_JXEEZurF_krqXqq6VzPp0xTnjocPYCuRF" \
-d @- << EOF

{
  "date": "2022-02-23",
  "score": 0.55,
  "note": null,
  "production_task_id": 5053
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:24:59Z",
      "note": null,
      "score": 0.55,
      "updated_at": "2026-09-01T12:24:59Z"
    },
    "id": "694",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/service_levels/694"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5053",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5053",
          "self": "http://api.COMPANY.brmbl.io/v1/service_levels/694/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels/694"
  }
}

You can create a service level score for a task.

A service level ranks the SLA for a Production Task on a specific date.

Request

POST /v1/service_levels

Required scope: quality:write

Responses

Status Description Schema
201 Service Level Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Service Level

Request: Deletes a service level

curl -X DELETE https://api.COMPANY.brmbl.io/v1/service_levels/691 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_FckSoMox_kfCQuyHZwl2DNE3ULOxcYduM" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:24:59Z",
      "note": null,
      "score": 0.1,
      "updated_at": "2026-09-01T12:24:59Z"
    },
    "id": "691",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/service_levels/691"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5051",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5051",
          "self": "http://api.COMPANY.brmbl.io/v1/service_levels/691/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels/691"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "Could not find service level with id: 686",
      "status": "404",
      "title": "Resource Not Found"
    }
  ]
}

Delete a Service Level.

Request

DELETE /v1/service_levels/{id}

Required scope: quality:write

Parameters

Parameter Description In Type Required Default Example
id The ID of the service level to delete. path integer true 123

Responses

Status Description Schema
200 Service Levels
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a service level

Request: Retrieve a service level

curl -X GET https://api.COMPANY.brmbl.io/v1/service_levels/701 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_xuFlQ1Ue_LFzpEjwIqiSolGfk1XyXipIO" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:24:59Z",
      "note": null,
      "score": 0.1,
      "updated_at": "2026-09-01T12:24:59Z"
    },
    "id": "701",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/service_levels/701"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5058",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5058",
          "self": "http://api.COMPANY.brmbl.io/v1/service_levels/701/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels/701"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "Could not find service level with id: 703",
      "status": "404",
      "title": "Resource Not Found"
    }
  ]
}

You can fetch the details of a single service level score.

Request

GET /v1/service_levels/{id}

Required scope: quality:read

Parameters

Parameter Description In Type Required Default Example
id The ID of the Service level to fetch path integer true 233
include Comma separated list of relationships to include. query array false production_task
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Service Level Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all service levels

Request: List all service levels, filtered.

curl -X GET https://api.COMPANY.brmbl.io/v1/service_levels?date=2023-01-01,2023-01-02&page[number]=1&page[size]=100&sort=-score,date&fields[service_levels]=score \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_hCmSRsVk_9Y0VHaXKmUvQY1Utl4rofsxw" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "score": 0.9
      },
      "id": "696",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/service_levels/696"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "5055",
            "type": "production_tasks"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5055",
            "self": "http://api.COMPANY.brmbl.io/v1/service_levels/696/relationships/production_task"
          }
        }
      },
      "type": "service_levels"
    },
    {
      "attributes": {
        "score": 0.5
      },
      "id": "695",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/service_levels/695"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "5054",
            "type": "production_tasks"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5054",
            "self": "http://api.COMPANY.brmbl.io/v1/service_levels/695/relationships/production_task"
          }
        }
      },
      "type": "service_levels"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels?date=2023-01-01%2C2023-01-02&fields%5Bservice_levels%5D=score&page%5Bnumber%5D=1&page%5Bsize%5D=100&sort=-score%2Cdate"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 100,
      "total_entries": 2,
      "total_pages": 1
    }
  }
}

You can fetch a list of all service level scores.

You can optionally filter the list by score date and production task.

You can also optionally request the page and page size to limit and paginate through the results.

Request

GET /v1/service_levels

Required scope: quality:read

Parameters

Parameter Description In Type Required Default Example
date Filter results scored for this date query array false 2022-02-28,2022-02-29
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -date,-score
include Comma separated list of relationships to include. query array false production_task
fields Comma separated list of fields to return. query object false
page query Page false
production_task_id Filter results by task id query array false 12

Responses

Status Description Schema
200 Service Levels
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Service Level score

Request: Partially update a service level

curl -X PATCH https://api.COMPANY.brmbl.io/v1/service_levels/708 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_DSB5K4HK_MdAxyWGP5kcKoWFUXpzscqHG" \
-d @- << EOF

{
  "date": null,
  "score": 0.75,
  "note": "updated",
  "production_task_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2026-09-01T12:24:59Z",
      "note": "updated",
      "score": 0.75,
      "updated_at": "2026-09-01T12:24:59Z"
    },
    "id": "708",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/service_levels/708"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "5064",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/5064",
          "self": "http://api.COMPANY.brmbl.io/v1/service_levels/708/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels/708"
  }
}

Update a service level score.

Request

PUT /v1/service_levels/{id}

Required scope: quality:write

Parameters

Parameter Description In Type Required Default Example
id The ID of the Service level to update path integer true 233

Responses

Status Description Schema
200 Service Level Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Supporting Tasks

Create a Supporting Task

Request: Create a supporting task

curl -X POST https://api.COMPANY.brmbl.io/v1/supporting_tasks \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_iVXOC6bY_YesTU2jjB95KgvGxf8N7p7h1" \
-d @- << EOF

{
  "name": "Project Kickoff",
  "state": null,
  "description": "Initial project kickoff meeting.",
  "category": "PROJ"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "category": "proj",
      "description": "Initial project kickoff meeting.",
      "inserted_at": "2026-09-01T12:24:57Z",
      "name": "Project Kickoff",
      "state": "active",
      "updated_at": "2026-09-01T12:24:57Z"
    },
    "id": "2611",
    "links": {
      "self": "http://www.example.com/v1/supporting_tasks/2611"
    },
    "relationships": {},
    "type": "supporting_tasks"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/supporting_tasks/2611"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: description",
      "source": {
        "pointer": "/description"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: category",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Create a new supporting task.

Request

POST /v1/supporting_tasks

Required scope: operations:write

Responses

Status Description Schema
201 SupportingTask
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a Supporting Task

Request: Delete a supporting task

curl -X DELETE https://api.COMPANY.brmbl.io/v1/supporting_tasks/2604 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_2IoVnJKN_UJzzxLaiOMXw93zMX5ZtcysJ" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "train",
      "description": "2tzHTMlo",
      "inserted_at": "2026-09-01T12:24:57Z",
      "name": "Compliance Training",
      "state": "active",
      "updated_at": "2026-09-01T12:24:57Z"
    },
    "id": "2604",
    "links": {
      "self": "http://www.example.com/v1/supporting_tasks/2604"
    },
    "relationships": {},
    "type": "supporting_tasks"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/supporting_tasks/2604"
  }
}

Delete a supporting task.

Request

DELETE /v1/supporting_tasks/{id}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
id Supporting Task ID to delete. path integer true 233

Responses

Status Description Schema
200 SupportingTask
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a supporting task

Request: Retrieve a supporting task

curl -X GET https://api.COMPANY.brmbl.io/v1/supporting_tasks/2621 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Q0as54qo_L0haNHT5WvTNDfsIKS3VzZmN" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "train",
      "description": "nXC6JZC5",
      "inserted_at": "2026-09-01T12:24:57Z",
      "name": "Compliance Training",
      "state": "active",
      "updated_at": "2026-09-01T12:24:57Z"
    },
    "id": "2621",
    "links": {
      "self": "http://www.example.com/v1/supporting_tasks/2621"
    },
    "relationships": {},
    "type": "supporting_tasks"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/supporting_tasks/2621"
  }
}

You can fetch the details of a single supporting task.

Request

GET /v1/supporting_tasks/{id}

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
id Supporting task ID to retrieve. path integer true 233

Responses

Status Description Schema
200 SupportingTask
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all Supporting Tasks

Request: List all supporting tasks (filtered).

curl -X GET https://api.COMPANY.brmbl.io/v1/supporting_tasks?state=active \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Gr7ncypC_w1zVVGMbG0hUOrYCmssje1zp" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "category": "train",
        "description": "fV0hV+5U",
        "inserted_at": "2026-09-01T12:24:57Z",
        "name": "Compliance Training",
        "state": "active",
        "updated_at": "2026-09-01T12:24:57Z"
      },
      "id": "2631",
      "links": {
        "self": "http://www.example.com/v1/supporting_tasks/2631"
      },
      "relationships": {},
      "type": "supporting_tasks"
    }
  ],
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/supporting_tasks?state=active"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 25,
      "total_entries": 1,
      "total_pages": 1
    }
  }
}

You can fetch a list of all supporting tasks.

Request

GET /v1/supporting_tasks

Required scope: operations:read

Parameters

Parameter Description In Type Required Default Example
category Filter the tasks in given category(ies). query array false meeting,leadership
state Filter by the task status. query array false active,archived
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,updated_at,-state
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Supporting Tasks
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a Supporting Task

Request: Update a supporting task

curl -X PATCH https://api.COMPANY.brmbl.io/v1/supporting_tasks/2615 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_BKHUSqVM_JGFM7szfPPMpBGS9wMEHkDEs" \
-d @- << EOF

{
  "name": "Renamed",
  "state": null,
  "description": "vyfVTH6Q",
  "category": "LEAD"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "category": "lead",
      "description": "vyfVTH6Q",
      "inserted_at": "2026-09-01T12:24:57Z",
      "name": "Renamed",
      "state": "active",
      "updated_at": "2026-09-01T12:24:57Z"
    },
    "id": "2615",
    "links": {
      "self": "http://www.example.com/v1/supporting_tasks/2615"
    },
    "relationships": {},
    "type": "supporting_tasks"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/supporting_tasks/2615"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/category"
      },
      "title": "Invalid value"
    }
  ]
}

Update an existing supporting task.

Request

PUT /v1/supporting_tasks/{id}

Required scope: operations:write

Parameters

Parameter Description In Type Required Default Example
id Supporting Task ID to update. path integer true 233

Responses

Status Description Schema
200 SupportingTask
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

UserPlanEntries

Deletes a user plan entry.

Request: Delete a user plan leave entry

curl -X DELETE https://api.COMPANY.brmbl.io/v1/user_plan_entries/6793 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_5hmZmkIg_1OC018llPMBA4voub6jdcCUt" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2025-05-23",
      "inserted_at": "2026-09-01T12:25:04Z",
      "minutes": "450",
      "type": "leave_type",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "6793",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6793"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19821",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19821",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6793/relationships/group"
        }
      },
      "leave_plan": {
        "data": {
          "id": "325",
          "type": "leave_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/leave_plans/325",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6793/relationships/leave_plan"
        }
      },
      "user": {
        "data": {
          "id": "19966",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19966",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6793/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1476",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1476",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6793/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6793"
  }
}

Deletes a user's planned entry. A leave entry removes its leave plan; base time and supporting task entries are deleted directly.

Request

DELETE /v1/user_plan_entries/{id}

Required scope: plans:write

Parameters

Parameter Description In Type Required Default Example
id User plan entry ID to delete. path integer true 233

Responses

Status Description Schema
200 User Plan Entries Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Retrieve a user plan entry.

Request: Returns a user plan entry

curl -X GET https://api.COMPANY.brmbl.io/v1/user_plan_entries/6828 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_CKFiX1Ap_GSqiiASWDoD2FsKoyJ2HSb1H" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2026-09-07",
      "inserted_at": "2026-09-01T12:25:05Z",
      "minutes": "450",
      "type": "base_time",
      "updated_at": "2026-09-01T12:25:05Z"
    },
    "id": "6828",
    "links": {
      "self": "http://company.brmbl.io/v1/user_plan_entries/6828"
    },
    "relationships": {},
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://company.brmbl.io/v1/user_plan_entries/6828"
  }
}

Request: Returns a user plan entry

curl -X GET https://api.COMPANY.brmbl.io/v1/user_plan_entries/6811?include=user_plan \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_PT6xgNJ2_7k0OLiot1l9MbHRgOvuDwvgG" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2026-09-07",
      "inserted_at": "2026-09-01T12:25:04Z",
      "minutes": "450",
      "type": "base_time",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "6811",
    "links": {
      "self": "http://company.brmbl.io/v1/user_plan_entries/6811"
    },
    "relationships": {
      "user_plan": {
        "data": {
          "id": "1484",
          "type": "user_plans"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/user_plans/1484",
          "self": "http://company.brmbl.io/v1/user_plan_entries/6811/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [
    {
      "attributes": {
        "contribution": 0.33,
        "from": "2026-09-07",
        "inserted_at": "2026-09-01T12:25:04Z",
        "until": "2026-09-13",
        "updated_at": "2026-09-01T12:25:04Z",
        "week_number": 37,
        "year": 2026
      },
      "id": "1484",
      "links": {
        "self": "http://company.brmbl.io/v1/user_plans/1484"
      },
      "relationships": {},
      "type": "user_plans"
    }
  ],
  "links": {
    "self": "http://company.brmbl.io/v1/user_plan_entries/6811"
  }
}

You can fetch the details of a single user plan entry.

Request

GET /v1/user_plan_entries/{id}

Required scope: plans:read

Parameters

Parameter Description In Type Required Default Example
id User plan entry ID to retrieve. path integer true 233
include Comma separated list of relationships to include. query array false users
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 User Plan Entries Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Upserts a user plan entry.

Request: Create a user plan supporting task entry

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/1486/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_rADUlWDD_GJvIzsLqLhJp5fgr1XPXrCtD" \
-d @- << EOF

{
  "type": "supporting_task",
  "date": "2022-02-23",
  "minutes": 450,
  "user_id": "19982",
  "supporting_task_id": "2635"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:04Z",
      "minutes": "450",
      "type": "supporting_task",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "6816",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6816"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19837",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19837",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6816/relationships/group"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2635",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/2635",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6816/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "19982",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19982",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6816/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1486",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1486",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6816/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6816"
  }
}

Request: Update a user plan supporting task entry

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/1503/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_bdZEimF2_A3bn7H56nYNIGe8InoscxXfQ" \
-d @- << EOF

{
  "type": "supporting_task",
  "date": "2022-02-23",
  "minutes": 450,
  "user_id": "20012",
  "supporting_task_id": "2638"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:05Z",
      "minutes": "900",
      "type": "supporting_task",
      "updated_at": "2026-09-01T12:25:06Z"
    },
    "id": "6849",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6849"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19867",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19867",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6849/relationships/group"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2638",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/2638",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6849/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "20012",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/20012",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6849/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1503",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1503",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6849/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6849"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/type"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: leave_type_id",
      "source": {
        "pointer": "/leave_type_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    }
  ]
}

Request: Create a user plan leave entry

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/1473/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_UDk1jLQB_ubb2dAToKphvmoYovqUEfJqR" \
-d @- << EOF

{
  "type": "leave_type",
  "date": "2025-05-23",
  "minutes": 450,
  "user_id": "19964",
  "note": null,
  "with_checkin": true,
  "leave_type_id": "1279"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2025-05-23",
      "inserted_at": "2026-09-01T12:25:04Z",
      "minutes": "450",
      "type": "leave_type",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "6787",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6787"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19819",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19819",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6787/relationships/group"
        }
      },
      "leave_plan": {
        "data": {
          "id": "324",
          "type": "leave_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/leave_plans/324",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6787/relationships/leave_plan"
        }
      },
      "user": {
        "data": {
          "id": "19964",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19964",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6787/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1474",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1474",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6787/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6787"
  }
}

Request: Update a user plan leave entry

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/1490/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_O48FRC83_yjCznQExuNBg4kHaaVJhGYLN" \
-d @- << EOF

{
  "type": "leave_type",
  "date": "2025-05-23",
  "minutes": 450,
  "user_id": "19990",
  "note": null,
  "with_checkin": true,
  "leave_type_id": "1284"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2025-05-23",
      "inserted_at": "2026-09-01T12:25:05Z",
      "minutes": "450",
      "type": "leave_type",
      "updated_at": "2026-09-01T12:25:05Z"
    },
    "id": "6825",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6825"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19845",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19845",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6825/relationships/group"
        }
      },
      "leave_plan": {
        "data": {
          "id": "329",
          "type": "leave_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/leave_plans/329",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6825/relationships/leave_plan"
        }
      },
      "user": {
        "data": {
          "id": "19990",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19990",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6825/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1491",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1491",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6825/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6825"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/type"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/minutes"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: supporting_task_id",
      "source": {
        "pointer": "/supporting_task_id"
      },
      "title": "Invalid value"
    }
  ]
}

Request: Create a user plan base time entry

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/1483/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_DYG4ZS86_lanvvKlqayllEM3edN1UNyLk" \
-d @- << EOF

{
  "type": "base_time",
  "date": "2022-02-23",
  "minutes": 450,
  "user_id": "19976",
  "with_checkin": true
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:04Z",
      "minutes": "450",
      "type": "base_time",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "6810",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6810"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19831",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19831",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6810/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19976",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19976",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6810/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1483",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1483",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6810/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6810"
  }
}

Request: Create a user plan base time entry without cascading to a check-in entry

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/1472/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_pliDwNHa_nBwlPXH1Lne5Nf8Tc00HOkeJ" \
-d @- << EOF

{
  "type": "base_time",
  "date": "2022-02-23",
  "minutes": 450,
  "user_id": "19962",
  "with_checkin": false
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:04Z",
      "minutes": "450",
      "type": "base_time",
      "updated_at": "2026-09-01T12:25:04Z"
    },
    "id": "6781",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6781"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19817",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19817",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6781/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19962",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19962",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6781/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1472",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1472",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6781/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6781"
  }
}

Request: Update a user plan supporting task entry

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/1488/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_2mvDr2vi_IlNd2SXFBbhDi5b1ZWJ1tMvS" \
-d @- << EOF

{
  "type": "base_time",
  "date": "2022-02-23",
  "minutes": 450,
  "user_id": "19986",
  "with_checkin": true
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2026-09-01T12:25:04Z",
      "minutes": "900",
      "type": "base_time",
      "updated_at": "2026-09-01T12:25:05Z"
    },
    "id": "6818",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6818"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19841",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19841",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6818/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19986",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19986",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6818/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1488",
          "type": "user_plans"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/user_plans/1488",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6818/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/6818"
  }
}

Tries to create a user's planned supporting task or base time entry. If an existing entry exists, it will update the existing one instead

Request

PUT /v1/user_plans/{id}/user_plan_entry

Required scope: plans:write

Parameters

Parameter Description In Type Required Default Example
x-lineage-data Log optional lineage data (a Base 64 encoded JSON object) with which to build a history. header string false

Responses

Status Description Schema
200 User Plan Entries Response
201 User Plan Entries Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

UserPlans

Creates a user's plan for the week

Request: Creates user's plan for a week

curl -X POST https://api.COMPANY.brmbl.io/v1/user_plans \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_3fJs3852_P6f6EWzKeksULp7mGUg4LJTw" \
-d @- << EOF

{
  "year": 2024,
  "user_id": "19551",
  "week_number": 1,
  "contribution": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "contribution": 0.5,
      "from": "2024-01-01",
      "inserted_at": "2026-09-01T12:24:56Z",
      "until": "2024-01-07",
      "updated_at": "2026-09-01T12:24:56Z",
      "week_number": 1,
      "year": 2024
    },
    "id": "1460",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1460"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19395",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19395",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1460/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19551",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19551",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1460/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1460"
  }
}

Request: Creates user's plan with contribution

curl -X POST https://api.COMPANY.brmbl.io/v1/user_plans \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_x20CzbFX_UC6zNQ2LHyiwwzL6VAhVJN67" \
-d @- << EOF

{
  "year": 2024,
  "user_id": "19561",
  "week_number": 1,
  "contribution": 0.6
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "contribution": 0.6,
      "from": "2024-01-01",
      "inserted_at": "2026-09-01T12:24:56Z",
      "until": "2024-01-07",
      "updated_at": "2026-09-01T12:24:56Z",
      "week_number": 1,
      "year": 2024
    },
    "id": "1464",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1464"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19405",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19405",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1464/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19561",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19561",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1464/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1464"
  }
}

Request: Creates user's plan with contribution

curl -X POST https://api.COMPANY.brmbl.io/v1/user_plans \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_hPjWspzd_GMHSEo2PpOc5YdGp3i1yJw4C" \
-d @- << EOF

{
  "year": 2024,
  "user_id": "19573",
  "week_number": 1,
  "contribution": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "contribution": 0.5,
      "from": "2024-01-01",
      "inserted_at": "2026-09-01T12:24:56Z",
      "until": "2024-01-07",
      "updated_at": "2026-09-01T12:24:56Z",
      "week_number": 1,
      "year": 2024
    },
    "id": "1470",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1470"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19417",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19417",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1470/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19573",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19573",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1470/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1470"
  }
}

Request: Creates user's plan with contribution

curl -X POST https://api.COMPANY.brmbl.io/v1/user_plans \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ZOu3zQui_oLRd0cs1sgTi36vZNaeZGA00" \
-d @- << EOF

{
  "year": 2024,
  "user_id": "19563",
  "week_number": 1,
  "contribution": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "contribution": 0.8,
      "from": "2024-01-01",
      "inserted_at": "2026-09-01T12:24:56Z",
      "until": "2024-01-07",
      "updated_at": "2026-09-01T12:24:56Z",
      "week_number": 1,
      "year": 2024
    },
    "id": "1466",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1466"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19407",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19407",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1466/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19563",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19563",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1466/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1466"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/week_number"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/year"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "Plan is already defined for this time period",
      "source": {
        "pointer": ":user_id"
      },
      "title": "Conflict"
    }
  ]
}

Creates user's plan for a week.

Request

POST /v1/user_plans

Required scope: plans:write

Parameters

Parameter Description In Type Required Default Example
x-lineage-data Log optional lineage data (a Base 64 encoded JSON object) with which to build a history. header string false

Responses

Status Description Schema
201 User Plans Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Gets or creates a user's plan.

Request: Creates a user's plan for a week

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_MNSlLv9v_VzaCuIg9lFbk8cF5SrAbTDqp" \
-d @- << EOF

{
  "year": 2024,
  "user_id": "19567",
  "week_number": 1,
  "contribution": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "contribution": 0.5,
      "from": "2024-01-01",
      "inserted_at": "2026-09-01T12:24:56Z",
      "until": "2024-01-07",
      "updated_at": "2026-09-01T12:24:56Z",
      "week_number": 1,
      "year": 2024
    },
    "id": "1468",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1468"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19411",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19411",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1468/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19567",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19567",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1468/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1468"
  }
}

Request: Creates user's plan with contribution

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ZTkDNH6i_uAFlUuvCQqXKaH0eWaXsrRua" \
-d @- << EOF

{
  "year": 2024,
  "user_id": "19557",
  "week_number": 1,
  "contribution": 0.6
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "contribution": 0.6,
      "from": "2024-01-01",
      "inserted_at": "2026-09-01T12:24:56Z",
      "until": "2024-01-07",
      "updated_at": "2026-09-01T12:24:56Z",
      "week_number": 1,
      "year": 2024
    },
    "id": "1462",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1462"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19401",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19401",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1462/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19557",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19557",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1462/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1462"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/week_number"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid integer. Got: string",
      "source": {
        "pointer": "/year"
      },
      "title": "Invalid value"
    }
  ]
}

Request: Gets existing user plan from parameter

curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_5GKzwgBH_BnUY0I61zjNSsFZw2nIr3PTT" \
-d @- << EOF

{
  "year": 2024,
  "user_id": "19559",
  "week_number": 1,
  "contribution": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "contribution": 0.5,
      "from": "2024-01-01",
      "inserted_at": "2026-09-01T12:24:56Z",
      "until": "2024-01-07",
      "updated_at": "2026-09-01T12:24:56Z",
      "week_number": 1,
      "year": 2024
    },
    "id": "1463",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1463"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19403",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19403",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1463/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "19559",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/19559",
          "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1463/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1463"
  }
}

Tries to get an existing plan, and will create if no existing plan is found instead.

Request

PUT /v1/user_plans

Required scope: plans:write

Parameters

Parameter Description In Type Required Default Example
x-lineage-data Log optional lineage data (a Base 64 encoded JSON object) with which to build a history. header string false

Responses

Status Description Schema
201 User Plans Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Users

Create a User (bare record)

Request: Create a user

curl -X POST https://api.COMPANY.brmbl.io/v1/users \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_rob5UQmA_fTcBN2hQHe29oUvQiIovIWl5" \
-d @- << EOF

{
  "profile": {
    "timezone": "Etc/UTC",
    "full_name": "New Hire",
    "preferred_first_name": "New"
  },
  "email": "newhire@example.com",
  "group_id": 19874,
  "employment": null,
  "account_role": null,
  "team_role": "TEAM_CONTRIBUTOR"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "account_role": null,
      "email": "newhire@example.com",
      "full_name": "New Hire",
      "inserted_at": "2026-09-01T12:25:06Z",
      "preferred_first_name": "New",
      "state": "new",
      "team_role": "team_contributor",
      "timezone": "Etc/UTC",
      "updated_at": "2026-09-01T12:25:06Z"
    },
    "id": "20024",
    "links": {
      "self": "http://www.example.com/v1/users/20024"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19874",
          "type": "groups"
        },
        "links": {
          "related": "http://www.example.com/v1/groups/19874",
          "self": "http://www.example.com/v1/users/20024/relationships/group"
        }
      }
    },
    "type": "users"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/users/20024"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: group_id",
      "source": {
        "pointer": "/group_id"
      },
      "title": "Invalid value"
    },
    {
      "detail": "Missing field: profile",
      "source": {
        "pointer": "/profile"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Missing field: profile",
      "source": {
        "pointer": "/profile"
      },
      "title": "Invalid value"
    }
  ]
}

Create a new user.

Request

POST /v1/users

Required scope: users:write

Responses

Status Description Schema
201 User
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Fetch a user by ID

Request: Fetch a user by ID

curl -X GET https://api.COMPANY.brmbl.io/v1/users/20046 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Wn8XppyI_agaxntjyO4XZWxv5AtsJJ9st" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "account_role": null,
      "email": "magnus2032@heller.info",
      "full_name": "Jane Doe",
      "inserted_at": "2026-09-01T12:25:06Z",
      "preferred_first_name": "Something",
      "state": "invited",
      "team_role": "team_owner",
      "timezone": "Africa/Abidjan",
      "updated_at": "2026-09-01T12:25:06Z"
    },
    "id": "20046",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/users/20046"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19889",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/19889",
          "self": "http://api.COMPANY.brmbl.io/v1/users/20046/relationships/group"
        }
      }
    },
    "type": "users"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/users/20046"
  }
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "Could not find user with id: 20164",
      "status": "404",
      "title": "Resource Not Found"
    }
  ]
}

Returns the user identified by an internal Bramble ID.

Request

GET /v1/users/{id}

Required scope: users:read

Parameters

Parameter Description In Type Required Default Example
id User ID path integer true 233
include Comma separated list of relationships to include. query array false group
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 User
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List all users

Request: List all users

curl -X GET https://api.COMPANY.brmbl.io/v1/users \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_bQl3sSIg_IZieeETkgD4WLflYCmitpvct" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "account_role": "account_owner",
        "email": "bob@foo.com",
        "full_name": "Bob Owner",
        "inserted_at": "2026-09-01T12:25:06Z",
        "preferred_first_name": "Bob",
        "state": "new",
        "team_role": null,
        "timezone": "Etc/UTC",
        "updated_at": "2026-09-01T12:25:06Z"
      },
      "id": "20037",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/20037"
      },
      "relationships": {
        "group": {
          "data": {
            "id": "19882",
            "type": "groups"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/groups/19882",
            "self": "http://api.COMPANY.brmbl.io/v1/users/20037/relationships/group"
          }
        }
      },
      "type": "users"
    },
    {
      "attributes": {
        "account_role": null,
        "email": "frank@foo.com",
        "full_name": "Frank Furter",
        "inserted_at": "2026-09-01T12:25:06Z",
        "preferred_first_name": "Frank",
        "state": "invited",
        "team_role": "team_owner",
        "timezone": "America/Los_Angeles",
        "updated_at": "2026-09-01T12:25:06Z"
      },
      "id": "20038",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/20038"
      },
      "relationships": {
        "group": {
          "data": {
            "id": "19883",
            "type": "groups"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/groups/19883",
            "self": "http://api.COMPANY.brmbl.io/v1/users/20038/relationships/group"
          }
        }
      },
      "type": "users"
    },
    {
      "attributes": {
        "account_role": null,
        "email": "aide@foo.com",
        "full_name": "Aide Alton",
        "inserted_at": "2026-09-01T12:25:06Z",
        "preferred_first_name": "Aide",
        "state": "invited",
        "team_role": "team_contributor",
        "timezone": "Etc/UTC",
        "updated_at": "2026-09-01T12:25:06Z"
      },
      "id": "20039",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/20039"
      },
      "relationships": {
        "group": {
          "data": {
            "id": "19883",
            "type": "groups"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/groups/19883",
            "self": "http://api.COMPANY.brmbl.io/v1/users/20039/relationships/group"
          }
        }
      },
      "type": "users"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/users"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 25,
      "total_entries": 3,
      "total_pages": 1
    }
  }
}

Request: Returns a list of users, filtered

curl -X GET https://api.COMPANY.brmbl.io/v1/users?email=bob@foo.com,frank@foo.com&sort=-full_name&page[number]=1&page[size]=3 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_dWw7qqu0_KryEhYghJzq6NT1FyhyUgKsy" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "account_role": null,
        "email": "frank@foo.com",
        "full_name": "Frank Furter",
        "inserted_at": "2026-09-01T12:25:06Z",
        "preferred_first_name": "Frank",
        "state": "invited",
        "team_role": "team_owner",
        "timezone": "America/Los_Angeles",
        "updated_at": "2026-09-01T12:25:06Z"
      },
      "id": "20061",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/20061"
      },
      "relationships": {
        "group": {
          "data": {
            "id": "19900",
            "type": "groups"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/groups/19900",
            "self": "http://api.COMPANY.brmbl.io/v1/users/20061/relationships/group"
          }
        }
      },
      "type": "users"
    },
    {
      "attributes": {
        "account_role": "account_owner",
        "email": "bob@foo.com",
        "full_name": "Bob Owner",
        "inserted_at": "2026-09-01T12:25:06Z",
        "preferred_first_name": "Bob",
        "state": "new",
        "team_role": null,
        "timezone": "Etc/UTC",
        "updated_at": "2026-09-01T12:25:06Z"
      },
      "id": "20060",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/20060"
      },
      "relationships": {
        "group": {
          "data": {
            "id": "19899",
            "type": "groups"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/groups/19899",
            "self": "http://api.COMPANY.brmbl.io/v1/users/20060/relationships/group"
          }
        }
      },
      "type": "users"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/users?email=bob%40foo.com%2Cfrank%40foo.com&page%5Bnumber%5D=1&page%5Bsize%5D=3&sort=-full_name"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 3,
      "total_entries": 2,
      "total_pages": 1
    }
  }
}

Returns a list of users.

Request

GET /v1/users

Required scope: users:read

Parameters

Parameter Description In Type Required Default Example
email Filter by email(s) query array false example@brmbl.io,foo@bar.com
group_id Filter users in these groups, including groups above these in hierarchy query array false 1,51,42
state Filter users in these states query array false archived
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -email,updated_at
include Comma separated list of relationships to include. query array false group
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Task Input
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Update a User

Request: Update a user's role, profile, and employment

curl -X PATCH https://api.COMPANY.brmbl.io/v1/users/20059 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_NluJcC6I_i9qlU1NHs6wZ4OqndGM1XUcu" \
-d @- << EOF

{
  "profile": {
    "full_name": "Renamed"
  },
  "employment": {
    "type": "PART",
    "hours": 20.0
  },
  "account_role": null,
  "team_role": "TEAM_OWNER"
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "account_role": null,
      "email": "target@example.com",
      "full_name": "Renamed",
      "inserted_at": "2026-09-01T12:25:06Z",
      "preferred_first_name": "Some",
      "state": "new",
      "team_role": "team_owner",
      "timezone": "Etc/UTC",
      "updated_at": "2026-09-01T12:25:06Z"
    },
    "id": "20059",
    "links": {
      "self": "http://www.example.com/v1/users/20059"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "19898",
          "type": "groups"
        },
        "links": {
          "related": "http://www.example.com/v1/groups/19898",
          "self": "http://www.example.com/v1/users/20059/relationships/group"
        }
      }
    },
    "type": "users"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/users/20059"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Invalid value for enum",
      "source": {
        "pointer": "/team_role"
      },
      "title": "Invalid value"
    }
  ]
}

Updates a user's role, profile, and/or employment.

Request

PUT /v1/users/{id}

Required scope: users:write

Parameters

Parameter Description In Type Required Default Example
id User ID to update. path integer true 233

Responses

Status Description Schema
200 User
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Move a User to a different group

Request: Move a user to a different group

curl -X PUT https://api.COMPANY.brmbl.io/v1/users/20044/group \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Lo2tR3Ak_T4yTIMm0JabNXkO3SCkEp2uU" \
-d @- << EOF

{
  "group_id": 19887
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "account_role": null,
      "email": "target@example.com",
      "full_name": "Some User",
      "inserted_at": "2026-09-01T12:25:06Z",
      "preferred_first_name": "Some",
      "state": "new",
      "team_role": "team_contributor",
      "timezone": "Etc/UTC",
      "updated_at": "2026-09-01T12:25:06Z"
    },
    "id": "20044",
    "links": {
      "self": "http://www.example.com/v1/users/20044"
    },
    "relationships": {},
    "type": "users"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/users/20044"
  }
}

Move a user to a different group.

Request

PUT /v1/users/{user_id}/group

Required scope: users:write

Parameters

Parameter Description In Type Required Default Example
user_id User ID to move. path integer true 233

Responses

Status Description Schema
200 User
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Work Items

Create a new work item

Request: Create a new work item

curl -X POST https://api.COMPANY.brmbl.io/v1/work_items \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_iL3hdJjl_1bQGU7H7SZc0uHGMcCwcqefj" \
-d @- << EOF

{
  "status": "in_progress",
  "type": "claim",
  "started_at": null,
  "metadata": {
    "source": "test"
  },
  "namespace": "guidewire",
  "created_at": "2026-01-15T10:00:00Z",
  "external_id": "create-001",
  "completed_at": null,
  "cancelled_at": null,
  "line_of_business_id": null,
  "claim_type_id": null,
  "litigation_status": null,
  "managed_by": null,
  "actionable_at": null,
  "namespace_id": null,
  "snapshot_at": null,
  "assignee_id": null,
  "work_item_sla_target_id": null
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "actionable_at": null,
      "assignee_id": null,
      "cancelled_at": null,
      "claim": null,
      "completed_at": null,
      "created_at": "2026-01-15T10:00:00.000000Z",
      "external_id": "create-001",
      "inserted_at": "2026-09-01T12:25:01Z",
      "metadata": {
        "source": "test"
      },
      "namespace_id": 1271,
      "snapshot_at": null,
      "started_at": null,
      "status": "in_progress",
      "type": "claim",
      "updated_at": "2026-09-01T12:25:01Z",
      "work_item_sla_target_id": null
    },
    "id": "1207",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/work_items/1207"
    },
    "relationships": {},
    "type": "work_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/work_items/1207"
  }
}

Create a new work item. Returns 422 if a work item with the given external_id already exists or if validation fails.

Claims: a work item of type claim requires the four P&C dimensions (line_of_business_id, claim_type_id, litigation_status, managed_by). They are written together, so a partial set is a 422. While the claims feature is still rolling out they may be omitted entirely, in which case no claim record is created — send them on every claim.

Request

POST /v1/work_items

Required scope: work_items:write

Parameters

Parameter Description In Type Required Default Example
x-external-resource-uri Log optional external-resource-uri data with which to build a history. header string false

Responses

Status Description Schema
201 Work Item Response
401 Authentication Error
404 Not Found Error
409 Conflict
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Delete a work item by external ID

Request: Delete a work item by external ID

curl -X DELETE https://api.COMPANY.brmbl.io/v1/work_items/guidewire/del-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_IaczKz5c_ZSzIq5UKoi9BwV1zKpSgQT7E" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "actionable_at": null,
      "assignee_id": null,
      "cancelled_at": null,
      "claim": null,
      "completed_at": null,
      "created_at": null,
      "external_id": "del-001",
      "inserted_at": "2026-09-01T12:25:01Z",
      "metadata": {},
      "namespace_id": 1269,
      "snapshot_at": null,
      "started_at": null,
      "status": "not_started",
      "type": "claim",
      "updated_at": "2026-09-01T12:25:01Z",
      "work_item_sla_target_id": null
    },
    "id": "1205",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/work_items/1205"
    },
    "relationships": {},
    "type": "work_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/work_items/1205"
  }
}

Delete a work item and schedule ETL cleanup. Returns 404 if not found.

Request

DELETE /v1/work_items/{namespace}/{external_id}

Required scope: work_items:write

Parameters

Parameter Description In Type Required Default Example
namespace The namespace code (the work item's origin). path string true guidewire
external_id The external system identifier, unique within the namespace. path string true CLM-123

Responses

Status Description Schema
200 Work Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Get a work item by external ID

Request: Retrieve a work item by external ID

curl -X GET https://api.COMPANY.brmbl.io/v1/work_items/guidewire/show-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4ax3XHJX_ry899xdgMmW6FtCzCPtZgUPF" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "actionable_at": null,
      "assignee_id": null,
      "cancelled_at": null,
      "claim": null,
      "completed_at": null,
      "created_at": null,
      "external_id": "show-001",
      "inserted_at": "2026-09-01T12:25:02Z",
      "metadata": {},
      "namespace_id": 1279,
      "snapshot_at": null,
      "started_at": null,
      "status": "in_progress",
      "type": "claim",
      "updated_at": "2026-09-01T12:25:02Z",
      "work_item_sla_target_id": null
    },
    "id": "1214",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/work_items/1214"
    },
    "relationships": {},
    "type": "work_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/work_items/1214"
  }
}

Retrieve a single work item by its namespace and external_id.

Request

GET /v1/work_items/{namespace}/{external_id}

Required scope: work_items:read

Parameters

Parameter Description In Type Required Default Example
namespace The namespace code (the work item's origin). path string true guidewire
external_id The external system identifier, unique within the namespace. path string true CLM-123

Responses

Status Description Schema
200 Work Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

List work items with filtering and cursor pagination

Request: List work items with cursor pagination

curl -X GET https://api.COMPANY.brmbl.io/v1/work_items?page[size]=2 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ZMYkx8xH_OLEdzJ58EykURIo6wzXrovyD" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "actionable_at": null,
        "assignee_id": null,
        "cancelled_at": null,
        "claim": null,
        "completed_at": null,
        "created_at": null,
        "external_id": "list-003",
        "inserted_at": "2026-09-01T12:25:01Z",
        "metadata": {},
        "namespace_id": 1259,
        "snapshot_at": null,
        "started_at": null,
        "status": "in_progress",
        "type": "claim",
        "updated_at": "2026-09-01T12:25:01Z",
        "work_item_sla_target_id": null
      },
      "id": "1199",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/work_items/1199"
      },
      "relationships": {},
      "type": "work_items"
    },
    {
      "attributes": {
        "actionable_at": null,
        "assignee_id": null,
        "cancelled_at": null,
        "claim": null,
        "completed_at": null,
        "created_at": null,
        "external_id": "list-002",
        "inserted_at": "2026-09-01T12:25:01Z",
        "metadata": {},
        "namespace_id": 1259,
        "snapshot_at": null,
        "started_at": null,
        "status": "in_progress",
        "type": "claim",
        "updated_at": "2026-09-01T12:25:01Z",
        "work_item_sla_target_id": null
      },
      "id": "1198",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/work_items/1198"
      },
      "relationships": {},
      "type": "work_items"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/work_items?page%5Bsize%5D=2"
  },
  "meta": {
    "pagination": {
      "cursors": {
        "after": "g3QAAAACdwJpZGIAAASudwtpbnNlcnRlZF9hdHQAAAANdwttaWNyb3NlY29uZGgCYQBhAHcGc2Vjb25kYQF3CGNhbGVuZGFydxNFbGl4aXIuQ2FsZW5kYXIuSVNPdwVtb250aGEJdwpfX3N0cnVjdF9fdw9FbGl4aXIuRGF0ZVRpbWV3A2RheWEBdwR5ZWFyYgAAB-p3Bm1pbnV0ZWEZdwRob3VyYQx3CXRpbWVfem9uZW0AAAAHRXRjL1VUQ3cJem9uZV9hYmJybQAAAANVVEN3CnV0Y19vZmZzZXRhAHcKc3RkX29mZnNldGEA",
        "before": null
      },
      "total_count": 3
    }
  }
}

Retrieve a paginated list of work items with optional filtering and sorting. Comma-separated values are OR within a field; AND across fields.

Request

GET /v1/work_items

Required scope: work_items:read

Parameters

Parameter Description In Type Required Default Example
status Filter by status (comma-separated for OR). Values: not_started, planned, in_progress, completed, cancelled query array false in_progress,completed
type Filter by type (comma-separated for OR). See work item type enum values. query array false claim,ticket
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -created_at
page query CursorPage false
external_id Filter by exact external_id. query string false
assignee_id Filter by assignee ID. query string false
created_after Filter to items created on or after this datetime (ISO 8601). query string false
created_before Filter to items created on or before this datetime (ISO 8601). query string false
actionable_after Filter to items actionable on or after this datetime. query string false
actionable_before Filter to items actionable on or before this datetime. query string false
completed_after Filter to items completed on or after this datetime. query string false
completed_before Filter to items completed on or before this datetime. query string false

Responses

Status Description Schema
200 Work Items List Response
401 Authentication Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Partially update a work item by external ID

Request: Partially update a work item

curl -X PATCH https://api.COMPANY.brmbl.io/v1/work_items/guidewire/patch-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_aMoIaBtd_gFYCJyWg6rIQxoCSOOWDb7Mf" \
-d @- << EOF

{
  "status": "in_progress",
  "type": null,
  "started_at": null,
  "metadata": null,
  "namespace": null,
  "created_at": null,
  "completed_at": null,
  "cancelled_at": null,
  "actionable_at": null,
  "namespace_id": null,
  "snapshot_at": null,
  "assignee_id": null,
  "work_item_sla_target_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "actionable_at": null,
      "assignee_id": null,
      "cancelled_at": null,
      "claim": null,
      "completed_at": null,
      "created_at": null,
      "external_id": "patch-001",
      "inserted_at": "2026-09-01T12:25:02Z",
      "metadata": {},
      "namespace_id": 1281,
      "snapshot_at": null,
      "started_at": null,
      "status": "in_progress",
      "type": "claim",
      "updated_at": "2026-09-01T12:25:02Z",
      "work_item_sla_target_id": null
    },
    "id": "1216",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/work_items/1216"
    },
    "relationships": {},
    "type": "work_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/work_items/1216"
  }
}

Partial update (PATCH) of an existing work item. Returns 404 if no work item exists with the given external_id.

Merge semantics: Incoming keys overwrite. Null clears. Absent keys preserved. Metadata shallow-merged.

Request

PATCH /v1/work_items/{namespace}/{external_id}

Required scope: work_items:write

Parameters

Parameter Description In Type Required Default Example
namespace The namespace code (the work item's origin). path string true guidewire
external_id The external system identifier, unique within the namespace. path string true CLM-123
x-external-resource-uri Log optional external-resource-uri data with which to build a history. header string false

Responses

Status Description Schema
200 Work Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Upsert a work item by external ID

Request: Upsert a work item by external ID

curl -X PUT https://api.COMPANY.brmbl.io/v1/work_items/guidewire/ext-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_rtDpM2v9_gw6cTLmn4eMInQja5yfRAbV4" \
-d @- << EOF

{
  "status": "in_progress",
  "type": "claim",
  "started_at": null,
  "metadata": {
    "source_object_id": "CLM-123",
    "source_system": "guidewire"
  },
  "namespace": null,
  "created_at": "2026-01-15T10:00:00Z",
  "completed_at": null,
  "cancelled_at": null,
  "line_of_business_id": null,
  "claim_type_id": null,
  "litigation_status": null,
  "managed_by": null,
  "actionable_at": "2026-01-15T10:00:00Z",
  "namespace_id": null,
  "snapshot_at": null,
  "assignee_id": null,
  "work_item_sla_target_id": null
}


EOF

Response: 200 OK

{
  "data": {
    "attributes": {
      "actionable_at": "2026-01-15T10:00:00.000000Z",
      "assignee_id": null,
      "cancelled_at": null,
      "claim": null,
      "completed_at": null,
      "created_at": "2026-01-15T10:00:00.000000Z",
      "external_id": "ext-001",
      "inserted_at": "2026-09-01T12:25:02Z",
      "metadata": {
        "source_object_id": "CLM-123",
        "source_system": "guidewire"
      },
      "namespace_id": 1292,
      "snapshot_at": null,
      "started_at": null,
      "status": "in_progress",
      "type": "claim",
      "updated_at": "2026-09-01T12:25:02Z",
      "work_item_sla_target_id": null
    },
    "id": "1222",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/work_items/1222"
    },
    "relationships": {},
    "type": "work_items"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/work_items/1222"
  }
}

Idempotent merge upsert. If a work item with the given external_id exists, it is updated; otherwise a new work item is created.

Merge semantics: Incoming keys overwrite existing values. Null explicitly clears a field. Absent keys are preserved (no change). Metadata is shallow-merged (incoming keys win; null removes a metadata key).

Snapshot guard: If snapshot_at is provided and the existing record has a newer snapshot_at, the update is silently skipped (stale snapshot rejection).

Claims: a work item of type claim requires the four P&C dimensions (line_of_business_id, claim_type_id, litigation_status, managed_by). They are written together, so a partial set is a 422. While the claims feature is still rolling out they may be omitted entirely, in which case no claim record is created — send them on every claim.

Request

PUT /v1/work_items/{namespace}/{external_id}

Required scope: work_items:write

Parameters

Parameter Description In Type Required Default Example
namespace The namespace code (the work item's origin). path string true guidewire
external_id The external system identifier, unique within the namespace. path string true CLM-123
x-external-resource-uri Log optional external-resource-uri data with which to build a history. header string false

Responses

Status Description Schema
200 Work Item Response
401 Authentication Error
404 Not Found Error
410 Ignored
422 Unprocessable Entity
500 Internal Server Error

Models

CursorPagination

Cursor-based pagination metadata

{
  "cursors": {
    "after": "g3QAAAABZAALaW5zZXJ0ZWRfYXQ=",
    "before": null
  },
  "total_count": 50
}
Property Description Type Format Required
total_count Total number of matching records integer int64 false
cursors.after Cursor for the next page string false
cursors.before Cursor for the previous page string false

Pagination

Pagination metadata

{
  "count": 2,
  "current_page": 1,
  "per_page": 2,
  "total": 50,
  "total_pages": 25
}
Property Description Type Format Required
count Number of records in the current page integer int64 false
current_page Current page number integer int64 false
per_page Number of records per page integer int64 false
total Total number of records integer int64 false
total_pages Total number of pages integer int64 false

Checkin

This is a way to record a user checking-in for a day, and also allows user to set which type of work location they did.

{
  "attributes": {
    "date": "2022-02-23",
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "updated_at": "2023-01-01T00:00:00.000000Z",
    "work_location": "distributed"
  },
  "id": "23",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/users/4"
  },
  "relationships": {
    "user": {
      "data": {
        "id": "2",
        "type": "users"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/users/2",
        "self": "https://api.COMPANY.brmbl.io/v1/checkins/4/relationships/user"
      }
    }
  },
  "type": "checkins"
}
Property Description Type Format Required
id The id of the checkin. string true
type value is always "checkins" string true
attributes.date Which day was this checkin created? string date false
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.updated_at The last updated timestamp of this resource. string date-time false
attributes.work_location where the work is done. string false
relationships.user.data.id The unique identifier string true
relationships.user.data.type string true
relationships.user.links.related Link for the relationship itself string uri false
relationships.user.links.self Link for the relationship itself string uri false

ServiceLevel

Service Level

{
  "attributes": {
    "date": "2022-02-23",
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "note": null,
    "score": 0.55,
    "updated_at": "2023-01-01T00:00:00.000000Z"
  },
  "id": "281",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/service_levels/4"
  },
  "relationships": {
    "production_task": {
      "data": {
        "id": "2",
        "type": "production_tasks"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
        "self": "https://api.COMPANY.brmbl.io/v1/service_levels/4/relationships/production_task"
      }
    }
  },
  "type": "service_levels"
}
Property Description Type Format Required
id The id of the Service Level. string true
type always "service_levels" string true
attributes.date Which day was this score given? string date false
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.note An optional note. string false
attributes.score A percentage (as a floating point number between 0 and 1) rating a production task's service level for this date. number float false
attributes.updated_at The last updated timestamp of this resource. string date-time false
relationships.production_task.data.id The unique identifier string true
relationships.production_task.data.type string true
relationships.production_task.links.related Link for the relationship itself string uri false
relationships.production_task.links.self Link for the relationship itself string uri false

UserPlan

This is a way to record a user plan for a week, and also allows user to set how much contribution they plan on doing.

{
  "attributes": {
    "contribution": 0.95,
    "from": "2023-12-18",
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "until": "2023-12-24",
    "updated_at": "2023-01-01T00:00:00.000000Z"
  },
  "id": "23",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/user_plans/4"
  },
  "relationships": {
    "group": {
      "data": {
        "id": "2",
        "type": "groups"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/groups/2",
        "self": "https://api.COMPANY.brmbl.io/v1/user_plans/4/relationships/group"
      }
    },
    "user": {
      "data": {
        "id": "2",
        "type": "users"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/users/2",
        "self": "https://api.COMPANY.brmbl.io/v1/user_plans/4/relationships/user"
      }
    }
  },
  "type": "user_plans"
}
Property Description Type Format Required
id The id of the user plan. string true
type value is always "user_plans" string true
attributes.contribution A percentage (as a floating point number between 0 and 1) rating the persons contribution on the given week number float false
attributes.from The first date covered by the user plan string date false
attributes.inserted_at Insertion time-stamp. string date-time false
attributes.until The last date covered by the user plan string date false
attributes.updated_at Update time-stamp. string date-time false
attributes.week_number The week number according to ISO-8601 standard integer int32 false
attributes.year The year of the where integer false
relationships.group.data.id The unique identifier string true
relationships.group.data.type string true
relationships.group.links.related Link for the relationship itself string uri false
relationships.group.links.self Link for the relationship itself string uri false
relationships.user.data.id The unique identifier string true
relationships.user.data.type string true
relationships.user.links.related Link for the relationship itself string uri false
relationships.user.links.self Link for the relationship itself string uri false

Claim

P&C dimensions of a claim work item. Returned as the claim member of work items that have one. Write payloads carry the same four members flat and the API groups them, so this schema defines them once for both directions. All four are written together: send all of them or none.

{
  "claim_type_id": 7,
  "line_of_business_id": 11,
  "litigation_status": "litigated",
  "managed_by": "tpa"
}
Property Description Type Format Required
claim_type_id FK to claim_types. Resolve the carrier's own value to a row id first. integer true
line_of_business_id FK to lines_of_business. Resolve the carrier's own value to a row id first. integer true
litigation_status Whether the claim is litigated string true
managed_by Whether the claim is handled internally or by a Third Party Administrator string true

QualityScore

The overall score of the quality of a user's work on the given date. If your organization has a quality framework in place, your Front-line managers are usually responsible for measuring quality scores for IC's on a regular basis. This API allows Bramble to receive these quality scores from an external system.

{
  "attributes": {
    "date": "2022-02-23",
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "note": null,
    "score": 0.95,
    "updated_at": "2023-01-01T00:00:00.000000Z"
  },
  "id": "281",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4"
  },
  "relationships": {
    "production_task": {
      "data": {
        "id": "2",
        "type": "production_tasks"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
        "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4/relationships/production_task"
      }
    },
    "user": {
      "data": {
        "id": "2",
        "type": "users"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/users/2",
        "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4/relationships/user"
      }
    }
  },
  "type": "quality_scores"
}
Property Description Type Format Required
id The id of the Quality Score. string true
type always "quality_scores" string true
attributes.date The date for which this score was given string date false
attributes.note An optional note. string false
attributes.score A percentage (as a floating point number between 0 and 1) rating the persons performance on the given day number float false
relationships.agent_queue_metrics.data.id The unique identifier string true
relationships.agent_queue_metrics.data.type string true
relationships.agent_queue_metrics.links.related Link for the relationship itself string uri false
relationships.agent_queue_metrics.links.self Link for the relationship itself string uri false
relationships.production_task.data.id The unique identifier string true
relationships.production_task.data.type string true
relationships.production_task.links.related Link for the relationship itself string uri false
relationships.production_task.links.self Link for the relationship itself string uri false
relationships.user.data.id The unique identifier string true
relationships.user.data.type string true
relationships.user.links.related Link for the relationship itself string uri false
relationships.user.links.self Link for the relationship itself string uri false

CheckpointItem

Checkpoint items are used to calculate the balance on a certain day for a certain production task. The sum of the amounts of the CheckpointItems for the day for a production task will define the balance for a Checkpoint on that day

{
  "attributes": {
    "amount": 5,
    "date": "2024-04-09",
    "inserted_at": "2024-04-09T00:00:00.000000Z",
    "updated_at": "2024-04-09T00:00:00.000000Z"
  },
  "id": "281",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/281"
  },
  "relationships": {
    "checkpoint": {
      "data": {
        "id": "3",
        "type": "checkpoints"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoints/3",
        "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/281/relationships/checkpoint"
      }
    },
    "production_task": {
      "data": {
        "id": "2",
        "type": "production_tasks"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
        "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/281/relationships/production_task"
      }
    }
  },
  "type": "checkpoint_items"
}
Property Description Type Format Required
id The id of the Checkpoint Item. string true
type always "checkpoint_items" string true
attributes.amount The amount of the checkpoint item to adjust the checkpoint by. A positive integer. integer int32 false
attributes.date When did this checkpoint item event happen? string date false
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.updated_at The last updated timestamp of this resource. string date-time false
relationships.checkpoint.data.id The unique identifier string true
relationships.checkpoint.data.type string true
relationships.checkpoint.links.related Link for the relationship itself string uri false
relationships.checkpoint.links.self Link for the relationship itself string uri false
relationships.production_task.data.id The unique identifier string true
relationships.production_task.data.type string true
relationships.production_task.links.related Link for the relationship itself string uri false
relationships.production_task.links.self Link for the relationship itself string uri false

SupportingTask

Supporting Tasks are regular (often planned) business activities that may only indirectly contribute to business outcomes.

{
  "category": "meeting",
  "id": "32",
  "inserted_at": "2023-06-14T06:00:47Z",
  "name": "Test supporting task",
  "state": "active",
  "type": "supporting_tasks",
  "updated_at": "2023-06-14T06:00:47Z"
}
Property Description Type Format Required
category supporting task's category string false
id Bramble internal supporting task id string false
inserted_at The timestamp of when this resource was created. string date-time false
name The supporting task's name. string false
state The supporting task's state. string false
type always "supporting_tasks" string false
updated_at The last updated timestamp of this resource. string date-time false

AgentQueueMetrics

Contact center data for one agent on one day by queue.

{}
Property Description Type Format Required
after_call_work_seconds Total amount of time the agent spent completing after-call work. integer false
conversations Count of Automatic Call Distributor (ACD) conversations. integer true
date The date of the day that this data is for. string date true
entry_id Bramble CheckinItem(Entry) ID of the CheckinItem that this data is for. integer false
handle_seconds Total time of all conversations, including talk, hold and after call work time integer false
hold_seconds Total time that conversations were placed on hold. integer false
inserted_at Insertion time-stamp. string date-time false
production_task_id Bramble production task ID of the queue that this data is for. integer true
quality Call quality percentage, expressed as a fraction between 0 and 1. The quality represents a score without creating an explicit quality_score entity. number float false
quality_score_id Bramble quality score ID of the quality score that this data is for. The quality_score entity is used to represent the achieved quality score. integer false
talk_seconds Total Time spent actively interacting. integer false
user_id Bramble user ID of the agent that this data is for. integer true

IdentitySearch

A search-log row — a payload resolved by the rules engine.

{
  "attributes": {
    "entity_id": 11,
    "first_seen_at": "2026-06-18T09:00:00Z",
    "last_seen_at": "2026-06-18T09:05:00Z",
    "occurrence_count": 2,
    "payload": {
      "litigated": true,
      "type": "claim"
    },
    "resource_type": "sla",
    "rule_id": 200,
    "status": "resolved"
  },
  "id": "7",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/identity_searches/7"
  },
  "type": "identity_searches"
}
Property Description Type Format Required
id The id of the search. string true
type always "identity_searches" string true
attributes.entity_id The resolved entity id, interpreted per resource_type (null = unmapped). integer false
attributes.first_seen_at string date-time false
attributes.last_seen_at string date-time false
attributes.occurrence_count How often this payload has been searched. integer false
attributes.resource_type The consumer discriminator — which table entity_id points at. string false
attributes.rule_id The rule that matched (null = unmapped). integer false
attributes.status Derived from whether a rule matched. string false

AgentDailyMetrics

Contact center summary data for one agent on one day.

{}
Property Description Type Format Required
after_call_work_seconds Total amount of time the agent spent completing after-call work. integer false
aux_seconds The total amount of time the agent spent in non-ACD work e.g. breaks, training, meetings etc integer false
available_seconds The total time that the agent was available to take ACD calls integer false
conversations Count of Automatic Call Distributor (ACD) conversations. integer false
date The date of the day that this data is for. string date true
handle_seconds Total time of all conversations, including talk, hold and after call work time integer false
hold_seconds Total time that conversations were placed on hold. integer false
idle_seconds Total idle time. integer false
inserted_at Insertion time-stamp. string date-time false
staffed_seconds The total amount of time the agent spent logged into the ACD system. integer false
talk_seconds Total Time spent actively interacting. integer false
user_id Bramble user ID of the agent that this data is for. integer true

Checkpoint

Checkpoint tracks known balances for a given day+task

{
  "attributes": {
    "balance": 10,
    "date": "2024-04-09",
    "inserted_at": "2024-04-09T00:00:00.000000Z",
    "updated_at": "2024-04-09T00:00:00.000000Z"
  },
  "id": "281",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoints/281"
  },
  "relationships": {
    "production_task": {
      "data": {
        "id": "2",
        "type": "production_tasks"
      },
      "links": {
        "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
        "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoints/281/relationships/production_task"
      }
    }
  },
  "type": "checkpoints"
}
Property Description Type Format Required
id The id of the Checkpoint. string true
type always "checkpoints" string true
attributes.balance The balance of the checkpoint. A positive integer. integer int32 false
attributes.date What date is this balance for? string date false
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.updated_at The last updated timestamp of this resource. string date-time false
relationships.production_task.data.id The unique identifier string true
relationships.production_task.data.type string true
relationships.production_task.links.related Link for the relationship itself string uri false
relationships.production_task.links.self Link for the relationship itself string uri false

Page

{
  "number": 2,
  "size": 100
}
Property Description Type Format Required
number Page number to retrieve integer int32 false
size Number of items per page integer int32 false

Meta

Metadata about the response

{
  "pagination": {
    "count": 2,
    "current_page": 1,
    "per_page": 2,
    "total": 50,
    "total_pages": 25
  }
}
Property Description Type Format Required
pagination.count Number of records in the current page integer int64 false
pagination.current_page Current page number integer int64 false
pagination.per_page Number of records per page integer int64 false
pagination.total Total number of records integer int64 false
pagination.total_pages Total number of pages integer int64 false

QueueDailyMetrics

Contact center data for one queue on one day.

{}
Property Description Type Format Required
after_call_work_seconds Total amount of time the agent spent completing after-call work. integer false
conversations Count of Automatic Call Distributor (ACD) conversations. integer true
date The date of the day that this data is for. string date true
handle_seconds Total time of all conversations, including talk, hold and after call work time integer false
hold_seconds Total time that conversations were placed on hold. integer false
inserted_at Insertion time-stamp. string date-time false
production_task_id Bramble production task ID of the queue that this data is for. integer true
service_level Service level percentage, expressed as a fraction between 0 and 1. number float false
talk_seconds Total Time spent actively interacting. integer false

Namespace

A tenant-owned Namespace — the origin of a work item.

{
  "attributes": {
    "code": "guidewire",
    "description": "Claims sourced from Guidewire",
    "inserted_at": "2026-06-02T00:00:00Z",
    "name": "Guidewire",
    "state": "active",
    "updated_at": "2026-06-02T00:00:00Z"
  },
  "id": "12",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/namespaces/12"
  },
  "type": "namespaces"
}
Property Description Type Format Required
id The id of the Namespace. string true
type always "namespaces" string true
attributes.code The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string false
attributes.description Optional free-form description. string false
attributes.inserted_at Timestamp of when this resource was created. string date-time false
attributes.name The customer-facing name of the namespace. string false
attributes.state Lifecycle state of the namespace. string false
attributes.updated_at Timestamp of when this resource was last updated. string date-time false

Group

Groups are teams of users in Bramble. Groups are arranged in a tree hierarchy (using parent_group_id).

{
  "attributes": {
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "name": "North America",
    "state": "active",
    "updated_at": "2023-01-01T00:00:00.000000Z"
  },
  "id": "54",
  "relationships": {
    "parent": {
      "data": {
        "id": "2",
        "type": "groups"
      },
      "links": {
        "self": "https://api.COMPANY.brmbl.io/v1/groups/4/relationships/parent"
      }
    }
  },
  "type": "groups"
}
Property Description Type Format Required
id The id of the group. string true
type value is always "groups" string true
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.name The name of the group string false
attributes.state The current status string false
attributes.updated_at The last updated timestamp of this resource. string date-time false
relationships.parent.data.id The unique identifier string true
relationships.parent.data.type string true
relationships.parent.links.self Link for the relationship itself string uri false

UserPlanEntry

User plan entry is a way to record how someone plans to spend their day.

Property Description Type Format Required
id The unique ID of the user plan entry. string true
type value is always "user_plan_entries" string true
attributes.date When was this planned to happen? string date false
attributes.inserted_at Insertion time-stamp. string date-time false
attributes.minutes The amount of time spent. Usually a positive integer, but negative values are permitted. integer int32 false
attributes.type Is it a base time, leave or a supporting task? string false
attributes.updated_at Update time-stamp. string date-time false
relationships.group.data.id The unique identifier string true
relationships.group.data.type string true
relationships.group.links.related Link for the relationship itself string uri false
relationships.group.links.self Link for the relationship itself string uri false
relationships.leave_type.data.id The unique identifier string true
relationships.leave_type.data.type string true
relationships.leave_type.links.related Link for the relationship itself string uri false
relationships.leave_type.links.self Link for the relationship itself string uri false
relationships.supporting_task.data.id The unique identifier string true
relationships.supporting_task.data.type string true
relationships.supporting_task.links.related Link for the relationship itself string uri false
relationships.supporting_task.links.self Link for the relationship itself string uri false
relationships.user.data.id The unique identifier string true
relationships.user.data.type string true
relationships.user.links.related Link for the relationship itself string uri false
relationships.user.links.self Link for the relationship itself string uri false
relationships.user_plan.data.id The unique identifier string true
relationships.user_plan.data.type string true
relationships.user_plan.links.related Link for the relationship itself string uri false
relationships.user_plan.links.self Link for the relationship itself string uri false

CostCategory

Cost Categories provide additional insight and delineation of organizational production costs i.e how much it's costing to complete work for Category 'X' versus 'Y'.

{
  "attributes": {
    "description": "sample description",
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "name": "Auto",
    "state": "active",
    "updated_at": "2023-01-01T00:00:00.000000Z"
  },
  "id": "54",
  "type": "cost_categories"
}
Property Description Type Format Required
id The id of the cost category. string true
type value is always "cost_categories" string true
attributes.description The description of the cost category string false
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.name The name of the cost category string false
attributes.state The current state string false
attributes.updated_at The last updated timestamp of this resource. string date-time false

CursorPage

{
  "after": null,
  "before": null,
  "size": 25
}
Property Description Type Format Required
after Cursor for the next page of results string false
before Cursor for the previous page of results string false
size Number of items per page (default 25, max 100) integer int32 false

FrictionType

Friction is defined as any obstacle, process, task or system that does not add value in the eyes of the customer.

{
  "category": "downtime",
  "id": "32",
  "inserted_at": "2023-08-01T06:00:47Z",
  "name": "Computer issues",
  "state": "active",
  "type": "friction_types",
  "updated_at": "2023-08-01T06:00:47Z"
}
Property Description Type Format Required
category Friction category string false
id Bramble internal friction type id string false
inserted_at The timestamp of when this resource was created. string date-time false
name The friction type's name. string false
state The friction type's state. string false
type always "friction_types" string false
updated_at The last updated timestamp of this resource. string date-time false

CheckinItem

Checkin items are a way to record how a user spends their time during the course of the day.

Property Description Type Format Required
id The id of the checkin item. string true
type value is always "checkin_items" string true
attributes.date When did this checkin item happen? string date false
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.minutes The amount of time spent on a task or friction type. number false
attributes.updated_at The last updated timestamp of this resource. string date-time false
attributes.volume The number of times a production task was completed. integer int32 false
relationships.checkin.data.id The unique identifier string true
relationships.checkin.data.type string true
relationships.checkin.links.related Link for the relationship itself string uri false
relationships.checkin.links.self Link for the relationship itself string uri false
relationships.cost_category.data.id The unique identifier string true
relationships.cost_category.data.type string true
relationships.cost_category.links.related Link for the relationship itself string uri false
relationships.cost_category.links.self Link for the relationship itself string uri false
relationships.friction_type.data.id The unique identifier string true
relationships.friction_type.data.type string true
relationships.friction_type.links.related Link for the relationship itself string uri false
relationships.friction_type.links.self Link for the relationship itself string uri false
relationships.leave_type.data.id The unique identifier string true
relationships.leave_type.data.type string true
relationships.leave_type.links.related Link for the relationship itself string uri false
relationships.leave_type.links.self Link for the relationship itself string uri false
relationships.production_task.data.id The unique identifier string true
relationships.production_task.data.type string true
relationships.production_task.links.related Link for the relationship itself string uri false
relationships.production_task.links.self Link for the relationship itself string uri false
relationships.supporting_task.data.id The unique identifier string true
relationships.supporting_task.data.type string true
relationships.supporting_task.links.related Link for the relationship itself string uri false
relationships.supporting_task.links.self Link for the relationship itself string uri false
relationships.user.data.id The unique identifier string true
relationships.user.data.type string true
relationships.user.links.related Link for the relationship itself string uri false
relationships.user.links.self Link for the relationship itself string uri false

ProductionTask

A Production Task represents the primary, measurable, unit of work in a Process

{
  "entry_mode": "MANUAL",
  "group_id": 1,
  "id": 34,
  "improvement_category": "rpa",
  "inserted_at": "2023-06-14T06:00:47Z",
  "name": "Test Task",
  "process_id": 1,
  "state": "active",
  "type": "production_tasks",
  "updated_at": "2023-06-14T06:00:47Z"
}
Property Description Type Format Required
entry_mode The production task's entry mode. string false
group_id Bramble group identifier. integer false
id Bramble internal production task id integer false
improvement_category production task's CI(continous improvement) category string false
inserted_at The timestamp of when this resource was created. string date-time false
name The production task's name. string false
process_id Bramble process identifier. integer false
state The production task's state. string false
type always "production_tasks" string false
updated_at The last updated timestamp of this resource. string date-time false

WorkItem

A work item representing a lifecycle-tracked entity (claim, ticket, etc.).

{
  "attributes": {
    "actionable_at": "2026-01-15T10:00:00.000000Z",
    "cancelled_at": null,
    "claim": {
      "claim_type_id": 7,
      "line_of_business_id": 11,
      "litigation_status": "litigated",
      "managed_by": "tpa"
    },
    "completed_at": null,
    "created_at": "2026-01-15T10:00:00.000000Z",
    "external_id": "CLM-123",
    "inserted_at": "2026-01-15T10:00:00.000000Z",
    "metadata": {
      "source_system": "guidewire"
    },
    "namespace_id": 1,
    "snapshot_at": null,
    "started_at": null,
    "status": "in_progress",
    "type": "claim",
    "updated_at": "2026-01-15T10:00:00.000000Z",
    "work_item_sla_target_id": null
  },
  "id": "42",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/work_items/42"
  },
  "type": "work_items"
}
Property Description Type Format Required
id The id of the Work Item. string true
type always "work_items" string true
attributes.actionable_at string date-time false
attributes.assignee_id FK to users. The assigned user. integer false
attributes.cancelled_at string date-time false
attributes.claim Claim dimensions, mirroring the claim member accepted on write. Null when the work item has none. ** false
attributes.completed_at string date-time false
attributes.created_at string date-time false
attributes.external_id External system identifier string false
attributes.inserted_at string date-time false
attributes.namespace_id FK to namespaces. Canonical identifier for the work item's origin namespace. integer false
attributes.snapshot_at string date-time false
attributes.started_at string date-time false
attributes.status Work item status string false
attributes.type Work item type string false
attributes.updated_at string date-time false
attributes.work_item_sla_target_id FK to work_item_sla_targets. The resolved SLA target; null = unmapped. integer false

LeaveType

Leave is a period, planned or unplanned, where an employee is not working.

{
  "category": "planned_paid",
  "id": "42",
  "inserted_at": "2023-08-03T07:00:47Z",
  "name": "Winter Holiday",
  "state": "active",
  "type": "leave_types",
  "updated_at": "2023-08-03T07:00:47Z"
}
Property Description Type Format Required
category Leave category string false
id Bramble internal leave type id string false
inserted_at The timestamp of when this resource was created. string date-time false
name The leave type's name. string false
state The leave type's state. string false
type always "leave_types" string false
updated_at The last updated timestamp of this resource. string date-time false

User

A user in Bramble, often an Individual Contributor (IC) or Manager. Can also be other system users like Account Owners/Admins. Non-owners/admins are associated with one Group.

{
  "attributes": {
    "email": "jane-doe12@brmbl.io",
    "full_name": "Jane Doe",
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "preferred_first_name": "Jane",
    "state": "active",
    "team_role": "team_contributor",
    "timezone": "Africa/Abidjan",
    "type": "users",
    "updated_at": "2023-01-01T00:00:00.000000Z"
  },
  "id": "23",
  "relationships": {
    "parent": {
      "data": {
        "id": "2",
        "type": "groups"
      },
      "links": {
        "self": "https://api.COMPANY.brmbl.io/v1/users/4/relationships/group"
      }
    }
  },
  "type": "users"
}
Property Description Type Format Required
id The id of the user. string true
type value is always "users" string true
attributes.account_role Account-level role string false
attributes.email A user's email. This is a unique value and can be used to find a user via the api/users endpoint. string false
attributes.full_name The user's first and last name. string false
attributes.inserted_at The timestamp of when this resource was created. string date-time false
attributes.preferred_first_name The user's preferred name. string false
attributes.state The current status string false
attributes.team_role Team-level role string false
attributes.timezone The user's preferred timezone. string false
attributes.type value is always "users" string false
attributes.updated_at The last updated timestamp of this resource. string date-time false
relationships.group.data.id The unique identifier string true
relationships.group.data.type string true
relationships.group.links.self Link for the relationship itself string uri false

Error Models

NotFoundError

{
  "errors": [
    {
      "detail": "The requested resource does not exist.",
      "status": 404,
      "title": "Resource Not Found"
    }
  ]
}
Property Description Type Format Required
errors array(any) true

ConflictError

{
  "errors": [
    {
      "detail": "Must be unique: production_task_id + date",
      "source": {
        "pointer": "/production_task_id"
      },
      "title": "Validation Failed"
    }
  ]
}
Property Description Type Format Required
errors array(any) true

AuthenticationError

{
  "errors": [
    {
      "detail": "Please check your client id and secret key, and make sure your credentials are active.",
      "source": {
        "pointer": "header: authorization => id, mac"
      },
      "title": "Authentication Failed",
      "type": "AUTHENTICATION_FAILED"
    }
  ]
}
Property Description Type Format Required
errors array(any) true

InternalServerError

{
  "errors": [
    {
      "detail": "Server Error: we could not complete your request",
      "title": "Unexpected Server Error",
      "type": "UNEXPECTED_ERROR"
    }
  ]
}
Property Description Type Format Required
errors array(any) true

IgnoreError

{
  "errors": [
    {
      "detail": "The identity we found is set to be ignored",
      "source": {
        "pointer": "/source_id/value"
      },
      "title": "Ignored"
    }
  ]
}
Property Description Type Format Required
errors array(any) true

Request Models

FrictionTypeParams

Input params for a Friction Type.

{
  "category": "DOWNTIME",
  "description": "Any friction caused by computer hardware or software.",
  "name": "Computer issues",
  "state": "ACTIVE"
}
Property Description Type Format Required
category Friction category string true
description Free-form description of the friction type. string true
name The friction type's name. string true
state The friction type's state. string false

IdentitySearchParams

Resolve input: the namespace code and the attributes to match.

{
  "attributes": {
    "litigated": true,
    "type": "claim"
  },
  "namespace": "guidewire"
}
Property Description Type Format Required
namespace The namespace code (source system). string true

OvertimeCheckinItemParams

Input parameters for Overtime Entries

{
  "checkin_id": "1",
  "date": "2026-07-08",
  "minutes": 60,
  "overtime": true,
  "user_id": "234"
}
Property Description Type Format Required
checkin_id The id of the checkin. string true
date When did this checkin item happen? string date true
minutes The amount of time spent on a task or friction type. number true
overtime Value is always true. Marks the entry as the user's overtime for the day. boolean true
replacement If true, replaces (sets) the minutes instead of incrementing them. boolean false
user_id The id of the user. string true

AgentQueueMetricsParams

Input parameters for Agent Queue Metrics.

{
  "conversations": 3,
  "date": "2022-12-13",
  "quality_score": 0.8,
  "user_id": 3
}
Property Description Type Format Required
after_call_work_seconds Total amount of time the agent spent completing after-call work. integer false
conversations Count of Automatic Call Distributor (ACD) conversations. integer true
date The date of the day that this data is for. string date true
entry_id Bramble CheckinItem(Entry) ID of the CheckinItem that this data is for. integer false
handle_seconds Total time of all conversations, including talk, hold and after call work time integer false
hold_seconds Total time that conversations were placed on hold. integer false
production_task_id Bramble production task ID of the queue that this data is for. integer false
quality_score Call quality percentage, expressed as a fraction between 0 and 1. The quality represents a score without creating an explicit quality_score entity. number float false
quality_score_id Bramble quality score ID of the quality score that this data is for. The quality_score entity is used to represent the achieved quality score. integer false
talk_seconds Total Time spent actively interacting. integer false
user_id Bramble user ID of the agent that this data is for. integer true

CreateWorkItemParams

Create parameters for a work item of any type other than claim.

{
  "actionable_at": "2026-01-15T10:00:00Z",
  "created_at": "2026-01-15T10:00:00Z",
  "external_id": "TKT-123",
  "metadata": {
    "source_object_id": "TKT-123",
    "source_system": "guidewire"
  },
  "namespace": "guidewire",
  "status": "in_progress",
  "type": "ticket"
}
Property Description Type Format Required
actionable_at string date-time false
assignee_id The id of the user. string false
cancelled_at string date-time false
completed_at string date-time false
created_at string date-time false
external_id External system identifier string true
namespace The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string false
namespace_id The id of the Namespace. string false
snapshot_at string date-time false
started_at string date-time false
status Work item status string true
type Work item type string true
work_item_sla_target_id FK to work_item_sla_targets. The resolved SLA target; null = unmapped. integer false

UserGroupParams

Input params for moving a User to a different group.

{
  "group_id": 1
}
Property Description Type Format Required
group_id Target group ID. integer int32 true

SupportingTaskCheckinItemParams

Input parameters for Supporting Task Entries

{
  "checkin_id": "1",
  "date": "2022-02-23",
  "minutes": 450,
  "supporting_task_id": 432,
  "user_id": "234"
}
Property Description Type Format Required
checkin_id The id of the checkin. string true
date When did this checkin item happen? string date true
minutes The amount of time spent on a task or friction type. number true
replacement If true, replaces (sets) the minutes instead of incrementing them. boolean false
supporting_task_id Bramble internal supporting task id string true
user_id The id of the user. string true

UserPlanParams

Input parameters for User Plan.

{
  "user_id": "3",
  "week_number": 1,
  "year": 2024
}
Property Description Type Format Required
contribution A percentage (as a floating point number between 0 and 1) rating the persons contribution on the given week number float false
user_id The id of the user. string true
week_number The week number according to ISO-8601 standard integer int32 true
year The year of the where integer true

CheckpointItemParams

CheckpointItem parameters for Inventory Checkpoint Items

{
  "amount": 10,
  "date": "2024-04-09",
  "production_task_id": "432"
}
Property Description Type Format Required
amount The amount of the checkpoint item to adjust the checkpoint by. A positive integer. integer int32 true
date When did this checkpoint item event happen? string date true
production_task_id Bramble internal production task id integer true

ProductionTaskParams

Input params for creating a Production Task.

{
  "description": "Outbound calls to customers.",
  "effective_itts": [
    {
      "effective_at": "2024-01-01",
      "ideal_task_time": 10
    }
  ],
  "entry_mode": "MANUAL",
  "group_id": 1,
  "has_backlog": false,
  "has_service_level": false,
  "ideal_task_time_method": "OVERRIDE",
  "improvement_category": "RPA",
  "is_key_task": false,
  "name": "Customer Outreach",
  "process_id": 1,
  "proficiency_category": "AVG",
  "state": "ACTIVE"
}
Property Description Type Format Required
description Free-form description of the production task. string true
effective_itts ITT history entries. Required on create (at least one). Each entry must include ideal_task_time (minutes) and effective_at (date). Importers can supply multiple entries to backfill historical ITT changes. array(any) false
entry_mode The production task's entry mode. string false
group_id Bramble group identifier. integer true
has_backlog Whether the production task has a backlog. boolean true
has_service_level Whether the production task has a service level. boolean true
ideal_task_time_method How the ideal task time is computed. string false
improvement_category Continuous improvement category. string false
is_key_task Whether this production task is a key task for its process. boolean false
name The production task's name. string true
process_id Bramble process identifier. integer false
proficiency_category The production task's proficiency category. string false
state The production task's state. string false

CreateWorkItemsParams

Input params for creating a Work Item. Required: external_id, type, status. The variant is chosen by type: claim also accepts the P&C dimensions.

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/CreateWorkItemParams"
    },
    {
      "$ref": "#/components/schemas/CreateClaimWorkItemParams"
    }
  ]
}

UserPlanLeaveTypeEntryParams

Input parameters for User Plan Leave Type Entries

{
  "date": "2025-05-23",
  "leave_type_id": "432",
  "minutes": 450,
  "type": "leave_type",
  "user_id": "234"
}
Property Description Type Format Required
date When was this planned to happen? string date true
leave_type_id Bramble internal leave type id string true
minutes The amount of time spent. Usually a positive integer, but negative values are permitted. integer int32 true
note Text notes for the entry string false
type value is always true "leave_type" string true
user_id The id of the user. string true
with_checkin If true, also creates check-in actuals for the leave. boolean false

WorkItemParams

Upsert parameters for a work item of any type other than claim.

{
  "actionable_at": "2026-01-15T10:00:00Z",
  "created_at": "2026-01-15T10:00:00Z",
  "metadata": {
    "source_object_id": "TKT-123",
    "source_system": "guidewire"
  },
  "status": "in_progress",
  "type": "ticket"
}
Property Description Type Format Required
actionable_at string date-time false
assignee_id The id of the user. string false
cancelled_at string date-time false
completed_at string date-time false
created_at string date-time false
namespace The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string false
namespace_id The id of the Namespace. string false
snapshot_at string date-time false
started_at string date-time false
status Work item status string true
type Work item type string true
work_item_sla_target_id FK to work_item_sla_targets. The resolved SLA target; null = unmapped. integer false

GroupParams

Input params for a Group.

{
  "name": "Sales",
  "parent_id": 1,
  "state": "ACTIVE"
}
Property Description Type Format Required
name The name of the group. string true
parent_id ID of the parent group in the hierarchy. integer int32 false
state The current status of the group. string false

BaseTimeCheckinItemParams

Input parameters for Base Time Entries

{
  "base_time": true,
  "checkin_id": "1",
  "date": "2026-07-08",
  "minutes": 420,
  "user_id": "234"
}
Property Description Type Format Required
base_time Value is always true. Marks the entry as the user's base time for the day. boolean true
checkin_id The id of the checkin. string true
date When did this checkin item happen? string date true
minutes The amount of time spent on a task or friction type. number true
replacement If true, replaces (sets) the minutes instead of incrementing them. boolean false
user_id The id of the user. string true

LeaveTypeParams

Input params for a Leave Type.

{
  "category": "PLANNED_PAID",
  "description": "Planned paid time off around the winter holidays.",
  "name": "Winter Holiday",
  "state": "ACTIVE"
}
Property Description Type Format Required
category Leave category string true
description Free-form description of the leave type. string true
name The leave type's name. string true
state The leave type's state. string false

CheckinItemsParams

Input parameters for Checkin Items, can be either a production task, supporting task, leave type, friction type, base time or overtime parameters

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/ProductionTaskCheckinItemParams"
    },
    {
      "$ref": "#/components/schemas/SupportingTaskCheckinItemParams"
    },
    {
      "$ref": "#/components/schemas/FrictionTypeCheckinItemParams"
    },
    {
      "$ref": "#/components/schemas/LeaveTypeCheckinItemParams"
    },
    {
      "$ref": "#/components/schemas/BaseTimeCheckinItemParams"
    },
    {
      "$ref": "#/components/schemas/OvertimeCheckinItemParams"
    }
  ]
}

QueueDailyMetricsParams

Input parameters for Queue Daily Metrics.

{
  "conversations": 3,
  "date": "2022-12-13",
  "production_task_id": 3,
  "service_level": 0.6
}
Property Description Type Format Required
after_call_work_seconds Total amount of time the agent spent completing after-call work. integer false
conversations Count of Automatic Call Distributor (ACD) conversations. integer true
date The date of the day that this data is for. string date true
handle_seconds Total time of all conversations, including talk, hold and after call work time integer false
hold_seconds Total time that conversations were placed on hold. integer false
production_task_id Bramble production task ID of the queue that this data is for. integer true
service_level Service level percentage, expressed as a fraction between 0 and 1. number float false
talk_seconds Total Time spent actively interacting. integer false

UpdateWorkItemsParams

Input params for partially updating a Work Item (PATCH). Incoming keys overwrite. Null clears. Absent keys preserved. Metadata shallow-merged. The variant is chosen by type, which a claim payload must therefore send.

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/UpdateWorkItemParams"
    },
    {
      "$ref": "#/components/schemas/UpdateClaimWorkItemParams"
    }
  ]
}

NamespaceParams

Input params for a Namespace.

{
  "code": "guidewire",
  "description": "Claims sourced from Guidewire",
  "name": "Guidewire"
}
Property Description Type Format Required
code The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string true
description Optional free-form description. string false
name The customer-facing name of the namespace. string true

UserUpdateParams

Input params for partially updating a User.

{
  "profile": {
    "full_name": "Renamed User"
  },
  "team_role": "TEAM_OWNER"
}
Property Description Type Format Required
account_role Account-level role. string false
team_role Team-level role. string false
employment.fte Full-time equivalent. number false
employment.hours Weekly hours (required if type is PART). number false
employment.joined_at Employment start date. string date false
employment.style Work style. string false
employment.type Employment type. string false
profile.bio Free-form bio. string false
profile.full_name The user's first and last name. string false
profile.job_title Job title. string false
profile.preferred_first_name The user's preferred name. string false
profile.timezone IANA timezone (e.g. Etc/UTC). string false

CheckinParams

Input parameters for Checkin

{
  "date": "2022-02-23",
  "user_id": 432
}
Property Description Type Format Required
date Which day was this checkin created? string date true
user_id The id of the user. string true
work_location where the work is done. string false

LeaveTypeCheckinItemParams

Input parameters for Leave Type Entries

{
  "checkin_id": "1",
  "date": "2022-02-23",
  "leave_type_id": 10,
  "minutes": 450,
  "user_id": "234"
}
Property Description Type Format Required
checkin_id The id of the checkin. string true
date When did this checkin item happen? string date true
leave_type_id Bramble internal leave type id string true
minutes The amount of time spent on a task or friction type. number true
replacement If true, replaces (sets) the minutes instead of incrementing them. boolean false
user_id The id of the user. string true

CreateClaimWorkItemParams

Create parameters for a work item of type claim, with the P&C dimensions carried flat. All four are required for a claim and are written together — a partial set is always rejected. They are not listed under required only while the claims feature is rolling out; callers should send them on every claim.

{
  "actionable_at": "2026-01-15T10:00:00Z",
  "claim_type_id": 7,
  "created_at": "2026-01-15T10:00:00Z",
  "external_id": "CLM-123",
  "line_of_business_id": 11,
  "litigation_status": "litigated",
  "managed_by": "tpa",
  "metadata": {
    "source_object_id": "CLM-123",
    "source_system": "guidewire"
  },
  "namespace": "guidewire",
  "status": "in_progress",
  "type": "claim"
}
Property Description Type Format Required
actionable_at string date-time false
assignee_id The id of the user. string false
cancelled_at string date-time false
claim_type_id FK to claim_types. Resolve the carrier's own value to a row id first. integer false
completed_at string date-time false
created_at string date-time false
external_id External system identifier string true
line_of_business_id FK to lines_of_business. Resolve the carrier's own value to a row id first. integer false
litigation_status Whether the claim is litigated string false
managed_by Whether the claim is handled internally or by a Third Party Administrator string false
namespace The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string false
namespace_id The id of the Namespace. string false
snapshot_at string date-time false
started_at string date-time false
status Work item status string true
type Always claim string true
work_item_sla_target_id FK to work_item_sla_targets. The resolved SLA target; null = unmapped. integer false

AgentDailyMetricsParams

Input parameters for Agent Daily Metrics.

{
  "conversations": 3,
  "date": "2022-12-13",
  "user_id": 3
}
Property Description Type Format Required
after_call_work_seconds Total amount of time the agent spent completing after-call work. integer false
aux_seconds The total amount of time the agent spent in non-ACD work e.g. breaks, training, meetings etc integer false
available_seconds The total time that the agent was available to take ACD calls integer false
conversations Count of Automatic Call Distributor (ACD) conversations. integer false
date The date of the day that this data is for. string date true
handle_seconds Total time of all conversations, including talk, hold and after call work time integer false
hold_seconds Total time that conversations were placed on hold. integer false
idle_seconds Total idle time. integer false
staffed_seconds The total amount of time the agent spent logged into the ACD system. integer false
talk_seconds Total Time spent actively interacting. integer false
user_id Bramble user ID of the agent that this data is for. integer true

UpdateClaimWorkItemParams

Partial update parameters for a work item of type claim. type must be sent so the payload can be told apart from the non-claim variant — a body carrying P&C dimensions without it is read as a plain work item and they are dropped. Every other field is optional, but the four dimensions are written together, so a partial set is rejected.

{
  "claim_type_id": 7,
  "line_of_business_id": 11,
  "litigation_status": "not_litigated",
  "managed_by": "internal",
  "type": "claim"
}
Property Description Type Format Required
actionable_at string date-time false
assignee_id The id of the user. string false
cancelled_at string date-time false
claim_type_id FK to claim_types. Resolve the carrier's own value to a row id first. integer false
completed_at string date-time false
created_at string date-time false
line_of_business_id FK to lines_of_business. Resolve the carrier's own value to a row id first. integer false
litigation_status Whether the claim is litigated string false
managed_by Whether the claim is handled internally or by a Third Party Administrator string false
namespace The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string false
namespace_id The id of the Namespace. string false
snapshot_at string date-time false
started_at string date-time false
status Work item status string false
type Always claim string true
work_item_sla_target_id FK to work_item_sla_targets. The resolved SLA target; null = unmapped. integer false

UserPlanBaseTimeEntryParams

Input parameters for User Plan Supporting Task Entries

{
  "date": "2022-02-23",
  "minutes": 450,
  "type": "base_time",
  "user_id": "234"
}
Property Description Type Format Required
date When was this planned to happen? string date true
minutes The amount of time spent. Usually a positive integer, but negative values are permitted. integer int32 true
type value is always true "base_time" string true
user_id The id of the user. string true
with_checkin Defaults to true: a base time entry also creates (or updates) the check-in entry. Set to false to write the plan only. boolean false

UpdateWorkItemParams

Partial update parameters for a work item of any type other than claim. All fields optional. Incoming keys overwrite. Null clears. Absent keys preserved. Metadata shallow-merged.

{
  "completed_at": "2026-02-20T15:00:00Z",
  "status": "completed"
}
Property Description Type Format Required
actionable_at string date-time false
assignee_id The id of the user. string false
cancelled_at string date-time false
completed_at string date-time false
created_at string date-time false
namespace The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string false
namespace_id The id of the Namespace. string false
snapshot_at string date-time false
started_at string date-time false
status Work item status string false
type Work item type string false
work_item_sla_target_id FK to work_item_sla_targets. The resolved SLA target; null = unmapped. integer false

QualityScoreParams

Input params for Quality Score

{
  "date": "2022-02-23",
  "production_task_id": "456",
  "score": 0.95,
  "user_id": "234"
}
Property Description Type Format Required
date The date for which this score was given string date true
note An optional note. string false
production_task_id Bramble internal production task id integer false
score A percentage (as a floating point number between 0 and 1) rating the persons performance on the given day number float true
user_id The id of the user. string true

UserPlanEntryParams

Input parameters for User Plan Entries, can be either a base time or supporting task parameters

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/UserPlanBaseTimeEntryParams"
    },
    {
      "$ref": "#/components/schemas/UserPlanLeaveTypeEntryParams"
    },
    {
      "$ref": "#/components/schemas/UserPlanSupportingTaskEntryParams"
    }
  ]
}

WorkItemsParams

PUT = idempotent merge upsert. Incoming keys overwrite. Null clears. Absent keys preserved. Metadata shallow-merged. The variant is chosen by type: claim also accepts the P&C dimensions.

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/WorkItemParams"
    },
    {
      "$ref": "#/components/schemas/ClaimWorkItemParams"
    }
  ]
}

ClaimWorkItemParams

Upsert parameters for a work item of type claim. Carries the P&C dimensions flat alongside the work item's own fields; the API groups them before writing. All four are required for a claim and are written together — a partial set is always rejected. They are not listed under required only while the claims feature is rolling out; callers should send them on every claim.

{
  "actionable_at": "2026-01-15T10:00:00Z",
  "claim_type_id": 7,
  "created_at": "2026-01-15T10:00:00Z",
  "line_of_business_id": 11,
  "litigation_status": "litigated",
  "managed_by": "tpa",
  "metadata": {
    "source_object_id": "CLM-123",
    "source_system": "guidewire"
  },
  "status": "in_progress",
  "type": "claim"
}
Property Description Type Format Required
actionable_at string date-time false
assignee_id The id of the user. string false
cancelled_at string date-time false
claim_type_id FK to claim_types. Resolve the carrier's own value to a row id first. integer false
completed_at string date-time false
created_at string date-time false
line_of_business_id FK to lines_of_business. Resolve the carrier's own value to a row id first. integer false
litigation_status Whether the claim is litigated string false
managed_by Whether the claim is handled internally or by a Third Party Administrator string false
namespace The machine key — the source prefix in a work item's external_id (e.g. "guidewire"). string false
namespace_id The id of the Namespace. string false
snapshot_at string date-time false
started_at string date-time false
status Work item status string true
type Always claim string true
work_item_sla_target_id FK to work_item_sla_targets. The resolved SLA target; null = unmapped. integer false

CostCategoryParams

Input params for a Cost Category.

{
  "description": "Costs related to auto claims processing.",
  "name": "Auto"
}
Property Description Type Format Required
description Free-form description of the cost category. string true
name The cost category's name. string true

ProductionTaskUpdateParams

Input params for partially updating a Production Task. All fields optional.

{
  "improvement_category": "RPA",
  "name": "Customer Outreach"
}
Property Description Type Format Required
description Free-form description of the production task. string false
entry_mode The production task's entry mode. string false
group_id Bramble group identifier. integer false
has_backlog Whether the production task has a backlog. boolean false
has_service_level Whether the production task has a service level. boolean false
ideal_task_time_method How the ideal task time is computed. string false
improvement_category Continuous improvement category. string false
is_key_task Whether this production task is a key task for its process. boolean false
name The production task's name. string false
process_id Bramble process identifier. integer false
proficiency_category The production task's proficiency category. string false
state The production task's state. string false

UserCreateParams

Input params for a User.

{
  "email": "new.user@example.com",
  "employment": {
    "joined_at": "2026-01-15",
    "style": "OFFICE",
    "type": "FULL"
  },
  "group_id": 1,
  "profile": {
    "full_name": "New User",
    "preferred_first_name": "New",
    "timezone": "Etc/UTC"
  },
  "team_role": "TEAM_CONTRIBUTOR"
}
Property Description Type Format Required
account_role Account-level role. string false
email A user's email. This is a unique value and can be used to find a user via the api/users endpoint. string true
group_id ID of the group the user belongs to. integer int32 true
team_role Team-level role. string false
employment.fte Full-time equivalent. number false
employment.hours Weekly hours (required if type is PART). number false
employment.joined_at Employment start date. string date false
employment.style Work style. string false
employment.type Employment type. string false
profile.bio Free-form bio. string false
profile.full_name The user's first and last name. string true
profile.job_title Job title. string false
profile.preferred_first_name The user's preferred name. string true
profile.timezone IANA timezone (e.g. Etc/UTC). string true

ServiceLevelUpdateParams

Input params for partially updating a Service Level. All fields are optional.

{
  "note": "Adjusted after review",
  "score": 0.75
}
Property Description Type Format Required
date Which day was this score given? string date false
note An optional note. string false
production_task_id Bramble internal production task id integer false
score A percentage (as a floating point number between 0 and 1) rating a production task's service level for this date. number float false

FrictionTypeCheckinItemParams

Input parameters for Friction Type Entries

{
  "checkin_id": "1",
  "date": "2022-02-23",
  "friction_type_id": 10,
  "minutes": 450,
  "user_id": "234"
}
Property Description Type Format Required
checkin_id The id of the checkin. string true
date When did this checkin item happen? string date true
friction_type_id Bramble internal friction type id string true
minutes The amount of time spent on a task or friction type. number true
replacement If true, replaces (sets) the minutes instead of incrementing them. boolean false
user_id The id of the user. string true

ProductionTaskCheckinItemParams

Input parameters for Production Task Entries

{
  "checkin_id": "1",
  "date": "2022-02-23",
  "production_task_id": 432,
  "user_id": "234",
  "volume": 1
}
Property Description Type Format Required
checkin_id The id of the checkin. string true
cost_category_id The id of the cost category. string false
date When did this checkin item happen? string date true
production_task_id Bramble internal production task id integer true
replacement If true, replaces (sets) the volume instead of incrementing it. boolean false
user_id The id of the user. string true
volume The number of times a production task was completed. integer int32 true

ServiceLevelParams

Input params for a Service Level

{
  "date": "2022-02-23",
  "production_task_id": "34",
  "score": 0.55
}
Property Description Type Format Required
date Which day was this score given? string date true
note An optional note. string false
production_task_id Bramble internal production task id integer true
score A percentage (as a floating point number between 0 and 1) rating a production task's service level for this date. number float true

UserPlanSupportingTaskEntryParams

Input parameters for User Plan Supporting Task Entries

{
  "date": "2022-02-23",
  "minutes": 450,
  "supporting_task_id": "432",
  "type": "supporting_task",
  "user_id": "234"
}
Property Description Type Format Required
date When was this planned to happen? string date true
minutes The amount of time spent. Usually a positive integer, but negative values are permitted. integer int32 true
supporting_task_id Bramble internal supporting task id string true
type value is always true "supporting_task" string true
user_id The id of the user. string true

SupportingTaskParams

Input params for a Supporting Task.

{
  "category": "MEET",
  "description": "Weekly team sync.",
  "name": "Team Meeting",
  "state": "ACTIVE"
}
Property Description Type Format Required
category Supporting task's category. string true
description Free-form description of the supporting task. string true
name The supporting task's name. string true
state The supporting task's state. string false

Response Models

LeaveTypesResponse

Leave Type List Response

{
  "data": [
    {
      "category": "planned_paid",
      "id": "42",
      "inserted_at": "2023-08-03T07:00:47Z",
      "name": "Winter Holiday",
      "state": "active",
      "type": "leave_types",
      "updated_at": "2023-08-03T07:00:47Z"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

NamespacesResponse

Namespace List Response with cursor pagination

{
  "data": [
    {
      "attributes": {
        "code": "guidewire",
        "description": "Claims sourced from Guidewire",
        "inserted_at": "2026-06-02T00:00:00Z",
        "name": "Guidewire",
        "state": "active",
        "updated_at": "2026-06-02T00:00:00Z"
      },
      "id": "12",
      "links": {
        "self": "https://api.COMPANY.brmbl.io/v1/namespaces/12"
      },
      "type": "namespaces"
    }
  ],
  "meta": {
    "pagination": {
      "cursors": {
        "after": "g3QAAAABZAALaW5zZXJ0ZWRfYXQ=",
        "before": null
      },
      "total_count": 50
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.total_count Total number of matching records integer int64 false
meta.pagination.cursors.after Cursor for the next page string false
meta.pagination.cursors.before Cursor for the previous page string false

ProductionTaskResponse

Production Task Response

{
  "data": {
    "attributes": {
      "entry_mode": "MANUAL",
      "improvement_category": "rpa",
      "inserted_at": "2023-06-14T06:00:47Z",
      "name": "Test Task",
      "state": "active",
      "updated_at": "2023-06-14T06:00:47Z"
    },
    "id": "14150",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/14150"
    },
    "relationships": {},
    "type": "production_tasks"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/production_tasks/14150"
  }
}
Property Description Type Format Required
data ProductionTask false

WorkItemsResponse

Work Items List Response with cursor pagination

{
  "data": [
    {
      "attributes": {
        "actionable_at": "2026-01-15T10:00:00.000000Z",
        "cancelled_at": null,
        "claim": {
          "claim_type_id": 7,
          "line_of_business_id": 11,
          "litigation_status": "litigated",
          "managed_by": "tpa"
        },
        "completed_at": null,
        "created_at": "2026-01-15T10:00:00.000000Z",
        "external_id": "CLM-123",
        "inserted_at": "2026-01-15T10:00:00.000000Z",
        "metadata": {
          "source_system": "guidewire"
        },
        "namespace_id": 1,
        "snapshot_at": null,
        "started_at": null,
        "status": "in_progress",
        "type": "claim",
        "updated_at": "2026-01-15T10:00:00.000000Z",
        "work_item_sla_target_id": null
      },
      "id": "42",
      "links": {
        "self": "https://api.COMPANY.brmbl.io/v1/work_items/42"
      },
      "type": "work_items"
    }
  ],
  "meta": {
    "pagination": {
      "cursors": {
        "after": "g3QAAAABZAALaW5zZXJ0ZWRfYXQ=",
        "before": null
      },
      "total_count": 50
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.total_count Total number of matching records integer int64 false
meta.pagination.cursors.after Cursor for the next page string false
meta.pagination.cursors.before Cursor for the previous page string false

UsersResponse

User List Response

{
  "data": [
    {
      "attributes": {
        "email": "jane-doe12@brmbl.io",
        "full_name": "Jane Doe",
        "inserted_at": "1970-01-01T00:00:00.000000Z",
        "preferred_first_name": "Jane",
        "state": "active",
        "team_role": "team_contributor",
        "timezone": "Africa/Abidjan",
        "type": "users",
        "updated_at": "2023-01-01T00:00:00.000000Z"
      },
      "id": "23",
      "relationships": {
        "parent": {
          "data": {
            "id": "2",
            "type": "groups"
          },
          "links": {
            "self": "https://api.COMPANY.brmbl.io/v1/users/4/relationships/group"
          }
        }
      },
      "type": "users"
    }
  ]
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false

UserResponse

User Response

{
  "data": {
    "attributes": {
      "email": "jane-doe12@brmbl.io",
      "full_name": "Jane Doe",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "preferred_first_name": "Jane",
      "state": "active",
      "team_role": "team_contributor",
      "timezone": "Africa/Abidjan",
      "type": "users",
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "23",
    "relationships": {
      "parent": {
        "data": {
          "id": "2",
          "type": "groups"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/users/4/relationships/group"
        }
      }
    },
    "type": "users"
  }
}
Property Description Type Format Required
data User false

UserPlanResponse

User Plan Response.

{
  "data": {
    "attributes": {
      "contribution": 0.95,
      "from": "2023-12-18",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "until": "2023-12-24",
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "23",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/user_plans/4"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "2",
          "type": "groups"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/groups/2",
          "self": "https://api.COMPANY.brmbl.io/v1/user_plans/4/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "2",
          "type": "users"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/users/2",
          "self": "https://api.COMPANY.brmbl.io/v1/user_plans/4/relationships/user"
        }
      }
    },
    "type": "user_plans"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/user_plans/1055"
  }
}
Property Description Type Format Required
data.user_plans UserPlan false

QualityScoresResponse

Quality Score List Response

{
  "data": [
    {
      "attributes": {
        "date": "2022-02-23",
        "inserted_at": "1970-01-01T00:00:00.000000Z",
        "note": null,
        "score": 0.95,
        "updated_at": "2023-01-01T00:00:00.000000Z"
      },
      "id": "281",
      "links": {
        "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "2",
            "type": "production_tasks"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
            "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4/relationships/production_task"
          }
        },
        "user": {
          "data": {
            "id": "2",
            "type": "users"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/v1/users/2",
            "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4/relationships/user"
          }
        }
      },
      "type": "quality_scores"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

WorkItemResponse

A Work Item response.

{
  "data": {
    "attributes": {
      "actionable_at": "2026-01-15T10:00:00.000000Z",
      "cancelled_at": null,
      "claim": {
        "claim_type_id": 7,
        "line_of_business_id": 11,
        "litigation_status": "litigated",
        "managed_by": "tpa"
      },
      "completed_at": null,
      "created_at": "2026-01-15T10:00:00.000000Z",
      "external_id": "CLM-123",
      "inserted_at": "2026-01-15T10:00:00.000000Z",
      "metadata": {
        "source_system": "guidewire"
      },
      "namespace_id": 1,
      "snapshot_at": null,
      "started_at": null,
      "status": "in_progress",
      "type": "claim",
      "updated_at": "2026-01-15T10:00:00.000000Z",
      "work_item_sla_target_id": null
    },
    "id": "42",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/work_items/42"
    },
    "type": "work_items"
  },
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/work_items/42"
  }
}
Property Description Type Format Required
data WorkItem true
links.self Link for the relationship itself string uri false

CostCategoryResponse

A Bramble Cost Category.

{
  "data": {
    "attributes": {
      "description": "sample description",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "name": "Auto",
      "state": "active",
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "54",
    "type": "cost_categories"
  }
}
Property Description Type Format Required
data CostCategory false

SupportingTasksResponse

Supporting Task List Response

{
  "data": [
    {
      "category": "meeting",
      "id": "32",
      "inserted_at": "2023-06-14T06:00:47Z",
      "name": "Test supporting task",
      "state": "active",
      "type": "supporting_tasks",
      "updated_at": "2023-06-14T06:00:47Z"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

AgentDailyMetricsResponse

Agent Daily Metrics Response.

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "aux_seconds": null,
      "available_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "handle_seconds": null,
      "hold_seconds": null,
      "idle_seconds": null,
      "staffed_seconds": null,
      "talk_seconds": null,
      "user_id": 123
    },
    "id": "755",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/755"
    },
    "relationships": {},
    "type": "agent_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/755"
  }
}
Property Description Type Format Required
data.agent_daily_metrics AgentDailyMetrics false

SupportingTaskResponse

Supporting Task Response

{
  "data": {
    "category": "meeting",
    "id": "32",
    "inserted_at": "2023-06-14T06:00:47Z",
    "name": "Test supporting task",
    "state": "active",
    "type": "supporting_tasks",
    "updated_at": "2023-06-14T06:00:47Z"
  }
}
Property Description Type Format Required
data SupportingTask false

UserPlanSupportingTaskEntryResponse

User Plan Supporting Task Entry Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "minutes": 450,
      "type": "supporting_task",
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "54",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "1",
          "type": "groups"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/group"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2",
          "type": "supporting_tasks"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1",
          "type": "user_plans"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4"
  }
}
Property Description Type Format Required
data UserPlanEntry true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

GroupsResponse

Group List Response

{
  "data": [
    {
      "attributes": {
        "inserted_at": "1970-01-01T00:00:00.000000Z",
        "name": "North America",
        "state": "active",
        "updated_at": "2023-01-01T00:00:00.000000Z"
      },
      "id": "54",
      "relationships": {
        "parent": {
          "data": {
            "id": "2",
            "type": "groups"
          },
          "links": {
            "self": "https://api.COMPANY.brmbl.io/v1/groups/4/relationships/parent"
          }
        }
      },
      "type": "groups"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

UserPlanLeaveTypeEntryResponse

User Plan Leave Type Entry Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "minutes": 450,
      "type": "leave_type",
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "54",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "1",
          "type": "groups"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/group"
        }
      },
      "leave_plan": {
        "data": {
          "id": "2",
          "type": "leave_plans"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/leave_plan"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1",
          "type": "user_plans"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4"
  }
}
Property Description Type Format Required
data UserPlanEntry true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

CheckinItemsResponse

Checkin Items List Response

{
  "data": [
    {
      "attributes": {
        "date": "2020-04-20",
        "inserted_at": "1970-01-01T00:00:00.000000Z",
        "minutes": 0,
        "updated_at": "1970-01-01T00:00:00.000000Z",
        "volume": 0
      },
      "id": "",
      "relationships": {
        "checkin": {
          "data": {
            "id": "123",
            "type": "checkins"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/checkins/123",
            "self": "https://api.COMPANY.brmbl.io/checkin_items/1/relationships/checkin"
          }
        },
        "cost_category": {
          "data": {
            "id": "123",
            "type": "cost_categories"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/cost_categories/123",
            "self": "https://api.COMPANY.brmbl.io/checkin_items/1/relationships/cost_category"
          }
        },
        "friction_type": {
          "data": {
            "id": "123",
            "type": "friction_types"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/friction_types/123",
            "self": "https://api.COMPANY.brmbl.io/checkin_items/1/relationships/friction_type"
          }
        },
        "leave_type": {
          "data": {
            "id": "123",
            "type": "leave_types"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/leave_types/123",
            "self": "https://api.COMPANY.brmbl.io/checkin_items/1/relationships/leave_type"
          }
        },
        "production_task": {
          "data": {
            "id": "123",
            "type": "production_tasks"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/production_tasks/123",
            "self": "https://api.COMPANY.brmbl.io/checkin_items/1/relationships/production_task"
          }
        },
        "supporting_task": {
          "data": {
            "id": "123",
            "type": "supporting_tasks"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/supporting_tasks/123",
            "self": "https://api.COMPANY.brmbl.io/checkin_items/1/relationships/supporting_task"
          }
        },
        "user": {
          "data": {
            "id": "123",
            "type": "users"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/users/123",
            "self": "https://api.COMPANY.brmbl.io/checkin_items/1/relationships/user"
          }
        }
      },
      "type": "checkin_items"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

FrictionTypeResponse

Friction Type Response

{
  "data": {
    "category": "downtime",
    "id": "32",
    "inserted_at": "2023-08-01T06:00:47Z",
    "name": "Computer issues",
    "state": "active",
    "type": "friction_types",
    "updated_at": "2023-08-01T06:00:47Z"
  }
}
Property Description Type Format Required
data FrictionType false

LeaveTypeCheckinItemResponse

Leave Type Item Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "minutes": 30,
      "updated_at": "2023-01-01T00:00:00.000000Z",
      "volume": null
    },
    "id": "54",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "1",
          "type": "checkins"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/checkin"
        }
      },
      "leave_type": {
        "data": {
          "id": "2",
          "type": "leave_types"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/leave_type"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
  }
}
Property Description Type Format Required
data CheckinItem true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

CheckinItemResponse

Can either be a Production Task, Supporting Task, Leave Type or Friction Type Item response

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/ProductionTaskCheckinItemResponse"
    },
    {
      "$ref": "#/components/schemas/SupportingTaskCheckinItemResponse"
    },
    {
      "$ref": "#/components/schemas/FrictionTypeCheckinItemResponse"
    },
    {
      "$ref": "#/components/schemas/LeaveTypeCheckinItemResponse"
    }
  ]
}

SupportingTaskCheckinItemResponse

Supporting Task Item Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "minutes": 450,
      "updated_at": "2023-01-01T00:00:00.000000Z",
      "volume": null
    },
    "id": "54",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "1",
          "type": "checkins"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/checkin"
        }
      },
      "supporting_task": {
        "data": {
          "id": "2",
          "type": "supporting_tasks"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
  }
}
Property Description Type Format Required
data CheckinItem true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

UserPlanEntryResponse

Can either be a planned base time, supporting task or leave type entry response

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/UserPlanBaseTimeEntryResponse"
    },
    {
      "$ref": "#/components/schemas/UserPlanSupportingTaskEntryResponse"
    },
    {
      "$ref": "#/components/schemas/UserPlanLeaveTypeEntryResponse"
    }
  ]
}

ServiceLevelsResponse

Service Level List Response

{
  "data": [
    {
      "attributes": {
        "date": "2022-02-23",
        "inserted_at": "1970-01-01T00:00:00.000000Z",
        "note": null,
        "score": 0.55,
        "updated_at": "2023-01-01T00:00:00.000000Z"
      },
      "id": "281",
      "links": {
        "self": "https://api.COMPANY.brmbl.io/v1/service_levels/4"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "2",
            "type": "production_tasks"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
            "self": "https://api.COMPANY.brmbl.io/v1/service_levels/4/relationships/production_task"
          }
        }
      },
      "type": "service_levels"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

AgentQueueMetricsResponse

Agent Queue Metrics Response.

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "entry_id": 104181,
      "handle_seconds": null,
      "hold_seconds": null,
      "production_task_id": 25473,
      "quality": null,
      "talk_seconds": null,
      "user_id": 1669
    },
    "id": "1055",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/1055"
    },
    "relationships": {
      "checkin_item": {
        "data": {
          "id": "107190",
          "type": "checkin_items"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/checkin_items/107190",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/1132/relationships/checkin_item"
        }
      },
      "quality_score": {
        "data": {
          "id": "711",
          "type": "quality_scores"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/quality_scores/711",
          "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/1132/relationships/quality_score"
        }
      }
    },
    "type": "agent_queue_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/1055"
  }
}
Property Description Type Format Required
data.agent_queue_metrics AgentQueueMetrics false

UserPlanBaseTimeEntryResponse

User Plan Base Time Entry Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "minutes": 450,
      "type": "base_time",
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "54",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "1",
          "type": "groups"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/group"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/user"
        }
      },
      "user_plan": {
        "data": {
          "id": "1",
          "type": "user_plans"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4/relationships/user_plan"
        }
      }
    },
    "type": "user_plan_entries"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/user_plan_entries/4"
  }
}
Property Description Type Format Required
data UserPlanEntry true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

JsonErrorResponse

Property Description Type Format Required
errors array(any) true

CheckpointItemResponse

Checkpoint Item Response

{
  "data": {
    "attributes": {
      "amount": 5,
      "date": "2024-04-09",
      "inserted_at": "2024-04-09T00:00:00.000000Z",
      "updated_at": "2024-04-09T00:00:00.000000Z"
    },
    "id": "281",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/281"
    },
    "relationships": {
      "checkpoint": {
        "data": {
          "id": "3",
          "type": "checkpoints"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoints/3",
          "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/281/relationships/checkpoint"
        }
      },
      "production_task": {
        "data": {
          "id": "2",
          "type": "production_tasks"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
          "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/281/relationships/production_task"
        }
      }
    },
    "type": "checkpoint_items"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/inventory/checkpoint_item/4"
  }
}
Property Description Type Format Required
data CheckpointItem true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

FrictionTypeCheckinItemResponse

Friction Type Item Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "minutes": 30,
      "updated_at": "2023-01-01T00:00:00.000000Z",
      "volume": null
    },
    "id": "54",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "1",
          "type": "checkins"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/checkin"
        }
      },
      "friction_type": {
        "data": {
          "id": "2",
          "type": "friction_types"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/friction_type"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
  }
}
Property Description Type Format Required
data CheckinItem true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

ServiceLevelResponse

Service Level Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "note": null,
      "score": 0.55,
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "281",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/service_levels/4"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "2",
          "type": "production_tasks"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
          "self": "https://api.COMPANY.brmbl.io/v1/service_levels/4/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/service_levels/4"
  }
}
Property Description Type Format Required
data ServiceLevel true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

QueueDailyMetricsResponse

Queue Metrics Response.

{
  "data": {
    "attributes": {
      "after_call_work_seconds": null,
      "conversations": 3,
      "date": "2022-12-13",
      "handle_seconds": null,
      "hold_seconds": null,
      "queue_id": 25473,
      "talk_seconds": null
    },
    "id": "123",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/123"
    },
    "relationships": {
      "service_level": {
        "data": {
          "id": "456",
          "type": "service_levels"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/service_levels/456",
          "self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/123/relationships/service_level"
        }
      }
    },
    "type": "queue_daily_metrics"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/123"
  }
}
Property Description Type Format Required
data.queue_metrics QueueDailyMetrics false

ProductionTaskCheckinItemResponse

Production Task Entry Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "minutes": 60,
      "updated_at": "2023-01-01T00:00:00.000000Z",
      "volume": 1
    },
    "id": "54",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
    },
    "relationships": {
      "checkin": {
        "data": {
          "id": "1",
          "type": "checkins"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/checkin"
        }
      },
      "cost_category": {
        "data": {
          "id": "1",
          "type": "cost_categories"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/cost_category"
        }
      },
      "production_task": {
        "data": {
          "id": "2",
          "type": "production_tasks"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4/relationships/user"
        }
      }
    },
    "type": "checkin_items"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/checkin_items/4"
  }
}
Property Description Type Format Required
data CheckinItem true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

CheckinResponse

Checkin Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "updated_at": "2023-01-01T00:00:00.000000Z",
      "work_location": "distributed"
    },
    "id": "23",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/users/4"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "2",
          "type": "users"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/users/2",
          "self": "https://api.COMPANY.brmbl.io/v1/checkins/4/relationships/user"
        }
      }
    },
    "type": "checkins"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/checkins/4"
  }
}
Property Description Type Format Required
data Checkin true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false

IdentitySearchResponse

An Identity Search.

{
  "data": {
    "attributes": {
      "entity_id": 11,
      "first_seen_at": "2026-06-18T09:00:00Z",
      "last_seen_at": "2026-06-18T09:05:00Z",
      "occurrence_count": 2,
      "payload": {
        "litigated": true,
        "type": "claim"
      },
      "resource_type": "sla",
      "rule_id": 200,
      "status": "resolved"
    },
    "id": "7",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/identity_searches/7"
    },
    "type": "identity_searches"
  },
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/identity_searches/7"
  }
}
Property Description Type Format Required
data IdentitySearch true
links.self Link for the relationship itself string uri false

ProductionTasksResponse

Production Task List Response

{
  "data": [
    {
      "entry_mode": "MANUAL",
      "group_id": 1,
      "id": 34,
      "improvement_category": "rpa",
      "inserted_at": "2023-06-14T06:00:47Z",
      "name": "Test Task",
      "process_id": 1,
      "state": "active",
      "type": "production_tasks",
      "updated_at": "2023-06-14T06:00:47Z"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

CostCategoriesResponse

Cost Categories List Response

{
  "data": [
    {
      "attributes": {
        "description": "sample description",
        "inserted_at": "1970-01-01T00:00:00.000000Z",
        "name": "Auto",
        "state": "active",
        "updated_at": "2023-01-01T00:00:00.000000Z"
      },
      "id": "54",
      "type": "cost_categories"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

LeaveTypeResponse

Leave Type Response

{
  "data": {
    "category": "planned_paid",
    "id": "42",
    "inserted_at": "2023-08-03T07:00:47Z",
    "name": "Winter Holiday",
    "state": "active",
    "type": "leave_types",
    "updated_at": "2023-08-03T07:00:47Z"
  }
}
Property Description Type Format Required
data LeaveType false

NamespaceResponse

A Namespace.

{
  "data": {
    "attributes": {
      "code": "guidewire",
      "description": "Claims sourced from Guidewire",
      "inserted_at": "2026-06-02T00:00:00Z",
      "name": "Guidewire",
      "state": "active",
      "updated_at": "2026-06-02T00:00:00Z"
    },
    "id": "12",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/namespaces/12"
    },
    "type": "namespaces"
  },
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/namespaces/12"
  }
}
Property Description Type Format Required
data Namespace true
links.self Link for the relationship itself string uri false

FrictionTypesResponse

Friction Type List Response

{
  "data": [
    {
      "category": "downtime",
      "id": "32",
      "inserted_at": "2023-08-01T06:00:47Z",
      "name": "Computer issues",
      "state": "active",
      "type": "friction_types",
      "updated_at": "2023-08-01T06:00:47Z"
    }
  ],
  "meta": {
    "pagination": {
      "count": 2,
      "current_page": 1,
      "per_page": 2,
      "total": 50,
      "total_pages": 25
    }
  }
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false
meta.pagination.count Number of records in the current page integer int64 false
meta.pagination.current_page Current page number integer int64 false
meta.pagination.per_page Number of records per page integer int64 false
meta.pagination.total Total number of records integer int64 false
meta.pagination.total_pages Total number of pages integer int64 false

GroupResponse

A Bramble Group.

{
  "data": {
    "attributes": {
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "name": "North America",
      "state": "active",
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "54",
    "relationships": {
      "parent": {
        "data": {
          "id": "2",
          "type": "groups"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/groups/4/relationships/parent"
        }
      }
    },
    "type": "groups"
  }
}
Property Description Type Format Required
data Group false

QualityScoreResponse

A User's Quality Score.

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "note": null,
      "score": 0.95,
      "updated_at": "2023-01-01T00:00:00.000000Z"
    },
    "id": "281",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "2",
          "type": "production_tasks"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/production_tasks/2",
          "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "2",
          "type": "users"
        },
        "links": {
          "related": "https://api.COMPANY.brmbl.io/v1/users/2",
          "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4/relationships/user"
        }
      }
    },
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/quality_scores/4"
  }
}
Property Description Type Format Required
data QualityScore true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri false