fedhabase reads bank and mobile-money statements and returns structured, reconciled transactions — starting with M-Pesa, generalising to East African banks and wallets.
Layout detected, not declared. Consumer and merchant M-Pesa today.
Every statement reconciles to the cent, or it does not pass.
Counterparties, categories and recurring obligations. In progress.
Account-level features for affordability and risk. Planned.
Most extraction tools hand you rows and leave you to trust them. A statement is self-checking: every balance follows from the one before it, and the provider prints its own totals on the page.
fedhabase walks the balance chain and cross-checks the declared summary before returning anything. A statement whose arithmetic does not hold is flagged, with the rows that broke it.
Parser bugs and edited documents both fail the same check.
Every provider and layout normalises to the same transaction shape. Amounts are exact decimals, never floats; direction carries the sign.
A document we cannot read is refused with a reason — unknown layout, ambiguous layout, scanned, or does not reconcile. Never a guess.
Submit a statement, get a job. A statement with two thousand rows is an ordinary case, not a timeout.
Providers change templates without notice. Old layouts stay pinned so a statement parsed last year still reproduces.
Service-to-service, with an API key. Full reference at api.fedhabase.auni.ai.
# Submit — returns a job id immediately curl -H "X-API-Key: $FEDHA_KEY" \ -F "file=@statement.pdf" \ -F "account_id=acct-1" \ https://api.fedhabase.auni.ai/v1/statements # Poll, then fetch the ledger curl -H "X-API-Key: $FEDHA_KEY" \ https://api.fedhabase.auni.ai/v1/statements/$JOB/ledger