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
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:
- Resource groups:
checkins,contact_center,quality,work_items,plans,inventory,users,groups,process,operations. - Permissions:
read(GET requests),write(POST, PATCH, PUT, DELETE requests), orall(both).
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:
- General errors like Internal Server Error or Authentication Error
- Client input related errors like JSON Error or Conflict Error
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_KYUL5Mmi_QspaLyGmwOZKdo98vNV55QsY" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "82783",
"work_location": null
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:09Z",
"updated_at": "2026-05-07T07:06:09Z",
"work_location": "office"
},
"id": "25393",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25393"
},
"relationships": {
"user": {
"data": {
"id": "82783",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82783",
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25393/relationships/user"
}
}
},
"type": "checkins"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25393"
}
}
Request: Create a check-in
curl -X POST https://api.COMPANY.brmbl.io/v1/checkins \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_6ku9pmIk_w2WjGZCj7fNW599I2kZh5O7E" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "82761",
"work_location": "distributed"
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:08Z",
"updated_at": "2026-05-07T07:06:08Z",
"work_location": "distributed"
},
"id": "25382",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25382"
},
"relationships": {
"user": {
"data": {
"id": "82761",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82761",
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25382/relationships/user"
}
}
},
"type": "checkins"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25382"
}
}
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/25380 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_9cnfPA4w_1ZaoRc6VW0ONGX6O5C0fialP" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:08Z",
"updated_at": "2026-05-07T07:06:08Z",
"work_location": "office"
},
"id": "25380",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25380"
},
"relationships": {
"user": {
"data": {
"id": "82757",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82757",
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25380/relationships/user"
}
}
},
"type": "checkins"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25380"
}
}
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/82779/date/2020-01-01 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Ye2RGN6D_oT2Htc09JiRH20Cb51SNtehb" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:09Z",
"updated_at": "2026-05-07T07:06:09Z",
"work_location": "office"
},
"id": "25391",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25391"
},
"relationships": {
"user": {
"data": {
"id": "82779",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82779",
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25391/relationships/user"
}
}
},
"type": "checkins"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkins/25391"
}
}
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_9ZMEK1DQ_6MIOqHehIzoE0vO4et6x4leu" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83346",
"volume": 1,
"production_task_id": 18801,
"checkin_id": "25487",
"cost_category_id": null,
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:22Z",
"minutes": "10.00",
"updated_at": "2026-05-07T07:06:22Z",
"volume": 1
},
"id": "38378",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38378"
},
"relationships": {
"checkin": {
"data": {
"id": "25487",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25487",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38378/relationships/checkin"
}
},
"production_task": {
"data": {
"id": "18801",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18801",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38378/relationships/production_task"
}
},
"user": {
"data": {
"id": "83346",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83346",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38378/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38378"
}
}
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_6pPMyvIm_DRrYRAgysMjqs22rWVtjnZv3" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83436",
"volume": 1,
"production_task_id": 18840,
"checkin_id": "25550",
"cost_category_id": "3044",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:26Z",
"minutes": "10.00",
"updated_at": "2026-05-07T07:06:26Z",
"volume": 1
},
"id": "38500",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38500"
},
"relationships": {
"checkin": {
"data": {
"id": "25550",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25550",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38500/relationships/checkin"
}
},
"cost_category": {
"data": {
"id": "3044",
"type": "cost_categories"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/cost_categories/3044",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38500/relationships/cost_category"
}
},
"production_task": {
"data": {
"id": "18840",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18840",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38500/relationships/production_task"
}
},
"user": {
"data": {
"id": "83436",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83436",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38500/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38500"
}
}
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"
}
]
}
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_I7SKzyzD_vtqkVqRCUMdk6VFn3i0nN2D2" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83431",
"supporting_task_id": "6356",
"checkin_id": "25547",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:26Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:26Z",
"volume": null
},
"id": "38496",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38496"
},
"relationships": {
"checkin": {
"data": {
"id": "25547",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25547",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38496/relationships/checkin"
}
},
"supporting_task": {
"data": {
"id": "6356",
"type": "supporting_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/6356",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38496/relationships/supporting_task"
}
},
"user": {
"data": {
"id": "83431",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83431",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38496/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38496"
}
}
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"
}
]
}
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_Qh4c1uS3_vHxwIa6iMrgE4abvnTfT5WWs" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83383",
"friction_type_id": "4964",
"checkin_id": "25512",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:24Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:24Z",
"volume": null
},
"id": "38426",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38426"
},
"relationships": {
"checkin": {
"data": {
"id": "25512",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25512",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38426/relationships/checkin"
}
},
"friction_type": {
"data": {
"id": "4964",
"type": "friction_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/friction_types/4964",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38426/relationships/friction_type"
}
},
"user": {
"data": {
"id": "83383",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83383",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38426/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38426"
}
}
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"
}
]
}
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_5ZajGUjD_Wmk0MHLyfpb3Br4JqGt7VcgE" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83385",
"checkin_id": "25513",
"leave_type_id": "5244",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:24Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:24Z",
"volume": null
},
"id": "38428",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38428"
},
"relationships": {
"checkin": {
"data": {
"id": "25513",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25513",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38428/relationships/checkin"
}
},
"leave_type": {
"data": {
"id": "5244",
"type": "leave_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/leave_types/5244",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38428/relationships/leave_type"
}
},
"user": {
"data": {
"id": "83385",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83385",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38428/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38428"
}
}
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"
}
]
}
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/38372 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_HVGkucQC_nUgv1ufQeNkS6nPcckntmxDS" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:22Z",
"minutes": "150.00",
"updated_at": "2026-05-07T07:06:22Z",
"volume": 15
},
"id": "38372",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38372"
},
"relationships": {
"checkin": {
"data": {
"id": "25483",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25483",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38372/relationships/checkin"
}
},
"production_task": {
"data": {
"id": "18799",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18799",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38372/relationships/production_task"
}
},
"user": {
"data": {
"id": "83342",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83342",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38372/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38372"
}
}
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/38492 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_bdedXcSr_EfB1I9hwWXejSXWS3Gc5eHfa" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:25Z",
"minutes": "150.00",
"updated_at": "2026-05-07T07:06:25Z",
"volume": 15
},
"id": "38492",
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38492"
},
"relationships": {},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38492"
}
}
Request: Returns a check-in item
curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/38328?include=production_task \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4ZZ04W1q_k2DfbdrGwrA3XXn2gEko4GsA" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:21Z",
"minutes": "150.00",
"updated_at": "2026-05-07T07:06:21Z",
"volume": 15
},
"id": "38328",
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38328"
},
"relationships": {
"production_task": {
"data": {
"id": "18787",
"type": "production_tasks"
},
"links": {
"related": "http://company.brmbl.io/v1/production_tasks/18787",
"self": "http://company.brmbl.io/v1/checkin_items/38328/relationships/production_task"
}
}
},
"type": "checkin_items"
},
"included": [
{
"attributes": {
"description": "pt-uB2h/Pz0",
"entry_mode": "AUTO",
"improvement_category": "rpa",
"inserted_at": "2026-05-07T07:06:21Z",
"name": "TaskB",
"state": "detached",
"updated_at": "2026-05-07T07:06:21Z"
},
"id": "18787",
"links": {
"self": "http://company.brmbl.io/v1/production_tasks/18787"
},
"relationships": {},
"type": "production_tasks"
}
],
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38328"
}
}
Request: Returns a check-in item
curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/38329?include=supporting_task \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4ZZ04W1q_k2DfbdrGwrA3XXn2gEko4GsA" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:21Z",
"minutes": "60.00",
"updated_at": "2026-05-07T07:06:21Z",
"volume": null
},
"id": "38329",
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38329"
},
"relationships": {
"supporting_task": {
"data": {
"id": "6325",
"type": "supporting_tasks"
},
"links": {
"related": "http://company.brmbl.io/v1/supporting_tasks/6325",
"self": "http://company.brmbl.io/v1/checkin_items/38329/relationships/supporting_task"
}
}
},
"type": "checkin_items"
},
"included": [
{
"attributes": {
"category": "meet",
"description": "wUMqp/uJ",
"inserted_at": "2026-05-07T07:06:21Z",
"name": "wUMqp/uJ",
"state": "active",
"updated_at": "2026-05-07T07:06:21Z"
},
"id": "6325",
"links": {
"self": "http://company.brmbl.io/v1/supporting_tasks/6325"
},
"relationships": {},
"type": "supporting_tasks"
}
],
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38329"
}
}
Request: Returns a check-in item
curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/38330?include=friction_type \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4ZZ04W1q_k2DfbdrGwrA3XXn2gEko4GsA" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:21Z",
"minutes": "30.00",
"updated_at": "2026-05-07T07:06:21Z",
"volume": null
},
"id": "38330",
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38330"
},
"relationships": {
"friction_type": {
"data": {
"id": "4959",
"type": "friction_types"
},
"links": {
"related": "http://company.brmbl.io/v1/friction_types/4959",
"self": "http://company.brmbl.io/v1/checkin_items/38330/relationships/friction_type"
}
}
},
"type": "checkin_items"
},
"included": [
{
"attributes": {
"category": "interruption",
"description": "OeIDjEHg",
"inserted_at": "2026-05-07T07:06:21Z",
"name": "OeIDjEHg",
"state": "active",
"updated_at": "2026-05-07T07:06:21Z"
},
"id": "4959",
"links": {
"self": "http://company.brmbl.io/v1/friction_types/4959"
},
"relationships": {},
"type": "friction_types"
}
],
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38330"
}
}
Request: Returns a check-in item
curl -X GET https://api.COMPANY.brmbl.io/v1/checkin_items/38331?include=leave_type \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4ZZ04W1q_k2DfbdrGwrA3XXn2gEko4GsA" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:21Z",
"minutes": "480.00",
"updated_at": "2026-05-07T07:06:21Z",
"volume": null
},
"id": "38331",
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38331"
},
"relationships": {
"leave_type": {
"data": {
"id": "5238",
"type": "leave_types"
},
"links": {
"related": "http://company.brmbl.io/v1/leave_types/5238",
"self": "http://company.brmbl.io/v1/checkin_items/38331/relationships/leave_type"
}
}
},
"type": "checkin_items"
},
"included": [
{
"attributes": {
"category": "planned_paid",
"description": "8TAmOwyz",
"inserted_at": "2026-05-07T07:06:21Z",
"name": "8TAmOwyz",
"state": "active",
"updated_at": "2026-05-07T07:06:21Z"
},
"id": "5238",
"links": {
"self": "http://company.brmbl.io/v1/leave_types/5238"
},
"relationships": {},
"type": "leave_types"
}
],
"links": {
"self": "http://company.brmbl.io/v1/checkin_items/38331"
}
}
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_U5nXXzwg_PaohpSZh8b6Wxfmnnb2meRjT" \
Response: 200 OK
{
"data": [
{
"attributes": {
"date": "2020-01-02",
"volume": 15
},
"id": "38437",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38437"
},
"relationships": {},
"type": "checkin_items"
},
{
"attributes": {
"date": "2020-01-02",
"volume": 20
},
"id": "38438",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38438"
},
"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 | |
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/38306 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_3vTEbPGM_0ktEH5MztVxqKk10nMm5Oh3D" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83294",
"volume": 1,
"production_task_id": 18779,
"checkin_id": "25448",
"cost_category_id": null,
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:21Z",
"minutes": "10.00",
"updated_at": "2026-05-07T07:06:21Z",
"volume": 1
},
"id": "38306",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38306"
},
"relationships": {
"checkin": {
"data": {
"id": "25448",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25448",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38306/relationships/checkin"
}
},
"production_task": {
"data": {
"id": "18779",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18779",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38306/relationships/production_task"
}
},
"user": {
"data": {
"id": "83294",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83294",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38306/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38306"
}
}
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/38356 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_4hoaRuQQ_ysJmIC5uuyVJcCCULtOqVpr4" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83333",
"volume": 1,
"production_task_id": 18795,
"checkin_id": "25476",
"cost_category_id": "3030",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:22Z",
"minutes": "10.00",
"updated_at": "2026-05-07T07:06:22Z",
"volume": 1
},
"id": "38356",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38356"
},
"relationships": {
"checkin": {
"data": {
"id": "25476",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25476",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38356/relationships/checkin"
}
},
"cost_category": {
"data": {
"id": "3030",
"type": "cost_categories"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/cost_categories/3030",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38356/relationships/cost_category"
}
},
"production_task": {
"data": {
"id": "18795",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18795",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38356/relationships/production_task"
}
},
"user": {
"data": {
"id": "83333",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83333",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38356/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38356"
}
}
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"
}
]
}
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/38369 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_7qgsL28D_GG4fXC2GgOYyaxbnRcBVz07J" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83339",
"supporting_task_id": "6334",
"checkin_id": "25482",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:22Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:22Z",
"volume": null
},
"id": "38369",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38369"
},
"relationships": {
"checkin": {
"data": {
"id": "25482",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25482",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38369/relationships/checkin"
}
},
"supporting_task": {
"data": {
"id": "6334",
"type": "supporting_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/6334",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38369/relationships/supporting_task"
}
},
"user": {
"data": {
"id": "83339",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83339",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38369/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38369"
}
}
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/38507 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_58t8GQhR_UN0Iw5hRQvfJN0gFtfNbkS37" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83441",
"friction_type_id": "4972",
"checkin_id": "25554",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:26Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:26Z",
"volume": null
},
"id": "38507",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38507"
},
"relationships": {
"checkin": {
"data": {
"id": "25554",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25554",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38507/relationships/checkin"
}
},
"friction_type": {
"data": {
"id": "4972",
"type": "friction_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/friction_types/4972",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38507/relationships/friction_type"
}
},
"user": {
"data": {
"id": "83441",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83441",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38507/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38507"
}
}
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/38399 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_pGfT1K5T_JhEeFY5gxv2Wagi8yYMOw2xV" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83361",
"checkin_id": "25499",
"leave_type_id": "5241",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:23Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:23Z",
"volume": null
},
"id": "38399",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38399"
},
"relationships": {
"checkin": {
"data": {
"id": "25499",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25499",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38399/relationships/checkin"
}
},
"leave_type": {
"data": {
"id": "5241",
"type": "leave_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/leave_types/5241",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38399/relationships/leave_type"
}
},
"user": {
"data": {
"id": "83361",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83361",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38399/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38399"
}
}
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_SWF5dcI0_eUftF6pzk3yByrVvdBe1sm4h" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83328",
"volume": 1,
"production_task_id": 18793,
"checkin_id": "25473",
"cost_category_id": null,
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:22Z",
"minutes": "10.00",
"updated_at": "2026-05-07T07:06:22Z",
"volume": 1
},
"id": "38353",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38353"
},
"relationships": {
"checkin": {
"data": {
"id": "25473",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25473",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38353/relationships/checkin"
}
},
"production_task": {
"data": {
"id": "18793",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18793",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38353/relationships/production_task"
}
},
"user": {
"data": {
"id": "83328",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83328",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38353/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38353"
}
}
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_CkfoKcjB_eIzNQ3M8Gd0627uW5vhNavVw" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83403",
"volume": 1,
"production_task_id": 18825,
"checkin_id": "25526",
"cost_category_id": "3041",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:24Z",
"minutes": "10.00",
"updated_at": "2026-05-07T07:06:24Z",
"volume": 1
},
"id": "38452",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38452"
},
"relationships": {
"checkin": {
"data": {
"id": "25526",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25526",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38452/relationships/checkin"
}
},
"cost_category": {
"data": {
"id": "3041",
"type": "cost_categories"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/cost_categories/3041",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38452/relationships/cost_category"
}
},
"production_task": {
"data": {
"id": "18825",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18825",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38452/relationships/production_task"
}
},
"user": {
"data": {
"id": "83403",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83403",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38452/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38452"
}
}
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_JKgbEtmd_diIsEa5Jmz7wmWjl6gSQvhyI" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83419",
"volume": 1,
"production_task_id": 18832,
"checkin_id": "25539",
"cost_category_id": null,
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:25Z",
"minutes": "20.00",
"updated_at": "2026-05-07T07:06:26Z",
"volume": 2
},
"id": "38479",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38479"
},
"relationships": {
"checkin": {
"data": {
"id": "25539",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25539",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38479/relationships/checkin"
}
},
"production_task": {
"data": {
"id": "18832",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18832",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38479/relationships/production_task"
}
},
"user": {
"data": {
"id": "83419",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83419",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38479/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38479"
}
}
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_tK5WWS3B_wwZPedLjBkQOXS1Z0MiWuJID" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "83377",
"volume": -101,
"production_task_id": 18814,
"checkin_id": "25509",
"cost_category_id": null,
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:24Z",
"minutes": "1000.00",
"updated_at": "2026-05-07T07:06:24Z",
"volume": 100
},
"id": "38419",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38419"
},
"relationships": {
"checkin": {
"data": {
"id": "25509",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25509",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38419/relationships/checkin"
}
},
"production_task": {
"data": {
"id": "18814",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18814",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38419/relationships/production_task"
}
},
"user": {
"data": {
"id": "83377",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83377",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38419/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38419"
}
}
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_oUjfSDnX_rwpQGsIHlphyQT05pxzsH8cH" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83307",
"supporting_task_id": "6324",
"checkin_id": "25458",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:21Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:21Z",
"volume": null
},
"id": "38324",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38324"
},
"relationships": {
"checkin": {
"data": {
"id": "25458",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25458",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38324/relationships/checkin"
}
},
"supporting_task": {
"data": {
"id": "6324",
"type": "supporting_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/6324",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38324/relationships/supporting_task"
}
},
"user": {
"data": {
"id": "83307",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83307",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38324/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38324"
}
}
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_1q1F6uJ7_rUUEwN6I51dX7aZOvvjhgEFa" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83323",
"supporting_task_id": "6329",
"checkin_id": "25469",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:22Z",
"minutes": "900.00",
"updated_at": "2026-05-07T07:06:23Z",
"volume": null
},
"id": "38345",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38345"
},
"relationships": {
"checkin": {
"data": {
"id": "25469",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25469",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38345/relationships/checkin"
}
},
"supporting_task": {
"data": {
"id": "6329",
"type": "supporting_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/6329",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38345/relationships/supporting_task"
}
},
"user": {
"data": {
"id": "83323",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83323",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38345/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38345"
}
}
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_bIjYDouE_nArNeMnLP7fS0zq7nXKtSIWn" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": -6.0,
"user_id": "83291",
"supporting_task_id": "6319",
"checkin_id": "25446",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:20Z",
"minutes": "5.00",
"updated_at": "2026-05-07T07:06:20Z",
"volume": null
},
"id": "38303",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38303"
},
"relationships": {
"checkin": {
"data": {
"id": "25446",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25446",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38303/relationships/checkin"
}
},
"supporting_task": {
"data": {
"id": "6319",
"type": "supporting_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/6319",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38303/relationships/supporting_task"
}
},
"user": {
"data": {
"id": "83291",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83291",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38303/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38303"
}
}
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_tBFHQ5KZ_k653LHfc3YWvzorPwBJKt1iE" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83416",
"friction_type_id": "4967",
"checkin_id": "25537",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:25Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:25Z",
"volume": null
},
"id": "38475",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38475"
},
"relationships": {
"checkin": {
"data": {
"id": "25537",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25537",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38475/relationships/checkin"
}
},
"friction_type": {
"data": {
"id": "4967",
"type": "friction_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/friction_types/4967",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38475/relationships/friction_type"
}
},
"user": {
"data": {
"id": "83416",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83416",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38475/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38475"
}
}
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_KCDQQLOh_9QN7Y05rQppsVHeN10cbd5rk" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83335",
"friction_type_id": "4960",
"checkin_id": "25478",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:22Z",
"minutes": "900.00",
"updated_at": "2026-05-07T07:06:23Z",
"volume": null
},
"id": "38361",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38361"
},
"relationships": {
"checkin": {
"data": {
"id": "25478",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25478",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38361/relationships/checkin"
}
},
"friction_type": {
"data": {
"id": "4960",
"type": "friction_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/friction_types/4960",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38361/relationships/friction_type"
}
},
"user": {
"data": {
"id": "83335",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83335",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38361/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38361"
}
}
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_SXQede7S_pZ9jj23R5ygPGTVcnNMY8xAL" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": -6.0,
"user_id": "83412",
"friction_type_id": "4966",
"checkin_id": "25533",
"replacement": false
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:25Z",
"minutes": "5.00",
"updated_at": "2026-05-07T07:06:25Z",
"volume": null
},
"id": "38464",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38464"
},
"relationships": {
"checkin": {
"data": {
"id": "25533",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25533",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38464/relationships/checkin"
}
},
"friction_type": {
"data": {
"id": "4966",
"type": "friction_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/friction_types/4966",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38464/relationships/friction_type"
}
},
"user": {
"data": {
"id": "83412",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83412",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38464/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38464"
}
}
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_GhXLjDkw_JV0es3NqMoJqbhFytWevH16s" \
-d @- << EOF
{
"date": "2022-02-23",
"minutes": 450.0,
"user_id": "83305",
"checkin_id": "25456",
"leave_type_id": "5237",
"replacement": false
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:21Z",
"minutes": "450.00",
"updated_at": "2026-05-07T07:06:21Z",
"volume": null
},
"id": "38320",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38320"
},
"relationships": {
"checkin": {
"data": {
"id": "25456",
"type": "checkins"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkins/25456",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38320/relationships/checkin"
}
},
"leave_type": {
"data": {
"id": "5237",
"type": "leave_types"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/leave_types/5237",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38320/relationships/leave_type"
}
},
"user": {
"data": {
"id": "83305",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83305",
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38320/relationships/user"
}
}
},
"type": "checkin_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/checkin_items/38320"
}
}
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 or friction type 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_dIilOFWS_D96C4XIWGA9N6CRKjrOGoz8Z" \
-d @- << EOF
{
"date": "2024-04-09",
"amount": 10,
"production_task_id": 18766
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"amount": 10,
"date": "2024-04-09",
"external_resource_uri": null,
"inserted_at": "2026-05-07T07:06:15Z",
"updated_at": "2026-05-07T07:06:15Z"
},
"id": "1156",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1156"
},
"relationships": {
"checkpoint": {
"data": {
"id": "2729",
"type": "checkpoints"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoints/2729",
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1156/relationships/checkpoint"
}
},
"production_task": {
"data": {
"id": "18766",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18766",
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1156/relationships/production_task"
}
}
},
"type": "checkpoint_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1156"
}
}
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/1154 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_FMKsfEYj_hKDehbicDDv7TlKgwCLNcrql" \
Response: 200 OK
{
"data": {
"attributes": {
"amount": 10,
"date": "2024-01-01",
"external_resource_uri": null,
"inserted_at": "2026-05-07T07:06:15Z",
"updated_at": "2026-05-07T07:06:15Z"
},
"id": "1154",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1154"
},
"relationships": {
"production_task": {
"data": {
"id": "18765",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18765",
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1154/relationships/production_task"
}
}
},
"type": "checkpoint_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1154"
}
}
(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/1158 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_QGlVIhle_VRse4frUBcsvNSukD4ZRZPP1" \
Response: 200 OK
{
"data": {
"attributes": {
"amount": 30,
"date": "2024-01-01",
"external_resource_uri": null,
"inserted_at": "2026-05-07T07:06:15Z",
"updated_at": "2026-05-07T07:06:15Z"
},
"id": "1158",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1158"
},
"relationships": {
"checkpoint": {
"data": {
"id": "2732",
"type": "checkpoints"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoints/2732",
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1158/relationships/checkpoint"
}
},
"production_task": {
"data": {
"id": "18767",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18767",
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1158/relationships/production_task"
}
}
},
"type": "checkpoint_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/inventory/checkpoint_items/1158"
}
}
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_52qu5FSW_ZJYSQA8PgzK7E190rOKnSIwM" \
-d @- << EOF
{
"date": "2022-12-13",
"user_id": 82739,
"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": 82739
},
"id": "856",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/856"
},
"relationships": {},
"type": "agent_daily_metrics"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/856"
}
}
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_WZBpOPTr_ywaAeGI4Jkj2WspTwPS3zifL" \
-d @- << EOF
{
"date": "2022-12-13",
"user_id": 82816,
"entry_id": 38245,
"production_task_id": 18690,
"after_call_work_seconds": null,
"conversations": 3,
"handle_seconds": null,
"hold_seconds": null,
"talk_seconds": null,
"quality_score_id": 6865,
"quality_score": 0.8
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"after_call_work_seconds": null,
"conversations": 3,
"date": "2022-12-13",
"entry_id": 38245,
"handle_seconds": null,
"hold_seconds": null,
"production_task_id": 18690,
"quality": 0.8,
"talk_seconds": null,
"user_id": 82816
},
"id": "473",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/473"
},
"relationships": {
"checkin_item": {
"data": {
"id": "38245",
"type": "checkin_items"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkin_items/38245",
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/473/relationships/checkin_item"
}
},
"quality_score": {
"data": {
"id": "6865",
"type": "quality_scores"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/quality_scores/6865",
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/473/relationships/quality_score"
}
}
},
"type": "agent_queue_metrics"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/473"
}
}
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_lBPG6SSh_qCKGyMyPE1neAs5a7SxgcqNa" \
-d @- << EOF
{
"date": "2022-12-13",
"user_id": 82818,
"entry_id": 38247,
"production_task_id": 18691,
"after_call_work_seconds": null,
"conversations": 3,
"handle_seconds": null,
"hold_seconds": null,
"talk_seconds": null,
"quality_score_id": 6866,
"quality_score": 0.87
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"after_call_work_seconds": null,
"conversations": 3,
"date": "2022-12-13",
"entry_id": 38247,
"handle_seconds": null,
"hold_seconds": null,
"production_task_id": 18691,
"quality": 0.87,
"talk_seconds": null,
"user_id": 82818
},
"id": "474",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/474"
},
"relationships": {
"checkin_item": {
"data": {
"id": "38247",
"type": "checkin_items"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkin_items/38247",
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/474/relationships/checkin_item"
}
},
"quality_score": {
"data": {
"id": "6866",
"type": "quality_scores"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/quality_scores/6866",
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/474/relationships/quality_score"
}
}
},
"type": "agent_queue_metrics"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/474"
}
}
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_DH2hRGQC_XNrwV5f3unEBg8LpVsmqqXD2" \
-d @- << EOF
{
"date": "2022-12-13",
"user_id": 82806,
"entry_id": 38237,
"production_task_id": 18685,
"after_call_work_seconds": null,
"conversations": 3,
"handle_seconds": null,
"hold_seconds": null,
"talk_seconds": null,
"quality_score_id": 6861,
"quality_score": 0.8
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"after_call_work_seconds": null,
"conversations": 3,
"date": "2022-12-13",
"entry_id": 38237,
"handle_seconds": null,
"hold_seconds": null,
"production_task_id": 18685,
"quality": 0.8,
"talk_seconds": null,
"user_id": 82806
},
"id": "468",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/468"
},
"relationships": {
"checkin_item": {
"data": {
"id": "38237",
"type": "checkin_items"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/checkin_items/38237",
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/468/relationships/checkin_item"
}
},
"quality_score": {
"data": {
"id": "6861",
"type": "quality_scores"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/quality_scores/6861",
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/468/relationships/quality_score"
}
}
},
"type": "agent_queue_metrics"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_queue_metrics/468"
}
}
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_Sm2ai4ib_g0bricGLa85AXbk8l7LV25z9" \
-d @- << EOF
{
"date": "2022-12-13",
"production_task_id": 18757,
"after_call_work_seconds": null,
"conversations": 3,
"handle_seconds": null,
"hold_seconds": null,
"talk_seconds": null,
"service_level": 0.6
}
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": 18757,
"talk_seconds": null
},
"id": "832",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/832"
},
"relationships": {
"service_level": {
"data": {
"id": "3695",
"type": "service_levels"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/service_levels/3695",
"self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/832/relationships/service_level"
}
}
},
"type": "queue_daily_metrics"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/queue_daily_metrics/832"
}
}
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/863 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_nH5zDyu3_5U1ZpHUbqUwlfUdvPCyaXkaM" \
Response: 200 OK
{
"data": {
"attributes": {
"after_call_work_seconds": null,
"aux_seconds": null,
"available_seconds": null,
"conversations": 344,
"date": "2026-05-07",
"handle_seconds": null,
"hold_seconds": null,
"idle_seconds": null,
"staffed_seconds": null,
"talk_seconds": null,
"user_id": 82749
},
"id": "863",
"links": {
"self": "http://company.brmbl.io/v1/agent_daily_metrics/863"
},
"relationships": {},
"type": "agent_daily_metrics"
},
"included": [],
"links": {
"self": "http://company.brmbl.io/v1/agent_daily_metrics/863"
}
}
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/469 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Tic9Mcz4_aL9esBUH8wFq6Qdko92pRTXp" \
Response: 200 OK
{
"data": {
"attributes": {
"after_call_work_seconds": null,
"conversations": 11,
"date": "2026-05-06",
"entry_id": null,
"handle_seconds": null,
"hold_seconds": null,
"production_task_id": 18686,
"quality": null,
"talk_seconds": 500,
"user_id": 82808
},
"id": "469",
"links": {
"self": "http://company.brmbl.io/v1/agent_queue_metrics/469"
},
"relationships": {},
"type": "agent_queue_metrics"
},
"included": [],
"links": {
"self": "http://company.brmbl.io/v1/agent_queue_metrics/469"
}
}
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/833 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_dcby8NYS_V7NKxfwtWK5w5GxdNqUNn4GI" \
Response: 200 OK
{
"data": {
"attributes": {
"after_call_work_seconds": null,
"conversations": 348,
"date": "2026-05-07",
"handle_seconds": null,
"hold_seconds": null,
"queue_id": 18758,
"talk_seconds": null
},
"id": "833",
"links": {
"self": "http://company.brmbl.io/v1/queue_daily_metrics/833"
},
"relationships": {},
"type": "queue_daily_metrics"
},
"included": [],
"links": {
"self": "http://company.brmbl.io/v1/queue_daily_metrics/833"
}
}
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_Lgh7cZZm_BwlNo0Mf6VkseHLCX5jjIbaC" \
-d @- << EOF
{
"date": "2022-12-13",
"user_id": 82747,
"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": 82747
},
"id": "862",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/862"
},
"relationships": {},
"type": "agent_daily_metrics"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/862"
}
}
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_NOE44F6y_Qo3sky5hTorZ6vdHvvmsmi9k" \
-d @- << EOF
{
"date": "2022-12-13",
"user_id": 82743,
"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": 82743
},
"id": "859",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/859"
},
"relationships": {},
"type": "agent_daily_metrics"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/agent_daily_metrics/859"
}
}
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_yVMhuCAj_jyEu4Mt7864LuVd78NsaVFfX" \
-d @- << EOF
{
"name": "New Category",
"description": "A new cost bucket."
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"description": "A new cost bucket.",
"inserted_at": "2026-05-07T07:06:09Z",
"name": "New Category",
"state": "active",
"updated_at": "2026-05-07T07:06:09Z"
},
"id": "2994",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/2994"
},
"relationships": {},
"type": "cost_categories"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/2994"
}
}
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/3005 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_pMWClsuH_UUOawRz7T4wfSDd0uzDyRECZ" \
Response: 200 OK
{
"data": {
"attributes": {
"description": "pt-zsnl3DbF",
"inserted_at": "2026-05-07T07:06:09Z",
"name": "Property",
"state": "active",
"updated_at": "2026-05-07T07:06:09Z"
},
"id": "3005",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/3005"
},
"relationships": {},
"type": "cost_categories"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/3005"
}
}
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/2996 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_mojX0yW5_9PIN86TmNUyzuxypSKRW4frp" \
Response: 200 OK
{
"data": {
"attributes": {
"description": "pt-4tPByLIB",
"inserted_at": "2026-05-07T07:06:09Z",
"name": "Property",
"state": "active",
"updated_at": "2026-05-07T07:06:09Z"
},
"id": "2996",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/2996"
},
"relationships": {},
"type": "cost_categories"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/2996"
}
}
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_Bkx4mPTA_4RldVMNUqZJYKIRC1GaY1dO6" \
Response: 200 OK
{
"data": [
{
"attributes": {
"name": "Auto",
"state": "active"
},
"id": "2990",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/2990"
},
"relationships": {},
"type": "cost_categories"
},
{
"attributes": {
"name": "Property",
"state": "active"
},
"id": "2991",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/2991"
},
"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/3015 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_U2uP7DIN_yJEZjxosSjlylvtl5MGZdfts" \
-d @- << EOF
{
"name": "Renamed",
"description": "Updated description."
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"description": "Updated description.",
"inserted_at": "2026-05-07T07:06:09Z",
"name": "Renamed",
"state": "active",
"updated_at": "2026-05-07T07:06:09Z"
},
"id": "3015",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/3015"
},
"relationships": {},
"type": "cost_categories"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/cost_categories/3015"
}
}
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_0MIrx1n5_BUh15RL2Ld9aMrgQuGTvcQZ4" \
-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-05-07T07:06:11Z",
"name": "Slow tooling",
"state": "active",
"updated_at": "2026-05-07T07:06:11Z"
},
"id": "4927",
"links": {
"self": "http://www.example.com/v1/friction_types/4927"
},
"relationships": {},
"type": "friction_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/friction_types/4927"
}
}
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/4955 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Gx30RjAY_kPVr3R8gL7Iy81f8hNh5Km2s" \
Response: 200 OK
{
"data": {
"attributes": {
"category": "downtime",
"description": "E9Bw9WdR",
"inserted_at": "2026-05-07T07:06:12Z",
"name": "Power Outage",
"state": "active",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "4955",
"links": {
"self": "http://www.example.com/v1/friction_types/4955"
},
"relationships": {},
"type": "friction_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/friction_types/4955"
}
}
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/4935 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_3r1GJPtS_U9hnZFej68W0hJlTVav6wUlk" \
Response: 200 OK
{
"data": {
"attributes": {
"category": "downtime",
"description": "pW0KL9sf",
"inserted_at": "2026-05-07T07:06:11Z",
"name": "Power Outage",
"state": "active",
"updated_at": "2026-05-07T07:06:11Z"
},
"id": "4935",
"links": {
"self": "http://www.example.com/v1/friction_types/4935"
},
"relationships": {},
"type": "friction_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/friction_types/4935"
}
}
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_GSpuv3cF_yZoNrViVMgvwpzr1xDTrnYDv" \
Response: 200 OK
{
"data": [
{
"attributes": {
"category": "downtime",
"description": "UBPRveSh",
"inserted_at": "2026-05-07T07:06:11Z",
"name": "Power Outage",
"state": "active",
"updated_at": "2026-05-07T07:06:11Z"
},
"id": "4924",
"links": {
"self": "http://www.example.com/v1/friction_types/4924"
},
"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/4939 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Z5UpQLwN_0kbsHuxeufx9OjMBKYwMZOIj" \
-d @- << EOF
{
"name": "Renamed",
"state": null,
"description": "ZOFE/fsy",
"category": "REWORK"
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"category": "rework",
"description": "ZOFE/fsy",
"inserted_at": "2026-05-07T07:06:11Z",
"name": "Renamed",
"state": "active",
"updated_at": "2026-05-07T07:06:11Z"
},
"id": "4939",
"links": {
"self": "http://www.example.com/v1/friction_types/4939"
},
"relationships": {},
"type": "friction_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/friction_types/4939"
}
}
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_wn4OQauq_ZQoea50OhRTMegRDxlaH12K2" \
-d @- << EOF
{
"name": "New Team",
"state": null,
"parent_id": 76744
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"inserted_at": "2026-05-07T07:06:14Z",
"name": "New Team",
"state": "active",
"updated_at": "2026-05-07T07:06:14Z"
},
"id": "76745",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76745"
},
"relationships": {},
"type": "groups"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76745"
}
}
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/76739?include=users \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_uQYnses7_DJmEd7dCNk4hX7AVv7EePeoF" \
Response: 200 OK
{
"data": {
"attributes": {
"inserted_at": "2026-05-07T07:06:14Z",
"name": "Sales",
"state": "active",
"updated_at": "2026-05-07T07:06:14Z"
},
"id": "76739",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76739"
},
"relationships": {
"users": {
"data": [
{
"id": "83036",
"type": "users"
}
],
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users",
"self": "http://api.COMPANY.brmbl.io/v1/groups/76739/relationships/users"
}
}
},
"type": "groups"
},
"included": [
{
"attributes": {
"account_role": null,
"email": "conner.schultz@russel.org",
"full_name": "Some User",
"inserted_at": "2026-05-07T07:06:14Z",
"preferred_first_name": "Some",
"state": "new",
"team_role": "team_contributor",
"timezone": "Etc/UTC",
"updated_at": "2026-05-07T07:06:14Z"
},
"id": "83036",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/83036"
},
"relationships": {},
"type": "users"
}
],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76739"
}
}
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=76735&page[number]=1&page[size]=2&sort=name&fields[groups]=name,state \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_Xb0cJkxH_o20JUpTgN8jqfrAVRF2OE8vV" \
Response: 200 OK
{
"data": [
{
"attributes": {
"name": "division",
"state": "active"
},
"id": "76736",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76736"
},
"relationships": {},
"type": "groups"
},
{
"attributes": {
"name": "root",
"state": "active"
},
"id": "76735",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76735"
},
"relationships": {},
"type": "groups"
}
],
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups?ancestors_id=76735&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/76753 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_WMUKlIC6_G7g1sXA9wdF9eCFthUxbuFPP" \
-d @- << EOF
{
"name": "Renamed",
"state": null,
"parent_id": null
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"inserted_at": "2026-05-07T07:06:14Z",
"name": "Renamed",
"state": "active",
"updated_at": "2026-05-07T07:06:14Z"
},
"id": "76753",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76753"
},
"relationships": {},
"type": "groups"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/groups/76753"
}
}
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 |
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_t285gBU4_EZy4VjB2NutRgNQiwrpeWy26" \
-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-05-07T07:06:19Z",
"name": "Bereavement",
"state": "active",
"updated_at": "2026-05-07T07:06:19Z"
},
"id": "5207",
"links": {
"self": "http://www.example.com/v1/leave_types/5207"
},
"relationships": {},
"type": "leave_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/leave_types/5207"
}
}
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/5235 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_AP5JAXxi_CvoUK6xk9RAS38SixujbrSqi" \
Response: 200 OK
{
"data": {
"attributes": {
"category": "unplanned_paid",
"description": "I4Ye1cw+",
"inserted_at": "2026-05-07T07:06:20Z",
"name": "Kid Sickness",
"state": "active",
"updated_at": "2026-05-07T07:06:20Z"
},
"id": "5235",
"links": {
"self": "http://www.example.com/v1/leave_types/5235"
},
"relationships": {},
"type": "leave_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/leave_types/5235"
}
}
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/5215 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_HxqMapk2_C3u7mIZWWT6gN03gaa46556S" \
Response: 200 OK
{
"data": {
"attributes": {
"category": "unplanned_paid",
"description": "7AU5jSXf",
"inserted_at": "2026-05-07T07:06:20Z",
"name": "Kid Sickness",
"state": "active",
"updated_at": "2026-05-07T07:06:20Z"
},
"id": "5215",
"links": {
"self": "http://www.example.com/v1/leave_types/5215"
},
"relationships": {},
"type": "leave_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/leave_types/5215"
}
}
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_fCCixsev_tJm9neMrm2XrdFbhKYWHK3wn" \
Response: 200 OK
{
"data": [
{
"attributes": {
"category": "unplanned_paid",
"description": "P5bDev3i",
"inserted_at": "2026-05-07T07:06:19Z",
"name": "Kid Sickness",
"state": "active",
"updated_at": "2026-05-07T07:06:19Z"
},
"id": "5204",
"links": {
"self": "http://www.example.com/v1/leave_types/5204"
},
"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/5219 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_WrmvAuJL_G4Y4OAnBJofhaXxHgGvhCWw7" \
-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-05-07T07:06:20Z",
"name": "Renamed",
"state": "active",
"updated_at": "2026-05-07T07:06:20Z"
},
"id": "5219",
"links": {
"self": "http://www.example.com/v1/leave_types/5219"
},
"relationships": {},
"type": "leave_types"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/leave_types/5219"
}
}
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 |
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_qYCKof04_aDSs5Fnxssq3oaUyKuBMCDs0" \
-d @- << EOF
{
"name": "New Task",
"state": null,
"description": "A freshly created production task.",
"group_id": 76625,
"process_id": null,
"improvement_category": "RPA",
"entry_mode": null,
"has_backlog": false,
"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-05-07T07:06:12Z",
"name": "New Task",
"state": "detached",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "18704",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18704"
},
"relationships": {},
"type": "production_tasks"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18704"
}
}
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/18713 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_epkhn8FR_JTnGDJODjbeSVgJYgTc76u1O" \
Response: 200 OK
{
"data": {
"attributes": {
"description": "pt-B5cZFcI9",
"entry_mode": "AUTO",
"improvement_category": "rpa",
"inserted_at": "2026-05-07T07:06:12Z",
"name": "Customer Outreach",
"state": "detached",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "18713",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18713"
},
"relationships": {},
"type": "production_tasks"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18713"
}
}
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/18710 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_v6KBz3jn_Md2LvSceHtYN1jbgRfaIOQmZ" \
Response: 200 OK
{
"data": {
"attributes": {
"description": "pt-SlvGeskx",
"entry_mode": "AUTO",
"improvement_category": "rpa",
"inserted_at": "2026-05-07T07:06:12Z",
"name": "Customer Outreach",
"state": "active",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "18710",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18710"
},
"relationships": {},
"type": "production_tasks"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18710"
}
}
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_ckJ7uGSJ_rakVvIVuH7A76sFaIaO5tXsL" \
Response: 200 OK
{
"data": [
{
"attributes": {
"description": "pt-ux6II3js",
"entry_mode": "AUTO",
"improvement_category": "lean",
"inserted_at": "2026-05-07T07:06:12Z",
"name": "Lodge Claim",
"state": "active",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "18700",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18700"
},
"relationships": {
"process": {
"data": {
"id": "6110",
"type": "process"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/process/6110",
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18700/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/18720 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_IRNyZTL9_cTXV9ChYhBAywYQ65KGJZMr6" \
-d @- << EOF
{
"name": "Renamed",
"state": null,
"description": "pt-gIdsJuUL",
"group_id": 76647,
"improvement_category": "LEAN",
"process_id": null,
"entry_mode": null,
"has_backlog": false,
"has_service_level": false,
"ideal_task_time_method": null,
"proficiency_category": null,
"is_key_task": null
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"description": "pt-gIdsJuUL",
"entry_mode": "AUTO",
"improvement_category": "lean",
"inserted_at": "2026-05-07T07:06:12Z",
"name": "Renamed",
"state": "detached",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "18720",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18720"
},
"relationships": {},
"type": "production_tasks"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/production_tasks/18720"
}
}
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_QNbenx2u_l93bZSw6mwBzpCWtHV5XumOs" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "82836",
"note": null,
"production_task_id": null,
"score": 0.95
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:10Z",
"note": null,
"score": 0.95,
"updated_at": "2026-05-07T07:06:10Z"
},
"id": "6880",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6880"
},
"relationships": {
"user": {
"data": {
"id": "82836",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82836",
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6880/relationships/user"
}
}
},
"type": "quality_scores"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6880"
}
}
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_z9pf844H_P4LcXpNk0PcL0ESJQBmU44B1" \
-d @- << EOF
{
"date": "2022-02-23",
"user_id": "82854",
"note": null,
"production_task_id": 18697,
"score": 0.95
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:11Z",
"note": null,
"score": 0.95,
"updated_at": "2026-05-07T07:06:11Z"
},
"id": "6889",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6889"
},
"relationships": {
"production_task": {
"data": {
"id": "18697",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18697",
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6889/relationships/production_task"
}
},
"user": {
"data": {
"id": "82854",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82854",
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6889/relationships/user"
}
}
},
"type": "quality_scores"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6889"
}
}
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/6890 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_vs7cl7jC_qKfhm2aXL7oa1Y75aYrUZ9Ll" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2026-05-07",
"inserted_at": "2026-05-07T07:06:11Z",
"note": null,
"score": 0.5,
"updated_at": "2026-05-07T07:06:11Z"
},
"id": "6890",
"links": {
"self": "http://company.brmbl.io/v1/quality_scores/6890"
},
"relationships": {
"production_task": {
"data": {
"id": "18698",
"type": "production_tasks"
},
"links": {
"related": "http://company.brmbl.io/v1/production_tasks/18698",
"self": "http://company.brmbl.io/v1/quality_scores/6890/relationships/production_task"
}
},
"user": {
"data": {
"id": "82856",
"type": "users"
},
"links": {
"related": "http://company.brmbl.io/v1/users/82856",
"self": "http://company.brmbl.io/v1/quality_scores/6890/relationships/user"
}
}
},
"type": "quality_scores"
},
"included": [],
"links": {
"self": "http://company.brmbl.io/v1/quality_scores/6890"
}
}
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/6881 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_nU4y1BTR_WtUI9M4BZz7xDAVke4Ii3MEr" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2023-01-01",
"inserted_at": "2026-05-07T07:06:10Z",
"note": null,
"score": 0.5,
"updated_at": "2026-05-07T07:06:10Z"
},
"id": "6881",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6881"
},
"relationships": {
"user": {
"data": {
"id": "82838",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82838",
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6881/relationships/user"
}
}
},
"type": "quality_scores"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6881"
}
}
Response: 404 Not Found
{
"errors": [
{
"code": "40401",
"detail": "Could not find quality score with id: 6900",
"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_bCOqFVLf_twUU8SOwofQqohBrvgqI15Rw" \
Response: 200 OK
{
"data": [
{
"attributes": {
"date": "2023-01-02",
"score": 0.25
},
"id": "6877",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6877"
},
"relationships": {
"user": {
"data": {
"id": "82833",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82833",
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6877/relationships/user"
}
}
},
"type": "quality_scores"
},
{
"attributes": {
"date": "2023-01-02",
"score": 0.5
},
"id": "6878",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6878"
},
"relationships": {
"user": {
"data": {
"id": "82834",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/82834",
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6878/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/6900 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_NK1fCNsT_gIalGdgUUETs6EohjG0R9ChZ" \
-d @- << EOF
{
"date": "2023-05-01",
"user_id": "82868",
"note": "updated note",
"production_task_id": null,
"score": 0.9
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2023-05-01",
"inserted_at": "2026-05-07T07:06:11Z",
"note": "updated note",
"score": 0.9,
"updated_at": "2026-05-07T07:06:11Z"
},
"id": "6900",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6900"
},
"relationships": {},
"type": "quality_scores"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/quality_scores/6900"
}
}
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_ZEpXh8zY_LpNCuSsvxIBtGmhscK059eaH" \
-d @- << EOF
{
"date": "2022-02-23",
"score": 0.55,
"note": null,
"production_task_id": 18736
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:13Z",
"note": null,
"score": 0.55,
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "3675",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3675"
},
"relationships": {
"production_task": {
"data": {
"id": "18736",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18736",
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3675/relationships/production_task"
}
}
},
"type": "service_levels"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3675"
}
}
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_6uUUy58Q_fa59vloFFxELATBQg4LCR8tx" \
-d @- << EOF
{
"date": "2022-02-23",
"score": 0.55,
"note": null,
"production_task_id": 18739
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:13Z",
"note": null,
"score": 0.55,
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "3679",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3679"
},
"relationships": {
"production_task": {
"data": {
"id": "18739",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18739",
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3679/relationships/production_task"
}
}
},
"type": "service_levels"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3679"
}
}
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/3677 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_yMmZiMuk_DAX5qXrgHuT7Xg5uB54vs0Hp" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:13Z",
"note": null,
"score": 0.1,
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "3677",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3677"
},
"relationships": {
"production_task": {
"data": {
"id": "18738",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18738",
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3677/relationships/production_task"
}
}
},
"type": "service_levels"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3677"
}
}
Response: 404 Not Found
{
"errors": [
{
"code": "40401",
"detail": "Could not find service level with id: 3694",
"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/3676 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_B7qeCqjg_z44mK3bXbgusJ0sBXlydHRos" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:13Z",
"note": null,
"score": 0.1,
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "3676",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3676"
},
"relationships": {
"production_task": {
"data": {
"id": "18737",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18737",
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3676/relationships/production_task"
}
}
},
"type": "service_levels"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3676"
}
}
Response: 404 Not Found
{
"errors": [
{
"code": "40401",
"detail": "Could not find service level with id: 3694",
"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_yutcgCP3_urzuz6yx99ekMC6XM7PBN584" \
Response: 200 OK
{
"data": [
{
"attributes": {
"score": 0.9
},
"id": "3673",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3673"
},
"relationships": {
"production_task": {
"data": {
"id": "18735",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18735",
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3673/relationships/production_task"
}
}
},
"type": "service_levels"
},
{
"attributes": {
"score": 0.5
},
"id": "3672",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3672"
},
"relationships": {
"production_task": {
"data": {
"id": "18734",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18734",
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3672/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 | ||
production_task_id |
Filter results by task id | query | array | false | 12 | |
page |
query | Page | false |
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/3683 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_piU34Xen_eR2uylJi5r3IHCcSBalJCfSD" \
-d @- << EOF
{
"date": null,
"note": "updated",
"score": 0.75,
"production_task_id": null
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2020-01-01",
"inserted_at": "2026-05-07T07:06:14Z",
"note": "updated",
"score": 0.75,
"updated_at": "2026-05-07T07:06:14Z"
},
"id": "3683",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3683"
},
"relationships": {
"production_task": {
"data": {
"id": "18742",
"type": "production_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/production_tasks/18742",
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3683/relationships/production_task"
}
}
},
"type": "service_levels"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/service_levels/3683"
}
}
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_otR47JCH_VDDgZm2u19NMSCDcsAXDbkkg" \
-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-05-07T07:06:16Z",
"name": "Project Kickoff",
"state": "active",
"updated_at": "2026-05-07T07:06:16Z"
},
"id": "6283",
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6283"
},
"relationships": {},
"type": "supporting_tasks"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6283"
}
}
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/6311 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ymsLVzUz_8gXYqbzjGGCUbZqS7c0zEZmC" \
Response: 200 OK
{
"data": {
"attributes": {
"category": "train",
"description": "5AdRE2qE",
"inserted_at": "2026-05-07T07:06:17Z",
"name": "Compliance Training",
"state": "active",
"updated_at": "2026-05-07T07:06:17Z"
},
"id": "6311",
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6311"
},
"relationships": {},
"type": "supporting_tasks"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6311"
}
}
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/6291 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_pnPZqOzA_OXp8fs7NeMAeYNxc3CV5wqcO" \
Response: 200 OK
{
"data": {
"attributes": {
"category": "train",
"description": "2HH0kjx+",
"inserted_at": "2026-05-07T07:06:16Z",
"name": "Compliance Training",
"state": "active",
"updated_at": "2026-05-07T07:06:16Z"
},
"id": "6291",
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6291"
},
"relationships": {},
"type": "supporting_tasks"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6291"
}
}
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_jNlbFEUX_pLjIhFT2NjTHI6eqKEr26tHE" \
Response: 200 OK
{
"data": [
{
"attributes": {
"category": "train",
"description": "bHI1hF8Q",
"inserted_at": "2026-05-07T07:06:16Z",
"name": "Compliance Training",
"state": "active",
"updated_at": "2026-05-07T07:06:16Z"
},
"id": "6280",
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6280"
},
"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/6295 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_HfAc7T1q_iA6vD8VwQEnEn04zzAfjOvXs" \
-d @- << EOF
{
"name": "Renamed",
"state": null,
"description": "YaOi7exj",
"category": "LEAD"
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"category": "lead",
"description": "YaOi7exj",
"inserted_at": "2026-05-07T07:06:16Z",
"name": "Renamed",
"state": "active",
"updated_at": "2026-05-07T07:06:16Z"
},
"id": "6295",
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6295"
},
"relationships": {},
"type": "supporting_tasks"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/supporting_tasks/6295"
}
}
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
Retrieve a user plan entry.
Request: Returns a user plan entry
curl -X GET https://api.COMPANY.brmbl.io/v1/user_plan_entries/9620 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_LjQ4fxSA_9ZJUhxc2lNUUW6RCg2rnhhzj" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2026-05-11",
"inserted_at": "2026-05-07T07:06:18Z",
"minutes": "450",
"type": "base_time",
"updated_at": "2026-05-07T07:06:18Z"
},
"id": "9620",
"links": {
"self": "http://company.brmbl.io/v1/user_plan_entries/9620"
},
"relationships": {},
"type": "user_plan_entries"
},
"included": [],
"links": {
"self": "http://company.brmbl.io/v1/user_plan_entries/9620"
}
}
Request: Returns a user plan entry
curl -X GET https://api.COMPANY.brmbl.io/v1/user_plan_entries/9632?include=user_plan \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_QLFqnYZF_vU7UHTg7q1c4bJqnMjssB28m" \
Response: 200 OK
{
"data": {
"attributes": {
"date": "2026-05-11",
"inserted_at": "2026-05-07T07:06:19Z",
"minutes": "450",
"type": "base_time",
"updated_at": "2026-05-07T07:06:19Z"
},
"id": "9632",
"links": {
"self": "http://company.brmbl.io/v1/user_plan_entries/9632"
},
"relationships": {
"user_plan": {
"data": {
"id": "3685",
"type": "user_plans"
},
"links": {
"related": "http://company.brmbl.io/v1/user_plans/3685",
"self": "http://company.brmbl.io/v1/user_plan_entries/9632/relationships/user_plan"
}
}
},
"type": "user_plan_entries"
},
"included": [
{
"attributes": {
"contribution": 0.33,
"from": "2026-05-11",
"inserted_at": "2026-05-07T07:06:19Z",
"until": "2026-05-17",
"updated_at": "2026-05-07T07:06:19Z",
"week_number": 20,
"year": 2026
},
"id": "3685",
"links": {
"self": "http://company.brmbl.io/v1/user_plans/3685"
},
"relationships": {},
"type": "user_plans"
}
],
"links": {
"self": "http://company.brmbl.io/v1/user_plan_entries/9632"
}
}
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/3676/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_HqB5acMZ_atDZ8ZolrTD8dXb3M1bdq7Sp" \
-d @- << EOF
{
"type": "supporting_task",
"date": "2022-02-23",
"minutes": 450,
"user_id": "83215",
"supporting_task_id": "6314"
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:18Z",
"minutes": "450",
"type": "supporting_task",
"updated_at": "2026-05-07T07:06:18Z"
},
"id": "9626",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9626"
},
"relationships": {
"group": {
"data": {
"id": "76937",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76937",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9626/relationships/group"
}
},
"supporting_task": {
"data": {
"id": "6314",
"type": "supporting_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/6314",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9626/relationships/supporting_task"
}
},
"user": {
"data": {
"id": "83215",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83215",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9626/relationships/user"
}
},
"user_plan": {
"data": {
"id": "3676",
"type": "user_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/user_plans/3676",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9626/relationships/user_plan"
}
}
},
"type": "user_plan_entries"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9626"
}
}
Request: Update a user plan supporting task entry
curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/3672/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_jEQ1gjNV_8GPogFTSJDglvC3ZU2a3M8sV" \
-d @- << EOF
{
"type": "supporting_task",
"date": "2022-02-23",
"minutes": 450,
"user_id": "83207",
"supporting_task_id": "6312"
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:18Z",
"minutes": "900",
"type": "supporting_task",
"updated_at": "2026-05-07T07:06:19Z"
},
"id": "9618",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9618"
},
"relationships": {
"group": {
"data": {
"id": "76929",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76929",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9618/relationships/group"
}
},
"supporting_task": {
"data": {
"id": "6312",
"type": "supporting_tasks"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/6312",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9618/relationships/supporting_task"
}
},
"user": {
"data": {
"id": "83207",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83207",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9618/relationships/user"
}
},
"user_plan": {
"data": {
"id": "3672",
"type": "user_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/user_plans/3672",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9618/relationships/user_plan"
}
}
},
"type": "user_plan_entries"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9618"
}
}
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/3683/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_jV2BJksY_xWk25Dlj777fn4sjIqK6KjGT" \
-d @- << EOF
{
"type": "leave_type",
"date": "2025-05-23",
"minutes": 450,
"user_id": "83225",
"note": null,
"leave_type_id": "5201"
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2025-05-23",
"inserted_at": "2026-05-07T07:06:19Z",
"minutes": "450",
"type": "leave_type",
"updated_at": "2026-05-07T07:06:19Z"
},
"id": "9631",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9631"
},
"relationships": {
"group": {
"data": {
"id": "76947",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76947",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9631/relationships/group"
}
},
"leave_plan": {
"data": {
"id": "900",
"type": "leave_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/leave_plans/900",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9631/relationships/leave_plan"
}
},
"user": {
"data": {
"id": "83225",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83225",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9631/relationships/user"
}
},
"user_plan": {
"data": {
"id": "3684",
"type": "user_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/user_plans/3684",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9631/relationships/user_plan"
}
}
},
"type": "user_plan_entries"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9631"
}
}
Request: Update a user plan leave entry
curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/3679/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_6O2PNeG6_3iB6AgNsoMdFWXEO2q3g0Ci8" \
-d @- << EOF
{
"type": "leave_type",
"date": "2025-05-23",
"minutes": 450,
"user_id": "83219",
"note": null,
"leave_type_id": "5200"
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2025-05-23",
"inserted_at": "2026-05-07T07:06:18Z",
"minutes": "450",
"type": "leave_type",
"updated_at": "2026-05-07T07:06:18Z"
},
"id": "9628",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9628"
},
"relationships": {
"group": {
"data": {
"id": "76941",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76941",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9628/relationships/group"
}
},
"leave_plan": {
"data": {
"id": "899",
"type": "leave_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/leave_plans/899",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9628/relationships/leave_plan"
}
},
"user": {
"data": {
"id": "83219",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83219",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9628/relationships/user"
}
},
"user_plan": {
"data": {
"id": "3680",
"type": "user_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/user_plans/3680",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9628/relationships/user_plan"
}
}
},
"type": "user_plan_entries"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9628"
}
}
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/3682/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_zO5EEEk0_OoSeHBEPGM9ulYCS15W0jQGo" \
-d @- << EOF
{
"type": "base_time",
"date": "2022-02-23",
"minutes": 450,
"user_id": "83223"
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:19Z",
"minutes": "450",
"type": "base_time",
"updated_at": "2026-05-07T07:06:19Z"
},
"id": "9630",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9630"
},
"relationships": {
"group": {
"data": {
"id": "76945",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76945",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9630/relationships/group"
}
},
"user": {
"data": {
"id": "83223",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83223",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9630/relationships/user"
}
},
"user_plan": {
"data": {
"id": "3682",
"type": "user_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/user_plans/3682",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9630/relationships/user_plan"
}
}
},
"type": "user_plan_entries"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9630"
}
}
Request: Update a user plan supporting task entry
curl -X PUT https://api.COMPANY.brmbl.io/v1/user_plans/3693/user_plan_entry \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_r801k4Pm_5rw5MQ60PMgJHcozrzkUxHVT" \
-d @- << EOF
{
"type": "base_time",
"date": "2022-02-23",
"minutes": 450,
"user_id": "83243"
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"date": "2022-02-23",
"inserted_at": "2026-05-07T07:06:19Z",
"minutes": "900",
"type": "base_time",
"updated_at": "2026-05-07T07:06:20Z"
},
"id": "9649",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9649"
},
"relationships": {
"group": {
"data": {
"id": "76965",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76965",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9649/relationships/group"
}
},
"user": {
"data": {
"id": "83243",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83243",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9649/relationships/user"
}
},
"user_plan": {
"data": {
"id": "3693",
"type": "user_plans"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/user_plans/3693",
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9649/relationships/user_plan"
}
}
},
"type": "user_plan_entries"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plan_entries/9649"
}
}
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_HYeWI3T6_b1rWXes64u7evG7ceRxXql7g" \
-d @- << EOF
{
"year": 2024,
"user_id": "83083",
"contribution": null,
"week_number": 1
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"contribution": 0.5,
"from": "2024-01-01",
"inserted_at": "2026-05-07T07:06:15Z",
"until": "2024-01-07",
"updated_at": "2026-05-07T07:06:15Z",
"week_number": 1,
"year": 2024
},
"id": "3658",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3658"
},
"relationships": {
"group": {
"data": {
"id": "76805",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76805",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3658/relationships/group"
}
},
"user": {
"data": {
"id": "83083",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83083",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3658/relationships/user"
}
}
},
"type": "user_plans"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3658"
}
}
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_acFHcYTF_IKvumxc1ZBqGRzgp7H3V3UtT" \
-d @- << EOF
{
"year": 2024,
"user_id": "83091",
"contribution": 0.6,
"week_number": 1
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"contribution": 0.6,
"from": "2024-01-01",
"inserted_at": "2026-05-07T07:06:16Z",
"until": "2024-01-07",
"updated_at": "2026-05-07T07:06:16Z",
"week_number": 1,
"year": 2024
},
"id": "3661",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3661"
},
"relationships": {
"group": {
"data": {
"id": "76813",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76813",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3661/relationships/group"
}
},
"user": {
"data": {
"id": "83091",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83091",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3661/relationships/user"
}
}
},
"type": "user_plans"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3661"
}
}
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_cNxf0SCD_mN3a50hvyOCnm45PyjGvJp2O" \
-d @- << EOF
{
"year": 2024,
"user_id": "83085",
"contribution": null,
"week_number": 1
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"contribution": 0.5,
"from": "2024-01-01",
"inserted_at": "2026-05-07T07:06:15Z",
"until": "2024-01-07",
"updated_at": "2026-05-07T07:06:15Z",
"week_number": 1,
"year": 2024
},
"id": "3659",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3659"
},
"relationships": {
"group": {
"data": {
"id": "76807",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76807",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3659/relationships/group"
}
},
"user": {
"data": {
"id": "83085",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83085",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3659/relationships/user"
}
}
},
"type": "user_plans"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3659"
}
}
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_eOKErAQI_2rzh79nEjULbWjiRTwJqe8Fk" \
-d @- << EOF
{
"year": 2024,
"user_id": "83103",
"contribution": null,
"week_number": 1
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"contribution": 0.8,
"from": "2024-01-01",
"inserted_at": "2026-05-07T07:06:16Z",
"until": "2024-01-07",
"updated_at": "2026-05-07T07:06:16Z",
"week_number": 1,
"year": 2024
},
"id": "3668",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3668"
},
"relationships": {
"group": {
"data": {
"id": "76825",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76825",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3668/relationships/group"
}
},
"user": {
"data": {
"id": "83103",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83103",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3668/relationships/user"
}
}
},
"type": "user_plans"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3668"
}
}
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_bAO2hlHo_H0FfQIFfbfP4ZPPhhffLNTlq" \
-d @- << EOF
{
"year": 2024,
"user_id": "83109",
"contribution": null,
"week_number": 1
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"contribution": 0.5,
"from": "2024-01-01",
"inserted_at": "2026-05-07T07:06:16Z",
"until": "2024-01-07",
"updated_at": "2026-05-07T07:06:16Z",
"week_number": 1,
"year": 2024
},
"id": "3671",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3671"
},
"relationships": {
"group": {
"data": {
"id": "76831",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76831",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3671/relationships/group"
}
},
"user": {
"data": {
"id": "83109",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83109",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3671/relationships/user"
}
}
},
"type": "user_plans"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3671"
}
}
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_amAv7N1c_4LP3TH5JkCmKGx7CyjBxtWsb" \
-d @- << EOF
{
"year": 2024,
"user_id": "83087",
"contribution": 0.6,
"week_number": 1
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"contribution": 0.6,
"from": "2024-01-01",
"inserted_at": "2026-05-07T07:06:16Z",
"until": "2024-01-07",
"updated_at": "2026-05-07T07:06:16Z",
"week_number": 1,
"year": 2024
},
"id": "3660",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3660"
},
"relationships": {
"group": {
"data": {
"id": "76809",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76809",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3660/relationships/group"
}
},
"user": {
"data": {
"id": "83087",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83087",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3660/relationships/user"
}
}
},
"type": "user_plans"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3660"
}
}
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_bXDSyy9Z_Hlduy5p4qck3v6cm2SjVgMPn" \
-d @- << EOF
{
"year": 2024,
"user_id": "83097",
"contribution": null,
"week_number": 1
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"contribution": 0.5,
"from": "2024-01-01",
"inserted_at": "2026-05-07T07:06:16Z",
"until": "2024-01-07",
"updated_at": "2026-05-07T07:06:16Z",
"week_number": 1,
"year": 2024
},
"id": "3664",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3664"
},
"relationships": {
"group": {
"data": {
"id": "76819",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76819",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3664/relationships/group"
}
},
"user": {
"data": {
"id": "83097",
"type": "users"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/users/83097",
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3664/relationships/user"
}
}
},
"type": "user_plans"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/user_plans/3664"
}
}
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_7D6Zo1k8_rJpdRA4PpgMZQbOqH29qLgrN" \
-d @- << EOF
{
"profile": {
"timezone": "Etc/UTC",
"full_name": "New Hire",
"preferred_first_name": "New"
},
"team_role": "TEAM_CONTRIBUTOR",
"account_role": null,
"group_id": 76662,
"email": "newhire@example.com",
"employment": null
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"account_role": null,
"email": "newhire@example.com",
"full_name": "New Hire",
"inserted_at": "2026-05-07T07:06:13Z",
"preferred_first_name": "New",
"state": "new",
"team_role": "team_contributor",
"timezone": "Etc/UTC",
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "82946",
"links": {
"self": "http://www.example.com/v1/users/82946"
},
"relationships": {
"group": {
"data": {
"id": "76662",
"type": "groups"
},
"links": {
"related": "http://www.example.com/v1/groups/76662",
"self": "http://www.example.com/v1/users/82946/relationships/group"
}
}
},
"type": "users"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/users/82946"
}
}
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/82948 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_BB82VKgZ_E5kGRLycKOt0C208qxeP83wi" \
Response: 200 OK
{
"data": {
"attributes": {
"account_role": null,
"email": "alec1913@willms.name",
"full_name": "Jane Doe",
"inserted_at": "2026-05-07T07:06:13Z",
"preferred_first_name": "Something",
"state": "invited",
"team_role": "team_owner",
"timezone": "Africa/Abidjan",
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "82948",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/82948"
},
"relationships": {
"group": {
"data": {
"id": "76664",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76664",
"self": "http://api.COMPANY.brmbl.io/v1/users/82948/relationships/group"
}
}
},
"type": "users"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/82948"
}
}
Response: 404 Not Found
{
"errors": [
{
"code": "40401",
"detail": "Could not find user with id: 83080",
"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_URzHBubZ_A4udYN5ypPBR5uvD9aHoee5T" \
Response: 200 OK
{
"data": [
{
"attributes": {
"account_role": "account_owner",
"email": "bob@foo.com",
"full_name": "Bob Owner",
"inserted_at": "2026-05-07T07:06:13Z",
"preferred_first_name": "Bob",
"state": "new",
"team_role": null,
"timezone": "Etc/UTC",
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "82949",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/82949"
},
"relationships": {
"group": {
"data": {
"id": "76665",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76665",
"self": "http://api.COMPANY.brmbl.io/v1/users/82949/relationships/group"
}
}
},
"type": "users"
},
{
"attributes": {
"account_role": null,
"email": "frank@foo.com",
"full_name": "Frank Furter",
"inserted_at": "2026-05-07T07:06:13Z",
"preferred_first_name": "Frank",
"state": "invited",
"team_role": "team_owner",
"timezone": "America/Los_Angeles",
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "82950",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/82950"
},
"relationships": {
"group": {
"data": {
"id": "76666",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76666",
"self": "http://api.COMPANY.brmbl.io/v1/users/82950/relationships/group"
}
}
},
"type": "users"
},
{
"attributes": {
"account_role": null,
"email": "aide@foo.com",
"full_name": "Aide Alton",
"inserted_at": "2026-05-07T07:06:13Z",
"preferred_first_name": "Aide",
"state": "invited",
"team_role": "team_contributor",
"timezone": "Etc/UTC",
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "82951",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/82951"
},
"relationships": {
"group": {
"data": {
"id": "76666",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76666",
"self": "http://api.COMPANY.brmbl.io/v1/users/82951/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_Rql6OuB0_ABn33K2HUx0OQQIXF1L5aCgF" \
Response: 200 OK
{
"data": [
{
"attributes": {
"account_role": null,
"email": "frank@foo.com",
"full_name": "Frank Furter",
"inserted_at": "2026-05-07T07:06:12Z",
"preferred_first_name": "Frank",
"state": "invited",
"team_role": "team_owner",
"timezone": "America/Los_Angeles",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "82940",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/82940"
},
"relationships": {
"group": {
"data": {
"id": "76659",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76659",
"self": "http://api.COMPANY.brmbl.io/v1/users/82940/relationships/group"
}
}
},
"type": "users"
},
{
"attributes": {
"account_role": "account_owner",
"email": "bob@foo.com",
"full_name": "Bob Owner",
"inserted_at": "2026-05-07T07:06:12Z",
"preferred_first_name": "Bob",
"state": "new",
"team_role": null,
"timezone": "Etc/UTC",
"updated_at": "2026-05-07T07:06:12Z"
},
"id": "82939",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/users/82939"
},
"relationships": {
"group": {
"data": {
"id": "76658",
"type": "groups"
},
"links": {
"related": "http://api.COMPANY.brmbl.io/v1/groups/76658",
"self": "http://api.COMPANY.brmbl.io/v1/users/82939/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/82958 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_t7Kmplud_jG1MNhLG1NUPLEEB8uZhYVOq" \
-d @- << EOF
{
"profile": {
"full_name": "Renamed"
},
"team_role": "TEAM_OWNER",
"account_role": null,
"employment": {
"type": "PART",
"hours": 20.0
}
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"account_role": null,
"email": "target@example.com",
"full_name": "Renamed",
"inserted_at": "2026-05-07T07:06:13Z",
"preferred_first_name": "Some",
"state": "new",
"team_role": "team_owner",
"timezone": "Etc/UTC",
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "82958",
"links": {
"self": "http://www.example.com/v1/users/82958"
},
"relationships": {
"group": {
"data": {
"id": "76670",
"type": "groups"
},
"links": {
"related": "http://www.example.com/v1/groups/76670",
"self": "http://www.example.com/v1/users/82958/relationships/group"
}
}
},
"type": "users"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/users/82958"
}
}
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/82943/group \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_biTJIWjM_E6TOO65Lie1zFo8gsBKi6yPh" \
-d @- << EOF
{
"group_id": 76661
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"account_role": null,
"email": "target@example.com",
"full_name": "Some User",
"inserted_at": "2026-05-07T07:06:12Z",
"preferred_first_name": "Some",
"state": "new",
"team_role": "team_contributor",
"timezone": "Etc/UTC",
"updated_at": "2026-05-07T07:06:13Z"
},
"id": "82943",
"links": {
"self": "http://www.example.com/v1/users/82943"
},
"relationships": {},
"type": "users"
},
"included": [],
"links": {
"self": "http://www.example.com/v1/users/82943"
}
}
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_bBzy3a6h_VMSsiZWTxPRnGh46kzJwY8eN" \
-d @- << EOF
{
"status": "in_progress",
"type": "claim",
"started_at": null,
"metadata": {
"source": "test"
},
"cancelled_at": null,
"completed_at": null,
"external_id": "create-001",
"assignee_id": null,
"actionable_at": null,
"created_at": "2026-01-15T10:00:00Z",
"snapshot_at": null
}
EOF
Response: 201 Created
{
"data": {
"attributes": {
"actionable_at": null,
"cancelled_at": null,
"completed_at": null,
"created_at": "2026-01-15T10:00:00.000000Z",
"external_id": "create-001",
"inserted_at": "2026-05-07T07:06:17Z",
"metadata": {
"source": "test"
},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-05-07T07:06:17Z"
},
"id": "2430",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2430"
},
"relationships": {},
"type": "work_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2430"
}
}
Create a new work item. Returns 422 if a work item with the given external_id already exists or if validation fails.
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/del-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_8qJFaXEl_cFvZ2T4yfMDXrnqJLzKrbLRn" \
Response: 200 OK
{
"data": {
"attributes": {
"actionable_at": null,
"cancelled_at": null,
"completed_at": null,
"created_at": null,
"external_id": "del-001",
"inserted_at": "2026-05-07T07:06:17Z",
"metadata": {},
"snapshot_at": null,
"started_at": null,
"status": "backlog",
"type": "claim",
"updated_at": "2026-05-07T07:06:17Z"
},
"id": "2431",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2431"
},
"relationships": {},
"type": "work_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2431"
}
}
Delete a work item and schedule ETL cleanup. Returns 404 if not found.
Request
DELETE /v1/work_items/{external_id}
Required scope: work_items:write
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
external_id |
The external system identifier for the work item. | path | string | true | guidewire: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/show-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_T0NN5VKY_XnnsiCA8qYXqXxLUDBd1Z4DX" \
Response: 200 OK
{
"data": {
"attributes": {
"actionable_at": null,
"cancelled_at": null,
"completed_at": null,
"created_at": null,
"external_id": "show-001",
"inserted_at": "2026-05-07T07:06:17Z",
"metadata": {},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-05-07T07:06:17Z"
},
"id": "2428",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2428"
},
"relationships": {},
"type": "work_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2428"
}
}
Retrieve a single work item by its external_id.
Request
GET /v1/work_items/{external_id}
Required scope: work_items:read
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
external_id |
The external system identifier for the work item. | path | string | true | guidewire: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_k0itb8ba_Tm4QQk5OaCjILhToHY7238A0" \
Response: 200 OK
{
"data": [
{
"attributes": {
"actionable_at": null,
"cancelled_at": null,
"completed_at": null,
"created_at": null,
"external_id": "list-003",
"inserted_at": "2026-05-07T07:06:17Z",
"metadata": {},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-05-07T07:06:17Z"
},
"id": "2437",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2437"
},
"relationships": {},
"type": "work_items"
},
{
"attributes": {
"actionable_at": null,
"cancelled_at": null,
"completed_at": null,
"created_at": null,
"external_id": "list-002",
"inserted_at": "2026-05-07T07:06:17Z",
"metadata": {},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-05-07T07:06:17Z"
},
"id": "2436",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2436"
},
"relationships": {},
"type": "work_items"
}
],
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items?page%5Bsize%5D=2"
},
"meta": {
"pagination": {
"cursors": {
"after": "g3QAAAACdwJpZGIAAAmEdwtpbnNlcnRlZF9hdHQAAAANdwttaWNyb3NlY29uZGgCYQBhAHcGc2Vjb25kYRF3CGNhbGVuZGFydxNFbGl4aXIuQ2FsZW5kYXIuSVNPdwVtb250aGEFdwpfX3N0cnVjdF9fdw9FbGl4aXIuRGF0ZVRpbWV3A2RheWEHdwR5ZWFyYgAAB-p3Bm1pbnV0ZWEGdwRob3VyYQd3CXRpbWVfem9uZW0AAAAHRXRjL1VUQ3cJem9uZV9hYmJybQAAAANVVEN3CnV0Y19vZmZzZXRhAHcKc3RkX29mZnNldGEA",
"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: backlog, planned, in_progress, completed, cancelled | query | array | false | in_progress,completed | |
type |
Filter by type (comma-separated for OR). | query | array | false | task,bug | |
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/patch-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_R4qVC3G4_DjzOBO3EiGfDojh5xYMnREyC" \
-d @- << EOF
{
"status": "in_progress",
"type": null,
"started_at": null,
"metadata": null,
"cancelled_at": null,
"completed_at": null,
"assignee_id": null,
"actionable_at": null,
"created_at": null,
"snapshot_at": null
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"actionable_at": null,
"cancelled_at": null,
"completed_at": null,
"created_at": null,
"external_id": "patch-001",
"inserted_at": "2026-05-07T07:06:18Z",
"metadata": {},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-05-07T07:06:18Z"
},
"id": "2442",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2442"
},
"relationships": {},
"type": "work_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2442"
}
}
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/{external_id}
Required scope: work_items:write
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
external_id |
The external system identifier for the work item. | path | string | true | guidewire: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/ext-001 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_VbCoN615_71970AC8JxvtNCAtx00ppBUG" \
-d @- << EOF
{
"status": "in_progress",
"type": "claim",
"started_at": null,
"metadata": {
"source_object_id": "CLM-123",
"source_system": "guidewire"
},
"cancelled_at": null,
"completed_at": null,
"assignee_id": null,
"actionable_at": "2026-01-15T10:00:00Z",
"created_at": "2026-01-15T10:00:00Z",
"snapshot_at": null
}
EOF
Response: 200 OK
{
"data": {
"attributes": {
"actionable_at": "2026-01-15T10:00:00.000000Z",
"cancelled_at": null,
"completed_at": null,
"created_at": "2026-01-15T10:00:00.000000Z",
"external_id": "ext-001",
"inserted_at": "2026-05-07T07:06:17Z",
"metadata": {
"source_object_id": "CLM-123",
"source_system": "guidewire"
},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-05-07T07:06:17Z"
},
"id": "2434",
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2434"
},
"relationships": {},
"type": "work_items"
},
"included": [],
"links": {
"self": "http://api.COMPANY.brmbl.io/v1/work_items/2434"
}
}
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).
Request
PUT /v1/work_items/{external_id}
Required scope: work_items:write
Parameters
| Parameter | Description | In | Type | Required | Default | Example |
|---|---|---|---|---|---|---|
external_id |
The external system identifier for the work item. | path | string | true | guidewire: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 |
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 |
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 |
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,
"completed_at": null,
"created_at": "2026-01-15T10:00:00.000000Z",
"external_id": "guidewire:CLM-123",
"inserted_at": "2026-01-15T10:00:00.000000Z",
"metadata": {
"source_system": "guidewire"
},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-01-15T10:00:00.000000Z"
},
"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.cancelled_at |
string | date-time | 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.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 |
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 |
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
Input params for creating a Work Item. Required: external_id, type, status.
{
"actionable_at": "2026-01-15T10:00:00Z",
"created_at": "2026-01-15T10:00:00Z",
"external_id": "guidewire:CLM-123",
"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 | |
completed_at |
string | date-time | false | |
created_at |
string | date-time | false | |
external_id |
External system identifier | string | true | |
snapshot_at |
string | date-time | false | |
started_at |
string | date-time | false | |
status |
Work item status | string | true | |
type |
Work item type | string | true |
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 |
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 |
WorkItemParams
PUT = idempotent merge upsert. Incoming keys overwrite. Null clears. Absent keys preserved. Metadata shallow-merged.
{
"actionable_at": "2026-01-15T10:00:00Z",
"created_at": "2026-01-15T10:00:00Z",
"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 | |
completed_at |
string | date-time | false | |
created_at |
string | date-time | 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 |
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 |
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 or friction type parameters
{
"oneOf": [
{
"$ref": "#/components/schemas/ProductionTaskCheckinItemParams"
},
{
"$ref": "#/components/schemas/SupportingTaskCheckinItemParams"
},
{
"$ref": "#/components/schemas/FrictionTypeCheckinItemParams"
},
{
"$ref": "#/components/schemas/LeaveTypeCheckinItemParams"
}
]
}
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 |
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 |
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 |
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 |
UpdateWorkItemParams
Input params for partially updating a Work Item (PATCH). 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 | |
snapshot_at |
string | date-time | false | |
started_at |
string | date-time | false | |
status |
Work item status | string | false | |
type |
Work item type | string | 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"
}
]
}
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 |
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,
"completed_at": null,
"created_at": "2026-01-15T10:00:00.000000Z",
"external_id": "guidewire:CLM-123",
"inserted_at": "2026-01-15T10:00:00.000000Z",
"metadata": {
"source_system": "guidewire"
},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-01-15T10:00:00.000000Z"
},
"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,
"completed_at": null,
"created_at": "2026-01-15T10:00:00.000000Z",
"external_id": "guidewire:CLM-123",
"inserted_at": "2026-01-15T10:00:00.000000Z",
"metadata": {
"source_system": "guidewire"
},
"snapshot_at": null,
"started_at": null,
"status": "in_progress",
"type": "claim",
"updated_at": "2026-01-15T10:00:00.000000Z"
},
"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 |
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 |
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 |