Skip to content

Reconciliation Rail

Transaction reconciliation, matching, and exception handling.

The Reconciliation Rail provides endpoints for reconciling transactions across systems, automated matching, and managing reconciliation exceptions.

/api/v1/reconciliation
POST /api/v1/reconciliation/jobs

Create a new reconciliation job.

Request Body:

{
"name": "Daily Bank Reconciliation",
"type": "BANK_STATEMENT",
"sourceSystem": "CORE_BANKING",
"targetSystem": "BANK_FEED",
"matchingRules": ["AMOUNT_EXACT", "DATE_RANGE", "REFERENCE_FUZZY"],
"dateRange": {
"from": "2025-01-14",
"to": "2025-01-14"
},
"tolerance": {
"amount": "0.01",
"dateDays": 1
}
}

Response:

{
"data": {
"jobId": "rec_abc123",
"status": "PENDING",
"createdAt": "2025-01-15T10:00:00Z"
}
}
POST /api/v1/reconciliation/jobs/:jobId/run

Execute reconciliation job.

Response:

{
"data": {
"jobId": "rec_abc123",
"status": "COMPLETED",
"summary": {
"sourceCount": 1500,
"targetCount": 1498,
"matchedCount": 1480,
"unmatchedSource": 20,
"unmatchedTarget": 18,
"matchRate": 0.987,
"totalAmount": "15000000.00",
"matchedAmount": "14750000.00"
},
"completedAt": "2025-01-15T10:05:00Z"
}
}
GET /api/v1/reconciliation/jobs/:jobId

Get job status and summary.

GET /api/v1/reconciliation/jobs

Query Parameters:

ParameterTypeDescription
statusstringFilter by status
typestringFilter by type
dateFromstringDate range start
GET /api/v1/reconciliation/jobs/:jobId/exceptions

Get unmatched items (exceptions).

Response:

{
"data": [
{
"exceptionId": "exc_123",
"type": "UNMATCHED_SOURCE",
"sourceRecord": {
"transactionId": "txn_abc",
"amount": "5000.00",
"date": "2025-01-14",
"reference": "PAY-001"
},
"possibleMatches": [
{
"recordId": "bank_xyz",
"amount": "5000.00",
"date": "2025-01-15",
"matchScore": 0.85
}
]
}
]
}
POST /api/v1/reconciliation/exceptions/:exceptionId/resolve

Resolve an exception.

Request Body:

{
"resolution": "MANUAL_MATCH",
"matchedRecordId": "bank_xyz",
"notes": "Date difference due to weekend processing"
}
POST /api/v1/reconciliation/statements

Upload a bank statement for reconciliation.

Request Body (multipart/form-data):

file: statement.csv
format: CSV
bankCode: SABB
accountNumber: 1234567890
POST /api/v1/reconciliation/rules

Create custom matching rule.

Request Body:

{
"name": "Amount + Reference Match",
"priority": 100,
"conditions": [
{ "field": "amount", "operator": "EQUALS" },
{ "field": "reference", "operator": "CONTAINS" }
],
"tolerance": {
"amountPercent": 0.01
}
}
TypeDescription
BANK_STATEMENTBank statement reconciliation
INTERCOMPANYIntercompany transactions
NOSTRONostro account reconciliation
CARD_SETTLEMENTCard settlement reconciliation
CUSTOMCustom reconciliation
OperatorDescription
EQUALSExact match
CONTAINSContains substring
FUZZYFuzzy matching
RANGEWithin range
REGEXRegular expression
TypeDescription
UNMATCHED_SOURCENo match in target
UNMATCHED_TARGETNo match in source
AMOUNT_MISMATCHAmounts differ
DATE_MISMATCHDates differ
DUPLICATEDuplicate records
ResolutionDescription
MANUAL_MATCHManual matching
IGNOREIgnore exception
ADJUSTCreate adjustment
INVESTIGATEMark for investigation
EventDescription
reconciliation.job.startedJob started
reconciliation.job.completedJob completed
reconciliation.exception.createdException found
reconciliation.exception.resolvedException resolved