NAV

Introduction

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

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

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

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

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

API Endpoint

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

JSON-only

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

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

Pagination

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

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

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

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

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

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

Sorting

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

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

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

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

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

Working with Dates

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

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

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

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

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

Versioning

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

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

Getting Help or Contributing

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

Errors

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

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

Codes

The Bramble API returns the following HTTP status codes:

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

Response format

Error responses are separated into two categories:

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

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

Rate Limits

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

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

Authentication

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

Please keep your API keys private.

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

apiKey

Header: Authorization

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

Checkins

Creates a checkin for a user

Request: Create a checkin

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

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


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:44Z",
      "updated_at": "2023-08-30T07:58:44Z",
      "work_location": "distributed"
    },
    "id": "18733",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkins/18733"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "55791",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55791",
          "self": "http://api.COMPANY.brmbl.io/v1/checkins/18733/relationships/user"
        }
      }
    },
    "type": "checkins"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkins/18733"
  }
}

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 checkin for a user per day.

A Checkin is used to track where you plan on doing work, and is also referenced in how we create the entries.

Request

POST /v1/checkins

Responses

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

Fetch a checkin by ID

Request: Returns a checkin

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2023-08-30T07:58:44Z",
      "updated_at": "2023-08-30T07:58:44Z",
      "work_location": "office"
    },
    "id": "18734",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/checkins/18734"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "55793",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55793",
          "self": "http://api.COMPANY.brmbl.io/v1/checkins/18734/relationships/user"
        }
      }
    },
    "type": "checkins"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/checkins/18734"
  }
}

Returns the checkin identified by an internal Bramble ID.

Request

GET /v1/checkins/{id}

Parameters

Parameter Description In Type Required Default Example
id Checkin 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
422 Unprocessible Entity
500 Internal Server Error

Cost Categories

Retrieve a cost category

Request: Returns a cost category

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "pt-xJQtlE5W",
      "inserted_at": "2023-08-30T07:58:44Z",
      "name": "Auto",
      "state": "active",
      "updated_at": "2023-08-30T07:58:44Z"
    },
    "id": "5829",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/5829"
    },
    "relationships": {},
    "type": "cost_categories"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/5829"
  }
}

You can fetch the details of a single cost category.

Request

GET /v1/cost_categories/{id}

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
422 Unprocessible 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_xyHAwnfS_XbLg0lOl50xsxaR7Mi2NztpE" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "name": "Auto",
        "state": "active"
      },
      "id": "5821",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/5821"
      },
      "relationships": {},
      "type": "cost_categories"
    },
    {
      "attributes": {
        "name": "Property",
        "state": "active"
      },
      "id": "5822",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/cost_categories/5822"
      },
      "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

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
422 Unprocessible Entity
500 Internal Server Error

Entries

Creates a user's entry

Request: Create a production task entry

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

{
  "date": "2022-02-23",
  "production_task_id": 14949,
  "user_id": "55566",
  "volume": 1
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:41Z",
      "minutes": "10.00",
      "updated_at": "2023-08-30T07:58:41Z",
      "volume": 1
    },
    "id": "110591",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/entries/110591"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "14949",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/14949",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110591/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "55566",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55566",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110591/relationships/user"
        }
      }
    },
    "type": "entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/entries/110591"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "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 entry

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

{
  "date": "2022-02-23",
  "minutes": 450,
  "supporting_task_id": 13275,
  "user_id": "55594"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:41Z",
      "minutes": "450",
      "updated_at": "2023-08-30T07:58:41Z",
      "volume": null
    },
    "id": "110607",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/entries/110607"
    },
    "relationships": {
      "supporting_task": {
        "data": {
          "id": "13275",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/13275",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110607/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "55594",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55594",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110607/relationships/user"
        }
      }
    },
    "type": "entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/entries/110607"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

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

Creates user's entry for a day, could be a production task or supporting task.

Request

POST /v1/entries

Responses

Status Description Schema
201 Entry Response
401 Authentication Error
404 Not Found Error
409 Conflict
422 Unprocessible Entity
500 Internal Server Error

Retrieve an entry.

Request: Returns an entry

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2023-08-30T07:58:40Z",
      "minutes": "150.00",
      "updated_at": "2023-08-30T07:58:40Z",
      "volume": 15
    },
    "id": "110578",
    "links": {
      "self": "http://company.brmbl.io/v1/entries/110578"
    },
    "relationships": {},
    "type": "entries"
  },
  "included": [],
  "links": {
    "self": "http://company.brmbl.io/v1/entries/110578"
  }
}

