Documentation
Back to Home

Reconciler Documentation

Automatically match transactions across bank accounts and ledgers with AI-powered reconciliation.

Overview

The Bank Statement Reconciler replaces manual line-by-line checking with intelligent auto-matching. Upload bank statements and ledger data, and the engine matches transactions using advanced matching algorithm, date proximity analysis, and amount tolerance — achieving 99.7% auto-match rates.

How It Works

Upload your bank statement (CSV or Excel) and your ledger export. The system normalises formats, parses transactions, and runs the matching engine. Results show matched pairs, unmatched items, and flagged exceptions — all with scores and audit trails.

API Reference (Developers)

Automatically reconcile bank statements against ledger records via our REST API. Integrate and call the endpoint from your app and get matched and unmatched transactions in the response.

You can create a developer account to get an api key fromhere.

POST https://server.gimele.com/api/v1/reconcile

Headers

Authorization: Bearer <your-api-key>
Content-Type: multipart/form-data

Form Data Parameters

ParameterTypeRequiredDescription
bank_statementFileYesExcel (.xlsx, .xls) or CSV file
ledgerFileYesExcel (.xlsx, .xls) or CSV file
bank_desc_columnstringNoColumn name for descriptions (default: NARRATION)
curl -X POST https://server.gimele.com/api/v1/reconcile \
  -H "Authorization: Bearer $GIMELE_API_KEY" \
  -F "bank_statement=@./bank-statement.xlsx" \
  -F "ledger=@./ledger.xlsx" 

Success Response (200 OK)

{
"summary": {
"total_bank_items_debit": 124,
"total_bank_items_credit": 98,
"total_ledger_items_debit": 115,
"total_ledger_items_credit": 107,
"matched_count": 215,
"unmatched_bank_count": 7,
"unmatched_ledger_count": 7,
"bank_statement_reversal_count": 2,
"ledger_reversal_count": 1
"matched_transactions": [
{
"bank_description": "POS PURCHASE NOVA MART LAGOS",
"ledger_narration": "POS/NOVA MART/LAGOS",
"match_score": 92,
"bank_amount": 15500.00,
"ledger_amount": 15500.00,
"bank_date": "2026-06-12",
"ledger_date": "2026-06-12"
],
"unmatched_bank_items_debit": [...],
"unmatched_bank_items_credit": [...],
"unmatched_ledger_items_debit": [...],
"unmatched_ledger_items_credit": [...],
"bank_statement_reversals": [...],
"ledger_reversals": [...]
}

Error Responses

400 Bad Request — Invalid File Type
{
"detail": "Files must be Excel (.xlsx, .xls) or CSV (.csv) files"
}
→ Fix: Upload .xlsx, .xls, or .csv files only
401 Unauthorized — Invalid or Missing API Key
{
"detail": "Invalid or expired API key"
}
→ Fix: Verify your API key is correct and not expired; regenerate from your dashboard
422 Unprocessable Entity — Column Not Found
{
"detail": "No matching column found. Tried 'NARRATION' and patterns: [...]"
}
→ Fix: 1. Ensure there is no row above the column headers, the column headers should be in the first row (row 1), if not, upload the file again with no row above the column headers.

2. Ensure your files contain a description/narration column (e.g. NARRATION, DESCRIPTION, TRANSACTION_DETAILS) or specify via bank_desc_column
200 OK — No matching column
{
"detail": "the reconciliator could not match bank statement with any of the transaction in the gl_journal, returned 0 matched items "
}
→ Fix: Ensure debit and credit column cells values are numeric (e.g. 1000, 2000, 3000) and not strings, as this can cause issues with the matching algorithm.
500 Internal Server Error — Processing Failure
{
"detail": "Error processing files: [error details]"
}
→ Fix: Check that files are not corrupted, use UTF-8 encoding for CSVs, and ensure date/amount columns contain valid values