Skip to main content
Run many Admin API calls to the same endpoint in a single HTTP request. This guide explains the bulk endpoint, POST /bulk. You send one request that holds a list of ordinary Admin API calls; Findity runs them one after another and returns one result per call. It’s the way to create or read many items — dimension values, approvers, organizations — without making one HTTP round trip each.

Overview

A bulk request wraps up to 50 calls in one envelope. Each call (a sub-request) is dispatched to its normal endpoint and behaves exactly as if you had called it directly: it is authenticated and authorized against its own target, and it returns its own status code and body. Keep these rules in mind — they shape how you design a batch:
  • One endpoint per batch. Every sub-request in a batch must call the same endpoint (the same HTTP method and the same action). You can repeat it with different ids, but you can’t mix endpoints.
  • Partial success. Sub-requests run in order, and each one commits on its own. A failing sub-request doesn’t roll back or block the others.
  • A 200 doesn’t mean everything worked. The overall response is 200 whenever the batch itself is well-formed. Always check each entry’s own status.

Prerequisites

  1. Complete Authentication and obtain an admin-scoped Bearer token. Every sub-request runs as the caller who made the bulk request, so the token must be allowed to call each target endpoint.
  2. Know the endpoint you want to batch and its requirements — for example, to create dimension values you need the organization id and the dimension id.

Key concepts

API endpoints

All bulk requests use the v1 admin host. Examples in this guide use the stage environment — switch to the production host only when you’re ready to go live.

Required headers

Include these on the bulk request:

Request format

POST /bulk The body is a JSON object with one required field, requests.

Sub-request fields

Rules for path and params:
  • Put query parameters in params, not in the path. A path that contains ? is rejected.
  • Percent-encoding and path traversal (..) in the path are rejected.
  • A path that points at /bulk is rejected — you can’t nest a bulk request inside another.
  • Authentication parameters (such as authenticationToken) are removed. A sub-request always runs as the caller of the bulk request.

The same-endpoint rule

Every sub-request in a batch must resolve to the same endpoint, matched on the HTTP method and the target action — not on the exact path. That means you can repeat one endpoint with different ids: If you need to run different operations — for example creating some values and updating others — send one batch per operation.

Response format

The response is a JSON object with a responses array. It has one entry per sub-request, in the same order as requests. Two special statuses:
  • 415 — the target endpoint returns binary or streamed content (images, PDFs, downloads), which isn’t supported in a batch. Call that endpoint directly instead.
  • 500 — the sub-request failed to dispatch.
A call that returns no content (for example a DELETE) comes back with status 204, body null, and no headers:
JSON
Sub-request ids are not checked for uniqueness: two sub-requests with the same id both run and both come back with that id, so use the index to tell them apart. A response body larger than the capture limit (10 MB by default) is replaced with { "omitted": true, "reason": "response too large", "contentType": "...", "contentLength": 0 }.

Example 1 — Create dimension values in one request

This batch creates two values on a dimension. Every sub-request is a POST to the same values endpoint, so the batch is allowed. The organization and the dimension already exist; the path carries their ids. POST /bulk
cURL
Example response (status 200 OK)
JSON
Each entry carries the target endpoint’s own 201 Created status and the created value, exactly as a direct call would return it.

Example 2 — Read several organizations

A GET sub-request takes its query parameters in params. This batch fetches two organizations, including their address and partner sections. The second organization doesn’t exist, which shows partial success. POST /bulk
cURL
Example response (status 200 OK)
JSON
The overall response is 200 even though the second sub-request returned 404. The first entry’s body is abbreviated here.

Example 3 — Add approvers to dimension values

This batch builds a two-step approval chain on one dimension value: John Doe approves first (level 0), then Carol Park (level 1). Both sub-requests call the same approvers endpoint, so the batch is allowed. The approval section and the two users already exist; sectionItemId is the id of a dimension value. POST /bulk
cURL
Example response (status 200 OK)
JSON

Handling partial failure

Because each sub-request commits on its own, a batch can succeed in part. Check the result of every entry, not just the overall 200:
  1. Loop over responses and read each entry’s status.
  2. Match failures back to your requests with the id you supplied (or the index).
  3. Retry or fix only the entries that failed. Don’t resend the whole batch — the sub-requests that succeeded have already been applied, and sending them again can fail (for example, creating a dimension value whose id already exists returns 409).
A failed entry carries the target endpoint’s own error in its body. For example, a duplicate dimension value returns:
JSON

Common integration patterns

Batches larger than 50. A batch holds at most 50 sub-requests. Split a longer list into chunks of 50 and send one bulk request per chunk. One batch per operation. Because a batch can call only one endpoint, a sync that creates, updates, and deletes items needs one batch per operation — for example, one batch of POST calls for new dimension values, one of PUT calls for changed values, and one of DELETE calls for removed values. Reading many items. Use GET sub-requests to fetch several organizations, or several records of the same kind, in one round trip. Send query parameters such as include in params. Several organizations. The same-endpoint rule is about the endpoint, not the path ids, so one batch can call the same endpoint for several organizations by putting each organization’s id in its sub-request path.

Error handling

A bulk request can fail in two places: the batch as a whole, or an individual sub-request. The batch is rejected. If the batch itself is malformed, the response is 400 and no sub-request is run:
JSON
Every case below returns 400 and runs nothing. Match on the code: the description is human-readable text that can be translated (stage returned a Swedish message for invalid JSON), and where a sub-request is at fault it names its position (index). A sub-request fails. The overall response is 200, and the failure is in that entry:
Last modified on November 13, 2026