Bulk Operations API Design
API endpoints that accept arrays of operations in a single request to reduce round trips and improve throughput for batch processing.
Description
Bulk operations APIs allow clients to create, update, or delete multiple resources in a single HTTP request, dramatically reducing the overhead of making hundreds or thousands of individual API calls. This is essential for data import scenarios, batch updates, and synchronization workflows. A well-designed bulk endpoint accepts an array of operations, processes them (either all-or-nothing or with partial success), and returns per-item results indicating success or failure for each operation.
The key design decision is transaction semantics: should the entire batch succeed or fail atomically (simpler but less flexible), or should each item be processed independently with per-item status codes (more useful but more complex)? Most production APIs choose the partial-success model, returning a 200 (or 207 Multi-Status) with an array of results that mirrors the input array order, each containing a status code and either the created/updated resource or an error detail.
Bulk endpoints need strict limits on batch size (e.g., max 100 items per request) to prevent timeout and memory issues. For very large batches (thousands of items), the API should accept the batch asynchronously: return 202 Accepted with a job ID, process the batch in the background, and allow the client to poll a status endpoint or receive a webhook when processing completes. Request validation should validate the entire batch before processing any items to fail fast on obviously invalid input.
Prompt Snippet
Accept bulk operations as POST /api/v1/invoices/bulk with body { operations: [{ method: 'create', data: {...} }, { method: 'update', id: '...', data: {...} }] }, capped at 100 operations per request. Return 200 with { results: [{ index: 0, status: 201, data: {...} }, { index: 1, status: 422, error: {...} }] } preserving input order. Validate all operations upfront (schema validation) before processing any. For batches over 100 items, return 202 Accepted with a job_id and provide GET /api/v1/jobs/{job_id} for polling status. Require an Idempotency-Key header on all bulk POST requests.Tags
Related Terms
Idempotency Keys
Client-generated unique keys sent with mutating requests to ensure that retrying the same operation produces the same result without side effects.
Long-Running Operations (Async APIs)
A pattern for handling API requests that take too long for synchronous response by returning a job reference and providing status polling or callback notification.
Request Validation (Zod/Joi)
Runtime validation of incoming API request bodies, query parameters, and path parameters using schema libraries like Zod or Joi.