Request: Returns an entry

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2023-08-30T07:58:40Z",
      "minutes": "150.00",
      "updated_at": "2023-08-30T07:58:40Z",
      "volume": 15
    },
    "id": "110579",
    "links": {
      "self": "http://company.brmbl.io/v1/entries/110579"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "14942",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/production_tasks/14942",
          "self": "http://company.brmbl.io/v1/entries/110579/relationships/production_task"
        }
      }
    },
    "type": "entries"
  },
  "included": [
    {
      "attributes": {
        "description": "pt-EhWTRVZt",
        "improvement_category": "rpa",
        "inserted_at": "2023-08-30T07:58:40Z",
        "name": "TaskB",
        "state": "detached",
        "updated_at": "2023-08-30T07:58:40Z"
      },
      "id": "14942",
      "links": {
        "self": "http://company.brmbl.io/v1/production_tasks/14942"
      },
      "relationships": {},
      "type": "production_tasks"
    }
  ],
  "links": {
    "self": "http://company.brmbl.io/v1/entries/110579"
  }
}

Request: Returns an entry

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2023-08-30T07:58:40Z",
      "minutes": "60.00",
      "updated_at": "2023-08-30T07:58:40Z",
      "volume": null
    },
    "id": "110580",
    "links": {
      "self": "http://company.brmbl.io/v1/entries/110580"
    },
    "relationships": {
      "supporting_task": {
        "data": {
          "id": "13260",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://company.brmbl.io/v1/supporting_tasks/13260",
          "self": "http://company.brmbl.io/v1/entries/110580/relationships/supporting_task"
        }
      }
    },
    "type": "entries"
  },
  "included": [
    {
      "attributes": {
        "category": "MEET",
        "description": "45hA8ar3",
        "inserted_at": "2023-08-30T07:58:40Z",
        "name": "45hA8ar3",
        "state": "active",
        "updated_at": "2023-08-30T07:58:40Z"
      },
      "id": "13260",
      "links": {
        "self": "http://company.brmbl.io/v1/supporting_tasks/13260"
      },
      "relationships": {},
      "type": "supporting_tasks"
    }
  ],
  "links": {
    "self": "http://company.brmbl.io/v1/entries/110580"
  }
}

You can fetch the details of a single entry.

Request

GET /v1/entries/{id}

Parameters

Parameter Description In Type Required Default Example
id 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 Entry Response
401 Authentication Error
404 Not Found Error
422 Unprocessible Entity
500 Internal Server Error

List all entries

Request: List of entries (filtered by date)

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

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "date": "2020-01-02",
        "volume": 15
      },
      "id": "110583",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/entries/110583"
      },
      "relationships": {},
      "type": "entries"
    },
    {
      "attributes": {
        "date": "2020-01-02",
        "volume": 20
      },
      "id": "110584",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/entries/110584"
      },
      "relationships": {},
      "type": "entries"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/entries?date=2020-01-02&fields%5Bentries%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 entries.

Request

GET /v1/entries

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 users
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Entries
401 Authentication Error
422 Unprocessible Entity
500 Internal Server Error

Updates a user's entry

Request: Update a supporting task entry. Note that this will replace the existing values.

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

{
  "date": "2022-02-23",
  "production_task_id": 14960,
  "user_id": "55589",
  "volume": 1
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:41Z",
      "minutes": "10.00",
      "updated_at": "2023-08-30T07:58:41Z",
      "volume": 1
    },
    "id": "110604",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/entries/110604"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "14960",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/14960",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110604/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "55589",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55589",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110604/relationships/user"
        }
      }
    },
    "type": "entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/entries/110604"
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Failed to cast value to one of: no schemas validate",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 409 Conflict

{
  "errors": [
    {
      "detail": "entry is locked",
      "source": {
        "pointer": ":date"
      },
      "title": "Conflict"
    }
  ]
}

Request: Update a supporting task entry. Note that this will replace the existing values.

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

{
  "date": "2022-02-23",
  "minutes": 450,
  "supporting_task_id": 13271,
  "user_id": "55583"
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:41Z",
      "minutes": "450",
      "updated_at": "2023-08-30T07:58:41Z",
      "volume": null
    },
    "id": "110601",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/entries/110601"
    },
    "relationships": {
      "supporting_task": {
        "data": {
          "id": "13271",
          "type": "supporting_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/supporting_tasks/13271",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110601/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "55583",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55583",
          "self": "http://api.COMPANY.brmbl.io/v1/entries/110601/relationships/user"
        }
      }
    },
    "type": "entries"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/entries/110601"
  }
}

Updates user's entry for a day, could be a production task or supporting task.

Request

