x-webhook-signature header.
Webhook subscription endpoints use API key authentication. Send your API key in the
x-api-key header. They need API access enabled for the account (otherwise 403 with API_ACCESS_DISABLED) and the can_manage_api_keys permission.Subscribe
Create a subscription with the URL that should receive webhook events. The URL must resolve to a public address: private, loopback and other internal ranges are rejected.GET /webhooks after creation as the source for the usable plaintext signing secret. Do not use the create or update response as the source of truth for signature verification.
Only one subscription is allowed per account. Creating a second subscription returns 404 with Account Already subscribed.
Manage a subscription
Get the current subscription and plaintext signing secret:result is an empty array.
Store secret server-side. Use it to verify the x-webhook-signature header on every delivery.
Update the destination URL or pause delivery:
status: "disabled" to pause delivery. Disabled subscriptions do not receive new webhook events.
If the account has no subscription yet, PATCH /webhooks creates one and returns it like POST /webhooks. When a subscription already exists, a successful update returns:
Delivery format
Finup sends aPOST request to your subscription URL.
HMAC-SHA256(JSON.stringify(body), secret) encoded as lowercase hex. Verify against the exact JSON body Finup sent.
2xx response within 10 seconds when your system has accepted the event. Redirects are not followed, so a 3xx counts as a failed attempt. Delivery history keeps the status code and time of every attempt.
Retries
Finup sends the first attempt immediately. If your endpoint returns a non-2xx response or the request fails, the event remains pending and is retried.
After the final retry fails, the delivery status becomes
fail. A successful retry changes the delivery status to success.
Your endpoint should be idempotent. Finup may deliver the same event more than once when a previous attempt failed or timed out.
Delivery history
Use delivery history to inspect sent events, retry status, and the status code of each attempt.
Example response:
Event types
Every event has awebhook_type field. Use it to route the payload.
Backend currently emits CardUpdate. The Webhooks microservice also uses the same account subscription for Transaction, Deposit, Otp, and OtpWallet.
CardUpdate
Sent when the Backend service updates card status data.Transaction
Sent when a card transaction is created or updated.status, side and type use the same values as POST /transactions.
Deposit
Sent when a crypto or invoice deposit is approved, when a deposit is blocked by the AML check (Declined), and when a blocked deposit has been refunded (Canceled).