Process a file
CSV, TXT or text-based PDF · up to 10 MBDrop a file here or click to browse
Every run is recorded with full provenance.
Transformation Sample
Validated1. Messy bank CSV
1日付,摘要,出金,入金,残高
22024/05/01, 振込 カヤマダデンキ ,,125000,1234567
301/05/2024, ATM Withdrawal, -45000,,1189567
42024-05-02, Check No.12345, -12345,,1177222
5, Interest, ,321,1177543
603/05/2024, 電気料金, -8210,,1169333
Encoding detectedShift_JIS → UTF-8
Columns mapped5/5 mapped to ledger schema
Dates normalizedMixed formats → ISO 8601
Amounts as minor unitsJPY · integer, never float
2. Validated JSON
1{ "transaction_date": "2024-05-01",
2 "description": "振込 ヤマダデンキ",
3 "amount": "125000.00", "amount_minor": 125000,
4 "currency": "JPY", "credit": "125000.00",
5 "balance": "1234567.00", "source_row": 2,
6 "validation_status": "valid" }
Review queue
View allRecent runs
View all runsAPI
View docscurl https://apodexa.net/api/v1/normalize_bank_csv \
-H "Authorization: Bearer $APODEXA_KEY" \
-F "file=@bank_202405.csv" \
-F "locale=ja-JP" -F "currency=JPY"
Validation & confidenceEvery field scored and explained
ProvenanceSee exactly where every value came from
Review workflowUncertain fields routed for human review
Structured recoveryGet clean data even from messy sources
All runs
Click a row for full validation, provenance and exportReview queue
Files with uncertain fields (confidence below 0.75) or failed checks. Confirm a value to send it back through validation, or reject the file.
Templates
Saved column mappings and validation policies. Versions are immutable — a new save creates a new version.
API
All processing is available programmatically. Authenticate with a session cookie or Authorization: Bearer <api_key>. Full reference at /docs.
Endpoints
GET/api/v1/healthLiveness & version
POST/api/v1/detect_file_typeSniff file type
POST/api/v1/repair_csvFix broken CSV structure
POST/api/v1/normalize_bank_csvBank CSV → ledger
POST/api/v1/extract_invoiceInvoice → structured
GET/api/v1/runsList processed runs
GET/api/v1/runs/{id}/exportExport CSV or JSON
Response envelope
Every tool response — success or rejection — uses the same shape. HTTP stays 200 for processable-but-rejected files; error is populated and validation.passed is false.
{
"data": {}, // tool output
"confidence": {}, // per-field heuristic score 0–1
"validation": { "passed": true, "checks": [] },
"provenance": {}, // parser, mapping, transformations
"uncertain_fields": [], // below 0.75 threshold
"repair_suggestions": [],
"output_files": {},
"error": null
}
Settings
API key
Use as Authorization: Bearer <key> for programmatic access. Provisioned server-side.
sk_live_••••••••••••••••••••••••
API status
Checking…
Session
End your session on this device.