PATCH /v1/entries/{id}

Responses

Status Description Schema
201 Entry Response
401 Authentication Error
404 Not Found Error
409 Conflict
422 Unprocessible Entity
500 Internal Server Error

Groups

Retrieve a group

Request: Returns a group

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "inserted_at": "2023-08-30T07:58:42Z",
      "name": "Sales",
      "state": "active",
      "updated_at": "2023-08-30T07:58:42Z"
    },
    "id": "51200",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/groups/51200"
    },
    "relationships": {
      "users": {
        "data": [
          {
            "id": "55621",
            "type": "users"
          }
        ],
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users",
          "self": "http://api.COMPANY.brmbl.io/v1/groups/51200/relationships/users"
        }
      }
    },
    "type": "groups"
  },
  "included": [
    {
      "attributes": {
        "account_role": null,
        "email": "edwina_leannon@muller.org",
        "full_name": "Some User",
        "inserted_at": "2023-08-30T07:58:42Z",
        "preferred_first_name": "Some",
        "state": "invited",
        "team_role": "team_contributor",
        "timezone": "Etc/UTC",
        "updated_at": "2023-08-30T07:58:42Z"
      },
      "id": "55621",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/55621"
      },
      "relationships": {},
      "type": "users"
    }
  ],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/groups/51200"
  }
}

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

Request

GET /v1/groups/{id}

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
422 Unprocessible 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=51180&page[number]=1&page[size]=2&sort=name&fields[groups]=name,state \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_1uojE1Bc_uuInQBa5fVqqCBDUzni6VdBa" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "name": "division",
        "state": "active"
      },
      "id": "51181",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/groups/51181"
      },
      "relationships": {},
      "type": "groups"
    },
    {
      "attributes": {
        "name": "root",
        "state": "active"
      },
      "id": "51180",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/groups/51180"
      },
      "relationships": {},
      "type": "groups"
    }
  ],
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/groups?ancestors_id=51180&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

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
422 Unprocessible Entity
500 Internal Server Error

Identities

Retrieve a source

Request: Details on a given source

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

Response: 200 OK

{
  "data": {
    "description": "Guidewire data source",
    "id": 1671,
    "name": "guidewire",
    "state": "active",
    "type": "source"
  }
}

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

Request

GET /v1/sources/{id}

Parameters

Parameter Description In Type Required Default Example
id The ID of the source to fetch path integer true 233

Responses

Status Description Schema
200 Source Response
401 Authentication Error
404 Not Found Error
422 Unprocessible Entity
500 Internal Server Error

List all sources

Request: List of sources (filtered and sorted)

curl -X GET https://api.COMPANY.brmbl.io/v1/sources?page[number]=1&page[size]=10&sort=name&state=active,archived,suspended&term=guidewire \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_ZG3iRSLr_X7lXX19pplgbitSIPevtH2Mv" \

Response: 200 OK

