Blnk Finance · AsyncAPI Specification

Blnkfinance Webhooks

Version

View Spec View on GitHub FintechFinancial-ServicesLedgerdouble-entry-accountingPaymentsWalletsLendingBanking InfrastructureOpen-SourceMCPAI AgentsDeveloper ToolsAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-27'
method: searched
source: >-
  https://docs.blnkfinance.com/webhooks/overview, https://docs.blnkfinance.com/webhooks/events,
  https://docs.blnkfinance.com/webhooks/global-webhooks,
  https://docs.blnkfinance.com/webhooks/transaction-hooks,
  https://docs.blnkfinance.com/advanced/configuration/webhooks
asyncapi_spec:
  published: false
  probed:
  - {url: 'https://docs.blnkfinance.com/asyncapi.yaml', status: 404}
  - {url: 'https://docs.blnkfinance.com/asyncapi.json', status: 404}
  note: >-
    Blnk publishes no AsyncAPI document. Its event surface is real and well documented in prose, so the
    catalog below is captured verbatim from the docs rather than being synthesised into an AsyncAPI
    file API Evangelist would have authored. Emitting a Webhooks pointer, not an AsyncAPI one.
event_surface:
  kinds:
  - name: Global webhooks
    since: 0.8.4
    configuration: Blnk Core configuration (BLNK_WEBHOOK_URL / notification.webhook in blnk.json)
    scope: All named lifecycle events, ledger-wide
    docs: https://docs.blnkfinance.com/webhooks/global-webhooks
  - name: Transaction hooks
    configuration: Hooks API (create/update/list/delete)
    scope: Transaction events only
    types: [PRE_TRANSACTION, POST_TRANSACTION]
    management_auth: master key only (since Core 0.14.3; scoped keys get AUTH_MASTER_KEY_REQUIRED 403)
    docs: https://docs.blnkfinance.com/webhooks/transaction-hooks
  transport: HTTPS POST to a customer-configured endpoint
  payload: 'JSON with an `event` discriminator and a `data` object'
security:
  signed_since: 0.13.0
  algorithm: HMAC-SHA256, hex-encoded
  signed_payload: timestamp + "." + rawRequestBody
  secret: BLNK_SERVER_SECRET_KEY (also the master API key)
  headers:
  - {header: X-Blnk-Signature, description: Hex-encoded HMAC-SHA256 of the signed payload}
  - {header: X-Blnk-Timestamp, description: Unix timestamp in seconds, used in the signed payload and for replay protection}
  - {header: X-Hook-ID, description: Hook identifier (transaction hooks only)}
  - {header: X-Hook-Type, description: PRE_TRANSACTION or POST_TRANSACTION (transaction hooks only)}
  custom_headers:
    supported: true
    config: BLNK_WEBHOOK_HEADERS (JSON-encoded object) or notification.webhook.headers in blnk.json
  verification_warning: >-
    Verify against the EXACT raw request bytes before JSON parsing; a re-serialised body fails
    verification.
  replay_protection: via X-Blnk-Timestamp
event_count: 15
events:
- {event: ledger.created, resource: ledger, description: When a ledger is created.}
- {event: balance.created, resource: balance, description: When a balance is created.}
- {event: balance.monitor, resource: balance-monitor, description: When a balance monitor is triggered because its conditions are met.}
- {event: transaction.applied, resource: transaction, description: When a transaction is applied or committed.}
- {event: transaction.inflight, resource: transaction, description: When a transaction is inflight.}
- {event: transaction.void, resource: transaction, description: When an inflight transaction is voided.}
- {event: transaction.scheduled, resource: transaction, description: When a transaction is successfully scheduled.}
- {event: transaction.rejected, resource: transaction, description: When a transaction is rejected.}
- {event: bulk_transaction.applied, resource: transaction, description: When all items in a bulk transaction have been applied.}
- {event: bulk_transaction.inflight, resource: transaction, description: When all items in a bulk transaction are successfully inflight.}
- {event: bulk_transaction.failed, resource: transaction, description: When a bulk transaction fails.}
- {event: identity.created, resource: identity, description: When an identity is created.}
- {event: reconciliation.completed, resource: reconciliation, since: 0.15.0, description: When a reconciliation run completes successfully.}
- {event: reconciliation.failed, resource: reconciliation, since: 0.15.0, description: When a reconciliation run fails.}
- {event: system.error, resource: system, since: 0.12.0, description: 'When a system error occurs (e.g. duplicate reference).'}
example_payload:
  event: system.error
  data:
    error: reference 0x8fa3c1a2b7d9_q has already been used
    time: '2025-12-08T10:30:45Z'
consumer_guidance:
  note: >-
    Blnk's own agent skill blnk-webhooks tells consumers to verify the signature, allowlist the events
    they need (especially transaction.applied / transaction.rejected), and dedupe by event/transaction
    id before updating state.
  critical: >-
    Reconciliation start endpoints return only reconciliation_id since 0.15.0 -- status, match counts
    and timestamps arrive ONLY via the reconciliation.completed webhook. A consumer that does not
    subscribe cannot learn the outcome of a reconciliation run.
alerts_note: >-
  Blnk Cloud additionally exposes alert webhooks (ALERT_WEBHOOK_*) for Watch verdicts; see
  https://docs.blnkfinance.com/cloud/alerts.

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/blnkfinance-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.