latestOpenAPI 3.1.0MIT2026-08-226224149.1 KB

613ceff68dc7

Cancel a bulk request

Sets cancellation_requested_at so the running job exits cleanly to cancelled on its next heartbeat. Idempotent — re-cancelling just bumps the timestamp.

post/bulk_requests/{id}/cancel

Path parameters

idstring required

Response

Cancellation requested

idinteger
status'pending' | 'processing' | 'completed' | 'failed' | 'cancelled'

pending = queued, processing = records being inserted, completed = all rows processed, failed = job errored, cancelled = cancellation honored on a heartbeat

sourcestring nullable

Origin of the request (e.g. bulk_api, csv, nacha)

total_itemsinteger
processed_itemsinteger
successful_itemsinteger
failed_itemsinteger
skipped_itemsinteger

Records skipped due to on_conflict: skip matching an existing external_id

progressinteger

processed_items / total_items as a percentage (0-100)

filenamestring nullable

Original filename for CSV/NACHA uploads. Null for API-submitted requests.

created_atstring date-time
started_atstring date-time nullable
completed_atstring date-time nullable
last_progress_atstring date-time nullable

Heartbeat timestamp from the worker; used to detect stuck jobs

cancellation_requested_atstring date-time nullable

Set by POST /bulk_requests/{id}/cancel; the worker exits at its next heartbeat

parsingboolean

True while a CSV/NACHA upload is still being parsed (before rows are enqueued)

stuckboolean

True if the request has been processing for more than 5 minutes without a heartbeat

error_messagestring nullable
error_detailsobject

Free-form structured error context (e.g. row indices, validation errors)

parent_bulk_request_idinteger nullable

If this request is a retry, the ID of the original (parent) bulk request

on_conflict'skip' | 'error'

Conflict policy applied when an external_id already exists in the stream

data_stream_idinteger nullable

Data stream the request targets, when applicable