{
  "data": [
    {
      "description": "Guidewire data source",
      "id": 1669,
      "name": "Active Source",
      "state": "active",
      "type": "source"
    },
    {
      "description": "Guidewire data source",
      "id": 1670,
      "name": "Archived Source",
      "state": "archived",
      "type": "source"
    },
    {
      "description": "Guidewire data source",
      "id": 1668,
      "name": "Suspended Source",
      "state": "suspended",
      "type": "source"
    }
  ],
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 10,
      "total_entries": 3,
      "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 sources.

You can optionally filter the list by source status.

Request

GET /v1/sources

Parameters

Parameter Description In Type Required Default Example
state Filter sources by given states (comma-separated) query array false active,archived
term Only show sources with names or descriptions containing this term query string false file
page query Page false
sort Comma separated list of fields to sort by. Prefixing a field with a minus sign (-) sorts descending. query array false -name,updated_at,-state

Responses

Status Description Schema
200 Sources
401 Authentication Error
422 Unprocessible Entity
500 Internal Server Error

Search for a production task id given a source id and a JSON payload

Request: Search for task identity

curl -X POST https://api.COMPANY.brmbl.io/v1/task/identities/1682/search \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_2q9JahyR_zuxaNKzzezFcDj4cKmbHv4wi" \
-d @- << EOF

{
  "client": "bank1",
  "state": "new"
}


EOF

Response: 200 OK

{
  "data": {
    "id": "605",
    "production_task_id": 15023,
    "source_id": 1682,
    "value": {
      "client": "bank1",
      "state": "new"
    }
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Object property count 0 is less than minProperties: 1",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "Could not find task identity matching: {\"client\":\"nonexistent\",\"state\":\"new\"}",
      "status": "404",
      "title": "Resource Not Found"
    }
  ]
}

You can search for a production task id given a source id and a JSON payload containing the unstructured data to search for.

Request

POST /v1/task/identities/{source_id}/search

Parameters

Parameter Description In Type Required Default Example
source_id The ID of the source to search in path string true 233
test Is it a test query? (not counted in stats) query boolean false true

Responses

Status Description Schema
200 Task Identity
401 Authentication Error
404 Not Found Error
422 Unprocessible Entity
500 Internal Server Error

Search for a user id given a source id and a JSON payload

Request: Search for user identity

curl -X POST https://api.COMPANY.brmbl.io/v1/user/identities/1658/search \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_EyIYlyiX_GuVAyLQfm1Fpcbh97UMxcVP0" \
-d @- << EOF

{
  "uid": "glennr"
}


EOF

Response: 200 OK

{
  "data": {
    "id": "631",
    "source_id": 1658,
    "user_id": 55733,
    "value": {
      "uid": "glennr"
    }
  }
}

Response: 422 Unprocessable Entity

{
  "errors": [
    {
      "detail": "Object property count 0 is less than minProperties: 1",
      "source": {
        "pointer": "/"
      },
      "title": "Invalid value"
    }
  ]
}

Response: 404 Not Found

{
  "errors": [
    {
      "code": "40401",
      "detail": "Could not find user identity matching: {\"uid\":\"nonexistent\"}",
      "status": "404",
      "title": "Resource Not Found"
    }
  ]
}

You can search for a user id given a source id and a JSON payload containing the unstructured data to search for.

Request

POST /v1/user/identities/{source_id}/search

Parameters

Parameter Description In Type Required Default Example
source_id The ID of the source to search in path string true 233
test Is it a test query? (not counting in stats) query boolean false true

Responses

Status Description Schema
200 User Identity
401 Authentication Error
404 Not Found Error
422 Unprocessible Entity
500 Internal Server Error

Production Tasks

Retrieve a production task

Request: Retrieve a production task

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "description": "pt-G4Jz3N9f",
      "improvement_category": "rpa",
      "inserted_at": "2023-08-30T07:58:44Z",
      "name": "Customer Outreach",
      "state": "active",
      "updated_at": "2023-08-30T07:58:44Z"
    },
    "id": "15016",
    "links": {
      "self": "http://www.example.com/v1/production_tasks/15016"
    },
    "relationships": {},
    "type": "production_tasks"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/production_tasks/15016"
  }
}

You can fetch the details of a single production task.

Request

GET /v1/production_tasks/{id}

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
422 Unprocessible 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=core \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_1SkOv6vK_oegknBlnuq20aWw9YJVTGGqh" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "description": "pt-yrowEd1g",
        "improvement_category": "core",
        "inserted_at": "2023-08-30T07:58:44Z",
        "name": "Lodge Claim",
        "state": "active",
        "updated_at": "2023-08-30T07:58:44Z"
      },
      "id": "15020",
      "links": {
        "self": "http://www.example.com/v1/production_tasks/15020"
      },
      "relationships": {
        "process": {
          "data": {
            "id": "9195",
            "type": "process"
          },
          "links": {
            "related": "http://www.example.com/v1/process/9195",
            "self": "http://www.example.com/v1/production_tasks/15020/relationships/process"
          }
        }
      },
      "type": "production_tasks"
    }
  ],
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/production_tasks?improvement_category=core"
  },
  "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

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 core,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
422 Unprocessible 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_QLsJWkZP_oowGeYcwALnjPXfjqtPfGRCY" \
-d @- << EOF

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


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:43Z",
      "note": null,
      "score": 0.95,
      "updated_at": "2023-08-30T07:58:43Z"
    },
    "id": "1793",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1793"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "55687",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55687",
          "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1793/relationships/user"
        }
      }
    },
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1793"
  }
}

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": ":user_id"
      },
      "title": "Conflict"
    }
  ]
}

You can create a quality score for a user, for a particular day.

Request

POST /v1/quality_scores

Responses

Status Description Schema
201 Quality Score Response
401 Authentication Error
404 Not Found Error
409 Conflict
422 Unprocessible 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/1792 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_AWlk4k5m_PNtWlSca4zM4jQGTej6TFE2N" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2023-01-01",
      "inserted_at": "2023-08-30T07:58:43Z",
      "note": null,
      "score": 0.5,
      "updated_at": "2023-08-30T07:58:43Z"
    },
    "id": "1792",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1792"
    },
    "relationships": {
      "user": {
        "data": {
          "id": "55685",
          "type": "users"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/users/55685",
          "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1792/relationships/user"
        }
      }
    },
    "type": "quality_scores"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1792"
  }
}

