API reference · Pricing, reporting & reconciliation

Reconciliation deliveries

POST Deliver a signed statement file

POST /reconciliation/entity/{code}/channel/{channelKey}/delivery

The detached signature is checked over the whole file before a byte of it is parsed, and a file that does not verify is stored in quarantine with the reason named rather than read to see what it claims - a parser is an attack surface and an unverified delivery is somebody else's input. Delivering identical bytes twice produces one ingestion: a finance team that cannot tell whether an upload worked uploads it again, and that is correct behaviour. A 200 here means accepted, not reconciled - the response says whether it verified, whether it was a duplicate, and if it was quarantined, why.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
Content-Typemultipart/form-data

Path parameters

Name
code
channelKey

Query parameters

NameDefault
keyIdOptional
signatureOptional
periodStartOptional
periodEndOptional
statementSequenceOptional
declaredRowCountOptional
declaredOpeningBalanceOptional
declaredClosingBalanceOptional
declaredTotalCreditsOptional
declaredTotalDebitsOptional

Example

Request body: object · Response: GenericResponseDeliveryResponse

curl -X POST "https://api.bridgemoni.com/reconciliation/entity/value/channel/value/delivery" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -F "file=@./document.pdf"

Responses

StatusWhen
200Delivery accepted

POST Deliver a webhook body

POST /reconciliation/entity/{code}/channel/{channelKey}/webhook

The HMAC is verified against the exact bytes that arrived, never against the body re-serialised from a parsed object - re-serialising first means the signature covers something the sender never sent, which turns verification into decoration. The signature carries a timestamp and a body outside the channel's freshness window is quarantined as a replay: a signature with no freshness bound can be replayed forever. A stream like this is always contributing and never authoritative, because nothing in it says how many events there should have been.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live
X-Reconciliation-Signature
Content-Typeapplication/json

Path parameters

Name
code
channelKey

Example

Request body: string · Response: GenericResponseDeliveryResponse

curl -X POST "https://api.bridgemoni.com/reconciliation/entity/value/channel/value/webhook" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV" \
  -H "Content-Type: application/json" \
  -d '"string"'

Responses

StatusWhen
200Delivery accepted

GET List an entity's ingestions

GET /reconciliation/entity/{code}/ingestions

One row per distinct delivery, newest first, with the key that verified it. A delivery re-sent with identical bytes does not appear twice.

Headers

NameNotes
AuthorizationBearer token
X-TenantYour tenant
X-Environmenttest or live

Path parameters

Name
code

Example

Response: GenericResponseListDeliveryResponse

curl -X GET "https://api.bridgemoni.com/reconciliation/entity/value/ingestions" \
  -H "Authorization: Bearer $BRIDGEMONI_TOKEN" \
  -H "X-Tenant: $BRIDGEMONI_TENANT" \
  -H "X-Environment: $BRIDGEMONI_ENV"

Responses

StatusWhen
200Ingestions retrieved successfully

Generated from the OpenAPI document. Branch on the HTTP status: there is no machine-readable error code on the wire. Errors