BanQu · AsyncAPI Specification
Banqu Webhooks
Version
View Spec
View on GitHub
supply-chaintraceabilitysustainabilityesgagricultureprocurementcomplianceblockchaineudrcarbon-accountingrecyclingsmallholder-farmersdistributed-ledgersupplier-managementAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-06'
method: derived
source: openapi/banqu-openapi-original.json
docs: https://api.banqu.app/openapi
asyncapi_published: false
webhook_catalog_published: false
summary: >-
BanQu publishes no AsyncAPI document and no fixed webhook catalog. What it does publish, in the
live OpenAPI, is a customer-configurable outbound-HTTP surface: Smart Contracts are described as
"Automation workflows that react to system events", and one of the step types a workflow may
contain is a `request` step that issues an arbitrary HTTP call to a customer-supplied URL with
customer-supplied headers. That is a webhook in effect - the event source is BanQu, the receiver is
the integrator - but the event vocabulary is discovered at runtime, not from a document.
surface:
kind: configurable-outbound-request
resource: Smart Contracts
create: POST /smart-contracts
read: GET /smart-contracts, GET /smart-contracts/{contractId}
update: PUT /smart-contracts/{contractId}
delete: DELETE /smart-contracts/{contractId}
history: GET /smart-contracts/{contractId}/history
restore: POST /smart-contracts/{contractId}/restore
trigger_catalog:
discovery: GET /smart-contracts/triggers
detail: GET /smart-contracts/triggers/{triggerId}
schema: SmartContractTrigger (id, title)
published_list: null
gated: true
note: >-
The set of system events that can start a workflow is returned by the API at runtime and is
authentication-gated (401/403 without a token). The spec declares only the trigger envelope, not
the event names, so the event vocabulary cannot be enumerated from public material. It is NOT
fabricated here.
action_catalog:
discovery: GET /smart-contracts/actions
detail: GET /smart-contracts/actions/{actionId}
filter: '?type=read|write'
schema: SmartContractAction (id, title, groups[], description)
note: >-
An action id is a base64-encoded JSON object of the form {method, path} naming an OpenAPI
endpoint to execute - so the action catalog is a projection of the same 191 REST operations.
step_types:
- type: filter
schema: WorkflowFilter
description: Conditional gate expressed as an expression over workflow variables.
- type: uniqueness-filter
schema: WorkflowUniquenessFilter
description: Drops repeats within the workflow run.
- type: map
schema: WorkflowMapping
description: Maps trigger payload fields onto the input of the next step.
- type: action
schema: WorkflowAction
description: >-
Executes a BanQu OpenAPI endpoint; `action` is base64 {method, path}. This is the internal
(inbound) branch.
- type: request
schema: WorkflowRequest
description: >-
Issues an outbound HTTP call. Fields - method (get|list|post|put|patch|delete|head|options),
url (string), headers (map of string). This is the branch that makes Smart Contracts function
as webhooks toward an integrator's endpoint.
required: [type, method, url]
security:
workflow_identity:
field: SmartContract.authToken
note: >-
A workflow may carry a write-only authToken it runs as; authTokenSig is returned read-only for
presence/uniqueness validation. Validation Workflows additionally expose `authenticatedAs`
(user + account display name) so an operator can see which identity a workflow acts as.
receiver_verification:
signature_header: null
hmac: false
replay_protection: null
note: >-
No inbound signature scheme is documented for the outbound `request` step - the integrator
controls the headers, so any shared-secret verification must be configured by the customer.
related_automation:
- resource: Data Processors
paths: [/data-processors, '/data-processors/{processorId}/process', '/data-processors/{processorId}/stop', '/data-processors/{processorId}/validate']
note: >-
Asynchronous ingestion of custom CSV/XLSX supplier files through the same WorkflowSteps machinery.
POST .../process is the only 202-Accepted-shaped path family in the API, and completion is
polled rather than pushed.
- resource: Validation Workflows
paths: [/validation-workflows]
note: >-
Runs custom validation before any write action identified by validatedActionId - synchronous, not
an event surface, but built from the same steps.
- resource: Notifications
paths: [/notifications]
note: >-
Read-only notification feed, polled. The reusable `preventNotify` query parameter suppresses
notification side effects on writes.
gaps:
- No AsyncAPI document.
- No published list of event/trigger names; the catalog is auth-gated and runtime-only.
- No delivery guarantees, retry policy, or dead-letter behaviour documented.
- No webhook signature/verification scheme.