Response: 404 Not Found

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

You can fetch the details of a single quality score.

Request

GET /v1/quality_scores/{id}

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
422 Unprocessible 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_nEUA2IVO_su72Tedq6Ml1ROHmNY7z9eY2" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "date": "2023-01-02",
        "score": 0.25
      },
      "id": "1780",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1780"
      },
      "relationships": {
        "user": {
          "data": {
            "id": "55671",
            "type": "users"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/users/55671",
            "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1780/relationships/user"
          }
        }
      },
      "type": "quality_scores"
    },
    {
      "attributes": {
        "date": "2023-01-02",
        "score": 0.5
      },
      "id": "1781",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1781"
      },
      "relationships": {
        "user": {
          "data": {
            "id": "55672",
            "type": "users"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/users/55672",
            "self": "http://api.COMPANY.brmbl.io/v1/quality_scores/1781/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

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
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
422 Unprocessible 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_NX00w2jh_YPssWC0taxFyKUfZ6JCNFq0W" \
-d @- << EOF

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


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:42Z",
      "note": null,
      "score": 0.55,
      "updated_at": "2023-08-30T07:58:42Z"
    },
    "id": "1383",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1383"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "14980",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/14980",
          "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1383/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1383"
  }
}

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": ":production_task_id"
      },
      "title": "Conflict"
    }
  ]
}

You can create a service level score for a task.

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

If a Service level score already exists for the given task+date then a 422 error will be returned.

Request

POST /v1/service_levels

Responses

Status Description Schema
201 Service Level Response
401 Authentication Error
404 Not Found Error
409 Conflict
422 Unprocessible 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/1382 \
-H "Content-type: application/json" \
-H "Authorization: Bearer bramble_H43lHVTq_dpK1bgR4ibt2YV4TyyK1c3c5" \

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2023-08-30T07:58:42Z",
      "note": null,
      "score": 0.1,
      "updated_at": "2023-08-30T07:58:42Z"
    },
    "id": "1382",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1382"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "14979",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/14979",
          "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1382/relationships/production_task"
        }
      }
    },
    "type": "service_levels"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1382"
  }
}

Response: 404 Not Found

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

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

Request

GET /v1/service_levels/{id}

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
422 Unprocessible 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_QAamI0BN_176AP4iH2uSZUB9GV9fHDgFH" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "score": 0.9
      },
      "id": "1371",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1371"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "14971",
            "type": "production_tasks"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/14971",
            "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1371/relationships/production_task"
          }
        }
      },
      "type": "service_levels"
    },
    {
      "attributes": {
        "score": 0.5
      },
      "id": "1370",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1370"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "14970",
            "type": "production_tasks"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/14970",
            "self": "http://api.COMPANY.brmbl.io/v1/service_levels/1370/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

Parameters

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

Responses

Status Description Schema
200 Service Levels
401 Authentication Error
422 Unprocessible Entity
500 Internal Server Error

Task Input

Adjust an inventory balance

Request: Create a task input

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

{
  "date": "2022-02-23",
  "group_id": "51282",
  "production_task_id": 14999,
  "volume": 1
}


EOF

Response: 201 Created

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "2023-08-30T07:58:43Z",
      "updated_at": "2023-08-30T07:58:43Z",
      "volume": 1
    },
    "id": "1221",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/task_inputs/1221"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "14999",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/production_tasks/14999",
          "self": "http://api.COMPANY.brmbl.io/v1/task_inputs/1221/relationships/production_task"
        }
      }
    },
    "type": "task_inputs"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/task_inputs/1221"
  }
}

Response: 422 Unprocessable Entity

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

You can adjust an inventory balance by creating a Task Input.

A Task Input is used to manage the workload in a task queue. It represents incoming or queued work items from the source system. You can adjust the volume of work using this API. Negative volumes are allowed, allowing you to decrease the inventory balance for a task."

Request

POST /v1/task_inputs

Responses

Status Description Schema
201 Task Input
401 Authentication Error
404 Not Found Error
409 Conflict
422 Unprocessible Entity
500 Internal Server Error

Retrieve a task input

Request: Retrieve a task input

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "date": "2020-01-01",
      "inserted_at": "2023-08-30T07:58:43Z",
      "updated_at": "2023-08-30T07:58:43Z",
      "volume": 10
    },
    "id": "1220",
    "links": {
      "self": "http://www.example.com/v1/task_inputs/1220"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "14998",
          "type": "production_tasks"
        },
        "links": {
          "related": "http://www.example.com/v1/production_tasks/14998",
          "self": "http://www.example.com/v1/task_inputs/1220/relationships/production_task"
        }
      }
    },
    "type": "task_inputs"
  },
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/task_inputs/1220"
  }
}

