Reconciliation runs
- GET
/reconciliation/definition/{code}/runsList a definition's runs - GET
/reconciliation/entity/{code}/stream-exceptionsList an entity's stream exceptions - POST
/reconciliation/entity/{code}/sweep-stale-streamsRaise an exception for every stale stream on an entity - GET
/reconciliation/entity/{code}/watermarksRead an entity's stream watermarks - POST
/reconciliation/runOpen a run over a period - GET
/reconciliation/run/{reference}Read a run - GET
/reconciliation/run/{reference}/deltaRead what a corrected run changed - GET
/reconciliation/stream-exceptionsList every unresolved stream exception
GET List a definition's runs
GET /reconciliation/definition/{code}/runs
Newest first, including blocked and superseded ones - a period that failed to reconcile is part of the record, not something to hide until it succeeds.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
code |
Example
Response: GenericResponseListRunResponse
curl -X GET "https://api.bridgemoni.com/reconciliation/definition/value/runs" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"definitionCode": "string",
"currencyCode": "string",
"periodStart": "string",
"periodEnd": "string",
"status": "string",
"blockedReason": "string",
"blockedSide": "string",
"blockedDetail": "string",
"completenessAsserted": true,
"openedAt": "string",
"gatedAt": "string",
"entriesTotal": 0,
"matchedEntries": 0,
"matchedValue": "string",
"unmatchedEntries": 0,
"unmatchedValue": "string",
"breakCount": 0,
"matchedAt": "string",
"supersedesRunReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sides": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sideKey": "string",
"entityCode": "string",
"isAuthority": true,
"stageOrder": 0,
"authoritativeChannelKey": "string",
"completenessAsserted": true,
"declaredCount": 0,
"acceptedCount": 0,
"balanceOnly": true,
"declaredNetMovement": "string",
"rowsExamined": 0,
"declaredTotalCredits": "string",
"declaredTotalDebits": "string",
"summedCredits": "string",
"summedDebits": "string",
"declaredOpeningBalance": "string",
"declaredClosingBalance": "string",
"previousClosingBalance": "string",
"statementSequence": "string",
"blockedReason": "string",
"blockedDetail": "string"
}
]
}
],
"description": "Runs retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Runs retrieved successfully |
GET List an entity's stream exceptions
GET /reconciliation/entity/{code}/stream-exceptions
MISSING_ON_STREAM is a record the entity's own file names that no webhook ever delivered - the only honest monitor of webhook delivery health, because an endpoint that drops one delivery in a thousand is invisible until something counts what should have arrived. MISSING_ON_FILE is the reverse: we hold a record the entity does not.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
code |
Example
Response: GenericResponseListStreamExceptionResponse
curl -X GET "https://api.bridgemoni.com/reconciliation/entity/value/stream-exceptions" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"runReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"entityCode": "string",
"channelKey": "string",
"exceptionKind": "string",
"entryReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"externalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"amount": "string",
"valueDate": "string",
"detail": "string",
"raisedAt": "string",
"resolvedAt": "string",
"resolvedBy": "string"
}
],
"description": "Stream exceptions retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Stream exceptions retrieved successfully |
POST Raise an exception for every stale stream on an entity
POST /reconciliation/entity/{code}/sweep-stale-streams
Run before a period is scheduled, never after it closes: a stale stream discovered afterwards is a clean certificate over a dead endpoint. Raising twice for the same silent channel does nothing - the exception stays open until somebody resolves it.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
code |
Example
Response: GenericResponseInteger
curl -X POST "https://api.bridgemoni.com/reconciliation/entity/value/sweep-stale-streams" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": 0,
"description": "Stale streams swept successfully"
} Responses
| Status | When |
|---|---|
200 | Stale streams swept successfully |
GET Read an entity's stream watermarks
GET /reconciliation/entity/{code}/watermarks
When each stream channel last delivered anything, against the heartbeat it promised. A channel that has delivered nothing since Tuesday is either an entity with no transactions or an integration that is down, and those look identical until a heartbeat says which was expected. The figure is derived from the deliveries themselves rather than accumulated in a column, so there is nothing to drift.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
code |
Example
Response: GenericResponseListWatermarkResponse
curl -X GET "https://api.bridgemoni.com/reconciliation/entity/value/watermarks" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"entityCode": "string",
"channelKey": "string",
"lastDeliveryAt": "string",
"heartbeatMinutes": 0,
"silentMinutes": 0,
"healthy": true
}
],
"description": "Watermarks retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Watermarks retrieved successfully |
POST Open a run over a period
POST /reconciliation/run
Every side is checked for completeness before anything is compared: declared row counts against what we accepted, declared control totals against what the records sum to, this statement's opening balance against the last one's closing, and a gap in a statement sequence. If any side fails, the run is BLOCKED and matches nothing at all - reconciling what is there would produce a queue of breaks that are artefacts of the missing data, mixed with real ones and indistinguishable from them. The gate that matters most is EXAMINED_NOTHING: a comparison of zero against zero reports a clean period, and looks exactly like success.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Content-Type | application/json |
Example
Request body: OpenRunRequest · Response: GenericResponseRunResponse
curl -X POST "https://api.bridgemoni.com/reconciliation/run" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" \
-H "Content-Type: application/json" \
-d '{
"definitionCode": "string",
"periodStart": "string",
"periodEnd": "string",
"supersedesRunReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
}' {
"definitionCode": "string",
"periodStart": "string",
"periodEnd": "string",
"supersedesRunReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e"
} {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"definitionCode": "string",
"currencyCode": "string",
"periodStart": "string",
"periodEnd": "string",
"status": "string",
"blockedReason": "string",
"blockedSide": "string",
"blockedDetail": "string",
"completenessAsserted": true,
"openedAt": "string",
"gatedAt": "string",
"entriesTotal": 0,
"matchedEntries": 0,
"matchedValue": "string",
"unmatchedEntries": 0,
"unmatchedValue": "string",
"breakCount": 0,
"matchedAt": "string",
"supersedesRunReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sides": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sideKey": "string",
"entityCode": "string",
"isAuthority": true,
"stageOrder": 0,
"authoritativeChannelKey": "string",
"completenessAsserted": true,
"declaredCount": 0,
"acceptedCount": 0,
"balanceOnly": true,
"declaredNetMovement": "string",
"rowsExamined": 0,
"declaredTotalCredits": "string",
"declaredTotalDebits": "string",
"summedCredits": "string",
"summedDebits": "string",
"declaredOpeningBalance": "string",
"declaredClosingBalance": "string",
"previousClosingBalance": "string",
"statementSequence": "string",
"blockedReason": "string",
"blockedDetail": "string"
}
]
},
"description": "Run opened successfully"
} Responses
| Status | When |
|---|---|
200 | Run opened successfully |
GET Read a run
GET /reconciliation/run/{reference}
The run and every side of it, with what each side declared beside what we actually hold. completenessAsserted is false where a side has no authoritative channel - the run still executes, and the certificate says so on its face. That is the difference between a limitation and a lie.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseRunResponse
curl -X GET "https://api.bridgemoni.com/reconciliation/run/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"definitionCode": "string",
"currencyCode": "string",
"periodStart": "string",
"periodEnd": "string",
"status": "string",
"blockedReason": "string",
"blockedSide": "string",
"blockedDetail": "string",
"completenessAsserted": true,
"openedAt": "string",
"gatedAt": "string",
"entriesTotal": 0,
"matchedEntries": 0,
"matchedValue": "string",
"unmatchedEntries": 0,
"unmatchedValue": "string",
"breakCount": 0,
"matchedAt": "string",
"supersedesRunReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sides": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"sideKey": "string",
"entityCode": "string",
"isAuthority": true,
"stageOrder": 0,
"authoritativeChannelKey": "string",
"completenessAsserted": true,
"declaredCount": 0,
"acceptedCount": 0,
"balanceOnly": true,
"declaredNetMovement": "string",
"rowsExamined": 0,
"declaredTotalCredits": "string",
"declaredTotalDebits": "string",
"summedCredits": "string",
"summedDebits": "string",
"declaredOpeningBalance": "string",
"declaredClosingBalance": "string",
"previousClosingBalance": "string",
"statementSequence": "string",
"blockedReason": "string",
"blockedDetail": "string"
}
]
},
"description": "Run retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Run retrieved successfully |
GET Read what a corrected run changed
GET /reconciliation/run/{reference}/delta
Compares a superseding run against the one it replaced and says which differences the correction explained, which appear only in the corrected data, and which survive and still need somebody. A corrected statement that simply replaced the earlier report would leave a reader unable to tell whether the correction fixed the problem or moved it, and the earlier certificate is kept precisely so this comparison is possible. A run that is the first over its period has nothing to compare with and says so rather than inventing a baseline.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Path parameters
| Name |
|---|
reference |
Example
Response: GenericResponseRunDeltaResponse
curl -X GET "https://api.bridgemoni.com/reconciliation/run/b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e/delta" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": {
"supersedingRunReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"supersededRunReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"entriesBefore": 0,
"entriesAfter": 0,
"matchedBefore": 0,
"matchedAfter": 0,
"matchedValueBefore": "string",
"matchedValueAfter": "string",
"breaksBefore": 0,
"breaksAfter": 0,
"clearedByTheRerun": [
{
"breakReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"category": "string",
"entityCode": "string",
"externalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"amount": "string",
"currencyCode": "string",
"status": "string"
}
],
"raisedByTheRerun": [
{
"breakReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"category": "string",
"entityCode": "string",
"externalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"amount": "string",
"currencyCode": "string",
"status": "string"
}
],
"unchanged": [
{
"breakReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"category": "string",
"entityCode": "string",
"externalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"amount": "string",
"currencyCode": "string",
"status": "string"
}
],
"narrative": "string"
},
"description": "Delta retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Delta retrieved successfully |
GET List every unresolved stream exception
GET /reconciliation/stream-exceptions
The operations queue for delivery health across all entities.
Headers
| Name | Notes |
|---|---|
Authorization | Bearer token |
X-Tenant | Your tenant |
X-Environment | test or live |
Example
Response: GenericResponseListStreamExceptionResponse
curl -X GET "https://api.bridgemoni.com/reconciliation/stream-exceptions" \
-H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
-H "X-Tenant: $BRIDGEMONI_TENANT" \
-H "X-Environment: $BRIDGEMONI_ENV" {
"data": [
{
"reference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"runReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"entityCode": "string",
"channelKey": "string",
"exceptionKind": "string",
"entryReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"externalReference": "b3f1c2d4-5e6a-4b7c-8d9e-0f1a2b3c4d5e",
"amount": "string",
"valueDate": "string",
"detail": "string",
"raisedAt": "string",
"resolvedAt": "string",
"resolvedBy": "string"
}
],
"description": "Stream exceptions retrieved successfully"
} Responses
| Status | When |
|---|---|
200 | Stream exceptions retrieved successfully |
Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors