Export jobs
Exports are asynchronous. You create a job scoped to a context, poll its status by ID, and download the file once it reaches
SUCCEEDED. Statuses are QUEUED, RUNNING, SUCCEEDED, FAILED, EXPIRED, and CANCELED.
Create an export job
POST to the context’s export-jobs collection. Responds 202 Accepted with the job ID and a poll URL.
reportType— one ofMATCHED,UNMATCHED,VARIANCE,EXCEPTIONS(aliasesMATCHESandUNMATCHED_TRANSACTIONSare normalized).format—CSV,JSON, orXML(normalized to uppercase).dateFrom/dateTo— optionalYYYY-MM-DD;dateFromdefaults to 30 days beforedateTo, anddateTodefaults to tomorrow (UTC).sourceId— optional source filter.
SUMMARY and PDF are not supported for async export jobs and are rejected with 400. The date window is also capped at a maximum span (an over-range request is rejected rather than silently clamped).Poll job status
Read the top-level job route (thestatusUrl from creation).
error is present only when status is FAILED; downloadUrl appears only once the job has SUCCEEDED and the file is still available. You can list a context’s jobs with GET /v1/contexts/{contextId}/export-jobs, list all jobs with GET /v1/export-jobs, and cancel a queued/running job with POST /v1/export-jobs/{jobId}/cancel.
Download the file
Returns a presigned URL, the original file name, a SHA-256 checksum, and the URL’s remaining lifetime in seconds.Disputes
A dispute is opened against a specific exception when a reconciliation discrepancy needs to be contested. Its lifecycle is
DRAFT → OPEN → PENDING_EVIDENCE → WON / LOST.
Open a dispute
POST to the exception’s disputes collection.
category is one of BANK_FEE_ERROR, UNRECOGNIZED_CHARGE, DUPLICATE_TRANSACTION, or OTHER. The opening principal is recorded in openedBy.
Submit evidence by URL
Attach a reference to an already-hosted evidence file plus a describing comment.Upload an evidence file
Stream the raw file bytes directly to tenant-scoped object storage — the comment travels as a query parameter and the file as the request body. Responds201 Created with the updated dispute. Allowed content types are application/pdf, image/png, image/jpeg, and text/csv; the body is capped at 10 MiB.
evidence array:
The upload endpoint fails closed with
503 when object storage is not configured, rejects oversize bodies with 413, and rejects content types outside the allowlist with 415. The tenant and dispute are always resolved from the JWT and path — never from the body.Close a dispute
Record the outcome.won sets the terminal state to WON or LOST, with a required resolution note.
GET /v1/disputes (filter by state, category, date range; sort and cursor-paginate) and fetch one with GET /v1/disputes/{disputeId}.
Response codes
| Status | Meaning |
|---|---|
200 | Export/dispute data returned |
201 | Evidence file uploaded |
202 | Export job accepted |
400 | Invalid input (unsupported report type/format, bad date range, invalid category) |
404 | Context, export job, exception, or dispute not found |
409 | Invalid dispute state transition |
413 | Evidence file exceeds the 10 MiB cap |
415 | Evidence content type not in the allowlist |
422 | Malformed field |
503 | Export or evidence storage not configured |