Response: 404 Not Found

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

You can fetch the details of a single Task Input (AKA inventory adjustment).

Request

GET /v1/task_inputs/{id}

Parameters

Parameter Description In Type Required Default Example
id Task input 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 Task Input
401 Authentication Error
404 Not Found Error
422 Unprocessible Entity
500 Internal Server Error

List all task inputs

Request: List all inventory adjustments (filtered)

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

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "volume": 20
      },
      "id": "1208",
      "links": {
        "self": "http://www.example.com/v1/task_inputs/1208"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "14989",
            "type": "production_tasks"
          },
          "links": {
            "related": "http://www.example.com/v1/production_tasks/14989",
            "self": "http://www.example.com/v1/task_inputs/1208/relationships/production_task"
          }
        }
      },
      "type": "task_inputs"
    },
    {
      "attributes": {
        "volume": 40
      },
      "id": "1209",
      "links": {
        "self": "http://www.example.com/v1/task_inputs/1209"
      },
      "relationships": {
        "production_task": {
          "data": {
            "id": "14990",
            "type": "production_tasks"
          },
          "links": {
            "related": "http://www.example.com/v1/production_tasks/14990",
            "self": "http://www.example.com/v1/task_inputs/1209/relationships/production_task"
          }
        }
      },
      "type": "task_inputs"
    }
  ],
  "included": [],
  "links": {
    "self": "http://www.example.com/v1/task_inputs?date=2020-01-02&fields%5Btask_inputs%5D=volume&page%5Bnumber%5D=1&page%5Bsize%5D=2&sort=date"
  },
  "meta": {
    "pagination": {
      "page_number": 1,
      "page_size": 2,
      "total_entries": 2,
      "total_pages": 1
    }
  }
}

You can fetch a list of all task inputs.

The list can be filtered by date, or production_task_id, or a combination of those.

The list is currently limited to the latest 50 adjustments.

Request

GET /v1/task_inputs

Parameters

Parameter Description In Type Required Default Example
date Filter inputs for this date query string false 2022-02-28
production_task_id Filter inputs for this task 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 production_task
fields Comma separated list of fields to return. query object false

Responses

Status Description Schema
200 Task Input
401 Authentication Error
422 Unprocessible Entity
500 Internal Server Error

Users

List all users

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_PQmucVyL_gO7MgeqzwL5MSV7rRspTZuYj" \

Response: 200 OK

