Skip to main content
This guide walks through a complete reconciliation flow using Matcher. You will define a reconciliation context, configure sources and rules, ingest transaction data, run matching jobs, and review the results.

Prerequisites


Before you begin, ensure you have:
Matcher installed and running (Installation guide)
Access to the Matcher API with a valid authentication token
Sample transaction files (provided below)

Sample data


This example reconciles a bank statement against internal ledger records using two CSV files.

Bank_statement.csv

transaction_id,amount,currency,date,reference
BANK-001,1000.00,USD,2024-01-15,Invoice payment
BANK-002,250.50,USD,2024-01-16,Subscription fee
BANK-003,500.00,USD,2024-01-17,Consulting services
BANK-004,75.00,USD,2024-01-18,Office supplies

Ledger_transactions.csv

transaction_id,amount,currency,date,reference
LED-001,1000.00,USD,2024-01-15,Invoice payment
LED-002,250.50,USD,2024-01-16,Monthly subscription
LED-003,500.00,USD,2024-01-17,Consulting services
LED-005,120.00,USD,2024-01-19,Travel expenses
Expected outcome:
  • Three transaction pairs are reconciled
  • One bank transaction and one ledger transaction remain unmatched
  • Unmatched transactions are created as exceptions

Step 1: create a reconciliation context


Create a reconciliation context to define the reconciliation scope.

Request

cURL
curl -X POST https://api.matcher.example.com/v1/contexts \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "name": "Bank vs Ledger - January 2024",
   "type": "1:1",
   "description": "Monthly reconciliation of Chase Bank against Main Ledger"
 }'

Response

{
  "id": "ctx_abc123",
  "name": "Bank vs Ledger - January 2024",
  "type": "1:1",
  "description": "Monthly reconciliation of Chase Bank against Main Ledger",
  "created_at": "2024-01-20T10:00:00Z"
}
Store the context ID (ctx_abc123). It is required in subsequent steps.

Step 2: add data sources


Attach the data sources that will be reconciled within this context.

Bank source

Request

cURL
curl -X POST https://api.matcher.example.com/v1/contexts/ctx_abc123/sources \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "name": "Chase Bank Statement",
   "type": "bank",
   "field_map": {
     "transaction_id": "transaction_id",
     "amount": "amount",
     "currency": "currency",
     "date": "date",
     "reference": "reference"
   }
 }'

Response

{
  "id": "src_bank456",
  "name": "Chase Bank Statement",
  "type": "bank",
  "context_id": "ctx_abc123",
  "created_at": "2024-01-20T10:01:00Z"
}

Ledger source

Request

cURL
curl -X POST https://api.matcher.example.com/v1/contexts/ctx_abc123/sources \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "name": "Main Ledger",
   "type": "ledger",
   "field_map": {
     "transaction_id": "transaction_id",
     "amount": "amount",
     "currency": "currency",
     "date": "date",
     "reference": "reference"
   }
 }'

Response

{
  "id": "src_ledger789",
  "name": "Main Ledger",
  "type": "ledger",
  "context_id": "ctx_abc123",
  "created_at": "2024-01-20T10:02:00Z"
}

Step 3: create a match rule


Define how transactions are compared during reconciliation. This example applies an exact match on amount, currency, and date.

Request

cURL
curl -X POST https://api.matcher.example.com/v1/contexts/ctx_abc123/rules \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "name": "Exact Amount and Date",
   "type": "EXACT",
   "priority": 1,
   "parameters": {
     "fields": [
       "amount",
       "currency",
       "date"
     ]
   }
 }'

Response

{
  "id": "rule_exact001",
  "name": "Exact Amount and Date",
  "type": "EXACT",
  "priority": 1,
  "context_id": "ctx_abc123",
  "created_at": "2024-01-20T10:03:00Z"
}

Step 4: upload transaction files


Upload transaction data for each configured source.
Wait until both ingestion jobs complete before starting the matching job.

Step 5: run the matching job


Start with a dry run to preview reconciliation results without persisting changes.

Dry run

cURL
curl -X POST https://api.matcher.example.com/v1/jobs/run \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "context_id": "ctx_abc123",
   "mode": "DRY_RUN"
 }'

Review results

The dry run returns:
  • Proposed matches with confidence scores
  • Unmatched transactions classified as exceptions
  • A summary of reconciliation effectiveness

Step 6: commit results


If the previewed results are correct, rerun the job using COMMIT mode to finalize reconciliation.
cURL
curl -X POST https://api.matcher.example.com/v1/jobs/run \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
   "context_id": "ctx_abc123",
   "mode": "COMMIT"
 }'

Understanding results


After reconciliation:
  • High-confidence matches are automatically confirmed
  • Unmatched transactions are recorded as exceptions
  • All actions are persisted in the audit log
You can now review, route, or resolve exceptions as required.

Summary


This quick start covered the complete reconciliation lifecycle:
1

Context defined

Reconciliation scope established
2

Sources added

Bank and ledger sources configured
3

Rules created

Exact matching logic applied
4

Data ingested

Transaction files uploaded
5

Matching executed

Dry run reviewed and results committed
6

Exceptions identified

Unmatched transactions isolated

Next steps