Supported Events
Configure one webhook endpoint per environment from the dashboard and opt in to any combination of events:- Transaction Status Updates – Deposit, withdrawal, or transfer status changes (e.g.,
PENDING→COMPLETED) - Payment Confirmations – Real-time acknowledgements when a payment settles on- or off-chain
- KYC Status Changes – Triggers when a customer’s verification outcome changes
- System Events – Low-volume operational notices and maintenance alerts
Event Types
The following event types are available: Transaction Events:transaction.deposit.status.updated- Deposit transaction status changedtransaction.withdrawal.status.updated- Withdrawal transaction status changedtransaction.onramp.status.updated- On-ramp transaction status changedtransaction.offramp.status.updated- Off-ramp transaction status changedtransaction.status.updated- (Deprecated) Generic transaction status update
payment.confirmed- Payment has been confirmed
kyc.status.changed- Customer verification status changed
system.event- Operational notices and maintenance alerts
Payload Format
Webhooks are sent as HTTPPOST requests with a JSON payload. The request body includes the event name, data payload, and a convenience copy of the signature. The canonical signature is delivered in the X-Kotani-Signature header.
Tip: The payload’s signature field is provided for quick sanity checks, but the header is the source of truth for verification.
Verifying Signatures
Every payload is signed with your dashboard-configured webhook secret. Validate the signature before acting on the event:- Parse the JSON payload from the request body.
- Remove the
signaturefield from the parsed payload. - Compute an HMAC-SHA256 digest of the remaining payload:
sha256=HMAC(secret, JSON.stringify(payloadWithoutSignature)). - Compare the digest with the
X-Kotani-Signatureheader using a timing-safe comparison.
Important: The signature is computed from only theeventanddatafields. You must exclude thesignaturefield itself when verifying.
Node.js helper
Example usage
Configuring Webhooks
- Log into the Kotani Pay dashboard.
- Navigate to Settings → Webhooks.
- Provide a publicly reachable HTTPS URL.
- Select the events you want to subscribe to.
- Copy or generate a signing secret and store it securely (e.g., an environment variable).
- Save your changes.