{
  "data": [
    {
      "attributes": {
        "account_role": null,
        "email": "frank@foo.com",
        "full_name": "Frank Furter",
        "inserted_at": "2023-08-30T07:58:43Z",
        "preferred_first_name": "Frank",
        "state": "invited",
        "team_role": "team_owner",
        "timezone": "America/Los_Angeles",
        "updated_at": "2023-08-30T07:58:43Z"
      },
      "id": "55749",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/55749"
      },
      "relationships": {
        "group": {
          "data": {
            "id": "51302",
            "type": "groups"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/groups/51302",
            "self": "http://api.COMPANY.brmbl.io/v1/users/55749/relationships/group"
          }
        }
      },
      "type": "users"
    },
    {
      "attributes": {
        "account_role": "account_owner",
        "email": "bob@foo.com",
        "full_name": "Bob Owner",
        "inserted_at": "2023-08-30T07:58:43Z",
        "preferred_first_name": "Bob",
        "state": "invited",
        "team_role": null,
        "timezone": "Etc/UTC",
        "updated_at": "2023-08-30T07:58:43Z"
      },
      "id": "55748",
      "links": {
        "self": "http://api.COMPANY.brmbl.io/v1/users/55748"
      },
      "relationships": {
        "group": {
          "data": {
            "id": "51301",
            "type": "groups"
          },
          "links": {
            "related": "http://api.COMPANY.brmbl.io/v1/groups/51301",
            "self": "http://api.COMPANY.brmbl.io/v1/users/55748/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

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
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
422 Unprocessible Entity
500 Internal Server Error

Fetch a user by ID

Request: Successful request returns the user

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

Response: 200 OK

{
  "data": {
    "attributes": {
      "account_role": null,
      "email": "cristina.oreilly@lehner.biz",
      "full_name": "Jane Doe",
      "inserted_at": "2023-08-30T07:58:43Z",
      "preferred_first_name": "Something",
      "state": "invited",
      "team_role": "team_owner",
      "timezone": "Africa/Abidjan",
      "updated_at": "2023-08-30T07:58:43Z"
    },
    "id": "55747",
    "links": {
      "self": "http://api.COMPANY.brmbl.io/v1/users/55747"
    },
    "relationships": {
      "group": {
        "data": {
          "id": "51300",
          "type": "groups"
        },
        "links": {
          "related": "http://api.COMPANY.brmbl.io/v1/groups/51300",
          "self": "http://api.COMPANY.brmbl.io/v1/users/55747/relationships/group"
        }
      }
    },
    "type": "users"
  },
  "included": [],
  "links": {
    "self": "http://api.COMPANY.brmbl.io/v1/users/55747"
  }
}

Response: 404 Not Found

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

Returns the user identified by an internal Bramble ID.

Request

GET /v1/users/{id}

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
422 Unprocessible Entity
500 Internal Server Error

Models

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

TaskInput

Task inputs record the volume of incoming work for a given task. They act as a log of adjustments to the balance of a task backlog, recording either new work arriving in a task queue, or reconciliation events that correct the inventory balance. Negative volumes are permitted.

{
  "attributes": {
    "date": "2022-02-23",
    "inserted_at": "1970-01-01T00:00:00.000000Z",
    "updated_at": "2023-01-01T00:00:00.000000Z",
    "volume": 1
  },
  "id": "281",
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/task_inputs/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/task_inputs/4/relationships/production_task"
      }
    }
  },
  "type": "task_inputs"
}
Property Description Type Format Required
id The id of the Task Input. string true
type always "task_inputs" string true
attributes.date When did this input event happen? string date false
attributes.volume The amount to adjust the task inventory by. Usually a positive integer, but negative values are permitted. integer int32 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

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

TaskIdentity

Task identities map incoming free-form data to a production task. They're specific to a data source.

{
  "id": "281",
  "production_task_id": 3,
  "source_id": 1,
  "value": {
    "client": "bank1",
    "state": "new"
  }
}
Property Description Type Format Required
id ID for a Task Identity object string false
production_task_id Bramble internal production task id integer false
source_id Bramble internal source id integer false
value Any arbitrary object object 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

Source

A data Source. e.g. a file, a web service, etc.

{
  "description": "Data coming from call-center software",
  "id": 34,
  "name": "Call-center",
  "state": "active"
}
Property Description Type Format Required
description The source's description. string false
id Bramble internal source id integer false
name The source's name. string false
state The source's state. string 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

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": {
    "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.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

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

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

UserIdentity

User identities map incoming free-form data to a Bramble user. They're specific to a data source.

{
  "id": "281",
  "source_id": 1,
  "user_id": 3,
  "value": {
    "uid": "glennr"
  }
}
Property Description Type Format Required
id ID for a User Identity object string false
source_id Bramble internal source id integer false
user The id of the user. string false
value Any arbitrary object object 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 integer false
inserted_at The timestamp of when this resource was created. string date-time false
name The production task's name. string false
state The production task's state. string false
type always "supporting_tasks" string false
updated_at The last updated timestamp of this resource. string date-time 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

Entry

Entries 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 entry. string true
type value is always "entries" string true
attributes.date When did this entry event 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. Usually a positive integer, but negative values are permitted. integer int32 false
attributes.updated_at The last updated timestamp of this resource. string date-time false
attributes.volume The number of times the task is completed. Usually a positive integer, but negative values are permitted. integer int32 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

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

ProductionTask

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

{
  "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
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

Error Models

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

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

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

Request Models

EntryParams

Input parameters for Entries, can be either a production task or supporting task parameters

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/ProductionTaskEntryParams"
    },
    {
      "$ref": "#/components/schemas/SupportingTaskEntryParams"
    }
  ]
}

SupportingTaskEntryParams

Input parameters for Supporting Task Entries

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

IdentitySearchParams

Free-form input parameters for searching user_identity or task_identity

{
  "uid": "glennr"
}
Property Description Type Format Required

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

ProductionTaskEntryParams

Input parameters for Production Task Entries

{
  "date": "2022-02-23",
  "production_task_id": 432,
  "user_id": "234",
  "volume": 1
}
Property Description Type Format Required
date When did this entry event happen? string date true
production_task_id Bramble internal production task id integer true
user_id The id of the user. string true
volume The number of times the task is completed. Usually a positive integer, but negative values are permitted. integer int32 true

CheckinParams

Input parameters for Checkin

{
  "date": "2022-02-23",
  "user_id": 432,
  "work_location": "office"
}
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 true

TaskInputParams

Input parameters for Task Inputs

