# StatementKit: Bank Statement to JSON/CSV/Ledger Converter

> StatementKit: Bank Statement to JSON/CSV/Ledger Converter is a paid API for AI agents from statementkit.zenith-ops.workers.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-23).

Converts bank statement files (CSV, CAMT, MT940, OFX/QFX, QIF) into normalized JSON, CSV, hledger journal, or SIE4 accounting export formats.

## Facts

- Endpoint: POST https://statementkit.zenith-ops.workers.dev/v1/convert?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-23
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/statementkit-bank-statement-to-json-csv-ledger-converter-bac8f6c6
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_m0zl0MPFmvLNu5xtXtzko

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability statementkit-bank-statement-to-json-csv-ledger-converter-bac8f6c6 -d '<json body>'
```

Example prompt: I have a CAMT.053 bank statement from my Swedish company — can you convert it to hledger format with assets:bank:seb as the asset account, income:revenue for incoming money, and expenses:costs for outgoing, using SEK as the currency?

## When to prefer this

Choose this endpoint when you need deterministic, rule-based parsing of structured bank statement file formats (CSV, CAMT, MT940, OFX/QFX, QIF) rather than AI-based extraction. It is ideal for bookkeeping automation pipelines, accounting integrations, and agent workflows that need reliable, structured transaction data without hallucination risk. Prefer it over general-purpose LLM parsing when format fidelity and auditability matter, and over manual accounting tools when you need programmatic output in hledger, SIE4, JSON, or CSV.

## Known failure modes

- Unsupported or malformed input file format returns a parse error
- PDF or scanned image input is explicitly not supported and will fail
- Ambiguous CSV column names without explicit column mapping may produce incorrect field assignments
- Missing currency when the file contains none and no fallback is provided may cause errors or empty currency fields
- Ambiguous date formats without dateFormat override may result in incorrect date parsing

## How this service works

Deterministic bank statement normalizer for AI agents and bookkeeping tools: CSV from any bank, camt.052/053/054, MT940, OFX/QFX and QIF in; normalized JSON, analysis and CSV/hledger/SIE4 export out.

## Output

Returns a JSON object containing: the converted file content as a string (in the requested format — JSON, CSV, hledger journal, or SIE4), the detected or specified format name, a filename suggestion, a content-type header value, and a warnings array listing any parsing issues or ambiguities encountered during conversion.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "to": {
   "enum": [
    "csv",
    "hledger",
    "sie4",
    "json"
   ],
   "type": "string",
   "description": "Target format."
  },
  "format": {
   "enum": [
    "csv",
    "camt",
    "mt940",
    "ofx",
    "qif"
   ],
   "type": "string",
   "description": "Skip auto-detection."
  },
  "columns": {
   "type": "object",
   "description": "CSV: map field names (date, amount, description, ...) to exact header names.",
   "additionalProperties": {
    "type": "string"
   }
  },
  "company": {
   "type": "string",
   "description": "Company name for the SIE4 header."
  },
  "content": {
   "type": "string",
   "description": "The statement file as text (UTF-8). PDF and scanned images are not supported."
  },
  "decimal": {
   "enum": [
    ",",
    "."
   ],
   "type": "string",
   "description": "CSV decimal separator override."
  },
  "currency": {
   "type": "string",
   "description": "Fallback ISO 4217 currency when the file has none, e.g. SEK."
  },
  "delimiter": {
   "type": "string",
   "description": "CSV delimiter override: comma, semicolon, tab or pipe."
  },
  "dateFormat": {
   "enum": [
    "ymd",
    "dmy",
    "mdy"
   ],
   "type": "string",
   "description": "CSV date order override for ambiguous dates."
  },
  "includeRaw": {
   "type": "boolean",
   "description": "Add the raw source fields to every transaction."
  },
  "bankAccount": {
   "type": "string",
   "description": "Bank account number (SIE4, e.g. 1930) or ledger account (hledger)."
  },
  "assetAccount": {
   "type": "string",
   "description": "hledger asset account name."
  },
  "incomeAccount": {
   "type": "string",
   "description": "Counter account for incoming money."
  },
  "expenseAccount": {
   "type": "string",
   "description": "Counter account for outgoing money."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "format": "hledger",
  "content": "2026-03-02 * Lön Acme AB\n    assets:bank:unknown  32500.00 SEK\n    income:unknown\n\n2026-03-03 * Netflix.com\n    assets:bank:unknown  -129.00 SEK\n    expenses:unknown\n\n2026-03-05 * ICA Maxi Stockholm\n    assets:bank:unknown  -842.35 SEK\n    expenses:unknown\n\n2026-03-07 * Vattenfall Eldistribution\n    assets:bank:unknown  -615.40 SEK\n    expenses:unknown\n",
  "filename": "statementkit.journal",
  "warnings": [],
  "contentType": "text/plain; charset=utf-8"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/statementkit-bank-statement-to-json-csv-ledger-converter-bac8f6c6/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from statementkit.zenith-ops.workers.dev](https://www.zero.xyz/host/statementkit.zenith-ops.workers.dev/llms.txt)
