Warddocs
Guides

Files in any format

Ward reads CSV, TSV, XLSX and PDFs with a text layer without a template per bank. It tries, in order: a card network export (DE n columns); a layout you confirmed; a known layout; known header names in English and Spanish; then the learned column reader, which maps each column from its header words and the shape of its values (dates, signed amounts, 4-digit MCCs, masked card numbers, running balances). A column called Col7 full of 5411, 6011, 5812 is read as an MCC.

When Ward is unsure

If a required field reads below 0.6 confidence, the answer is 422 with code: needs_mapping and the proposed reading:

{"error": {"code": "needs_mapping", "message": "...", "request_id": "a1b2c3d4", "details": {"reading": {
  "fingerprint": "f9c2...", "columns": [{"index": 0, "header": "Fecha Valor", "field": "date", "confidence": 0.93},
                                        {"index": 3, "header": "Imp.", "field": "amount", "confidence": 0.41, "alternatives": ["balance"]}]}}}}

Show it to the person once, let them correct it, and resend the same request with column_map:

{"type": "statement", "input": {"file_base64": "...", "file_name": "bank.xlsx",
  "column_map": {"fingerprint": "f9c2...", "columns": {"0": "date", "2": "description", "3": "amount", "4": "balance"}, "save": true}}}

With save: true the layout is stored for your account: the next file with the same header is read with no question. Only header names and the mapping are stored, never file contents. Manage layouts with GET/POST /api/v1/layouts, DELETE /api/v1/layouts/{id}; preview a reading with POST /api/v1/layouts/read.

Other file errors

code Meaning
unsupported_format Legacy .xls or another type: export as .xlsx or CSV
scanned_pdf No text layer: send the bank's CSV export or a text PDF
encrypted Password-protected PDF
no_header No header row found; the message lists the columns seen
not_transactions A balance sheet or income statement, not movements
unsupported_kind Read correctly, but it is another kind of file (alerts, authorizations); the reading says which
mapping_incomplete A confirmed reading needs at least a date and a money column