{
  "date": "2022-02-23",
  "group_id": "234",
  "production_task_id": "432",
  "volume": 1
}
Property Description Type Format Required
date When did this input event happen? string date true
group_id The id of the group. string true
production_task_id Bramble internal production task id integer true
volume The amount to adjust the task inventory by. Usually a positive integer, but negative values are permitted. integer int32 true

QualityScoreParams

Input params for Quality Score

{
  "date": "2022-02-23",
  "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
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

Response Models

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

ProductionTaskEntryResponse

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/entries/4"
    },
    "relationships": {
      "production_task": {
        "data": {
          "id": "2",
          "type": "production_tasks"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/entries/4/relationships/production_task"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/entries/4/relationships/user"
        }
      }
    },
    "type": "entries"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/entries/4"
  }
}
Property Description Type Format Required
data Entry 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

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

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

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

ProductionTaskResponse

Production Task Response

{
  "data": {
    "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
data ProductionTask false

TaskInputsResponse

Task Input List Response

{
  "data": [
    {
      "production_task": {
        "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"
      },
      "task_input": {
        "attributes": {
          "date": "2022-02-23",
          "inserted_at": "1970-01-01T00:00:00.000000Z",
          "updated_at": "2023-01-01T00:00:00.000000Z",
          "volume": 1
        },
        "id": "281",
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/task_inputs/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/task_inputs/4/relationships/production_task"
            }
          }
        },
        "type": "task_inputs"
      }
    }
  ]
}
Property Description Type Format Required
data Generic Data Wrapper array(any) false

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

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

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

UserIdentityResponse

User Identity Response

{
  "data": {
    "id": "281",
    "source_id": 1,
    "user_id": 3,
    "value": {
      "uid": "glennr"
    }
  }
}
Property Description Type Format Required
data UserIdentity false

SourceResponse

A response object representing a data Source.

{
  "data": {
    "description": "Data coming from call-center software",
    "id": 34,
    "name": "Call-center",
    "state": "active"
  }
}
Property Description Type Format Required
data Source false

SupportingTaskEntryResponse

Supporting Task Entry 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/entries/4"
    },
    "relationships": {
      "supporting_task": {
        "data": {
          "id": "2",
          "type": "supporting_tasks"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/entries/4/relationships/supporting_task"
        }
      },
      "user": {
        "data": {
          "id": "1",
          "type": "users"
        },
        "links": {
          "self": "https://api.COMPANY.brmbl.io/v1/entries/4/relationships/user"
        }
      }
    },
    "type": "entries"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/entries/4"
  }
}
Property Description Type Format Required
data Entry 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

TaskInputResponse

Task Input Response

{
  "data": {
    "attributes": {
      "date": "2022-02-23",
      "inserted_at": "1970-01-01T00:00:00.000000Z",
      "updated_at": "2023-01-01T00:00:00.000000Z",
      "volume": 1
    },
    "id": "281",
    "links": {
      "self": "https://api.COMPANY.brmbl.io/v1/task_inputs/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/task_inputs/4/relationships/production_task"
        }
      }
    },
    "type": "task_inputs"
  },
  "included": [],
  "links": {
    "self": "https://api.COMPANY.brmbl.io/v1/task_inputs/4"
  }
}
Property Description Type Format Required
data TaskInput true
included Included resource objects (compound documents) array(any) false
links.self Link for the relationship itself string uri 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": {
        "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

ProductionTasksResponse

Production Task List Response

{
  "data": [
    {
      "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

SourcesResponse

Source List Response

{
  "data": [
    {
      "description": "Data coming from call-center software",
      "id": 34,
      "name": "Call-center",
      "state": "active"
    }
  ],
  "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

TaskIdentityResponse

Task Identity Response

{
  "data": {
    "id": "281",
    "production_task_id": 3,
    "source_id": 1,
    "value": {
      "client": "bank1",
      "state": "new"
    }
  }
}
Property Description Type Format Required
data TaskIdentity 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

EntriesResponse

Entry 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": {
        "production_task": {
          "data": {
            "id": "123",
            "type": "production_tasks"
          },
          "links": {
            "related": "https://api.COMPANY.brmbl.io/production_tasks/123",
            "self": "https://api.COMPANY.brmbl.io/entries/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/entries/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/entries/1/relationships/user"
          }
        }
      },
      "type": "entries"
    }
  ],
  "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

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": {
      "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

EntryResponse

Can either be a Production Task or Supporting Task Entry response

{
  "oneOf": [
    {
      "$ref": "#/components/schemas/ProductionTaskEntryResponse"
    },
    {
      "$ref": "#/components/schemas/SupportingTaskEntryResponse"
    }
  ]
}