Skip to main content
The Import center is where operators turn batch files — bank statements, PSP reports, on-chain exports, and internal ledgers — into data the reconciliation engine can use. The page header reads “Import center” with the description “Track uploads, validate mappings, inspect failed rows, and explain how file data enters reconciliation.”
Every import on this page is an ImportBatch created through POST /v1/import-batches. The dashboard is a convenience layer over the same ingestion pipeline available to your own systems.

KPI strip

At the top of the page, four cards summarize the import surface:
CardValue
FormatsThe accepted file extensions: .csv, .json, .xlsx, .tsv
ProfilesThe number of active import profiles
Failed rowsThe number of current row-level validation issues
FlowA reminder of the pipeline: RawRecords -> Cases
The live ingestion path currently parses CSV and TSV files only. .json and .xlsx are listed as accepted formats but uploading them through the live upload flow will be rejected with an error until that part of the pipeline is completed.

Tabs

The page has three tabs, gated by permission:
  • Import history (imports_view) — every ImportBatch for the organization
  • Failed rows (imports_review) — row-level validation failures across batches
  • File templates — reference column layouts for each source type

Import history

Each row in the history table represents one ImportBatch, loaded from List import batches (GET /v1/import-batches?limit=100):
ColumnSource
File nameoriginalFileName
Source typesourceType
Providerprovider
Profilethe linked import profile’s name
Mapping statuswhether the batch resolved to a mapped profile
Statusstatus, mapped to one of pending, processing, completed, failed
RowsvalidRows / warningRows / failedRows out of totalRows
Outputpayment intents created / flow legs created
Linked casesnumber of cases linked from this batch
CreatedcreatedAt
Actions”View” link to the batch summary
The underlying status values from the API (uploaded, mapping_required, parsing, validating, processing, completed, failed) are collapsed into four UI states:
API statusUI status
uploaded, mapping_requiredPending
parsing, validating, processingProcessing
completedCompleted
failedFailed

Failed rows

Each entry shows:
  • A badge — failed or matched_with_exception depending on validationStatus
  • The row number and sourceRef
  • The list of validationErrors for that row
  • The raw payload as pretty-printed JSON
  • A “RawRecord validation” badge
This is the row-level detail behind the failedRows and warningRows counts on the history table and on the Overview page’s Recent Import Failures widget. Each failing row corresponds to a RawRecord with validationStatus = failed, which can be retrieved via List import batch raw records.

File templates

Reference cards showing the expected columns for each source type, used as a starting point when preparing a file:
TemplateColumns
Client ledgerref_id, send_amount, send_currency, receive_amount, receive_currency, payment_date
PSP report (Bridge)transfer_id, amount, currency, status, created_at
Bank statementstatement_ref, credit_amount, currency, posted_at, beneficiary_account
On-chain reporttx_hash, chain_id, token_address, amount, occurred_at
These map onto the canonical fields configured for each import profile.

Uploading a file

Selecting Upload file (requires imports_upload) opens a four-step modal:
1

Choose a source type

Pick the ImportSourceType for the file. This determines whether the import is expectation-first (creates PaymentIntent records) or evidence-first (creates FlowLeg records):
Source typeOutput
client_internal_ledgerCreates PaymentIntent + ReconciliationCase
bank_statementCreates FlowLeg evidence
psp_reportCreates FlowLeg evidence
onchain_reportCreates FlowLeg evidence
client_transfer_reportCreates FlowLeg evidence
manualCreates FlowLeg or PaymentIntent
2

Choose an import profile

Select the import profile that maps this file’s columns to canonical fields. Profiles are filtered to ones matching the chosen source type.
3

Upload the file

Files up to 50 MB are accepted. For live processing, only CSV and TSV are currently supported.
4

Preview and confirm

Review a preview of the parsed rows before submitting. Confirming calls Create an import batch:
POST /v1/import-batches
with the import profile ID, original file name, file contents, and content type.
Live uploads are archived to Cloudflare R2 and hashed for deduplication. If you upload the same file content twice for the same organization, the API recognizes the existing ImportBatch by its file hash rather than creating a duplicate.

Batch summary

Selecting “View” on a batch opens its summary, which presents the batch’s row metrics — total, valid, warning, and failed row counts — alongside the batch’s mapping status and file name, with a button to copy the batch ID. The same data is available directly from Get import batch detail (GET /v1/import-batches/{batchId}) and the underlying rows from List import batch raw records (GET /v1/import-batches/{batchId}/raw-records).

From here

List import batches

Query batch history directly, including status and row counts.

Create an import batch

Submit a file programmatically instead of through the dashboard.

Configuration

Manage the import profiles and canonical fields that govern how files are mapped.

Cases

See the PaymentIntent and ReconciliationCase records produced by a successful import.