Redirect Handling
After bank authentication, the customer is redirected to the URL you specified when creating the payment request:- Success: redirected to
success_url - Failure / Cancel: redirected to
failure_url
Webhook Setup
Register and Obtain a Signing Secret
Webhook Payload
Quidkey sends a Stripe-style envelope so existing tooling can be reused.Fee information is only included for successful payments (
status: "succeeded"). Failed or cancelled payments do not include fees.HTTP Headers
| Header | Purpose |
|---|---|
X-Signature | t=<unix-ts>,v1=<hex-hmac> |
X-Timestamp | Unix epoch seconds |
X-Client-Id | Your client_id |
"${timestamp}.${raw_body}", keyed by your webhook signing secret.
Verify Signatures
TheX-Signature header lets you confirm that the webhook came from Quidkey and that the payload was not tampered with.
- Using Stripe Helper
- Custom Implementation
Process Webhook Events
Retry behavior: Quidkey retries for up to 3 days with exponential backoff until your endpoint returns any
2xx status. Events may be delivered out of order or duplicated, so de-duplicate using the top-level id field.Fee Handling
Quidkey automatically calculates and applies fees for successful transactions. Fee information is included in webhook payloads for merchant accounting and billing reconciliation. Fee types:- Percentage fees: based on transaction amount (e.g., 1.5% of €100 = €1.50)
- Fixed fees: flat rate per transaction (e.g., €1.00 per transaction)
- Currency-specific: fees are calculated in the same currency as the transaction
fees_breakdown array contains:
QA Checklist Before Going Live
Security & Configuration
Security & Configuration
- Serve checkout over HTTPS (wallets such as Apple Pay require it)
- Use live Stripe keys in production mode (if using Stripe alongside)
- Ask Quidkey for your production merchant_id and iframe URL
- Store webhook secret in secure vault
User Experience
User Experience
- Verify that only one payment method can be selected at any time
- Confirm purchase button enables/disables correctly with bank selection
- Test post-purchase redirect flows for success and failure
- Verify dynamic height adjustments work smoothly
Payment Updates
Payment Updates
- Verify amount updates work before payment initiation
- Confirm updates are blocked after customer selects a bank
- Test error handling for expired tokens
- Ensure iframe refreshes correctly after updates
Webhooks & Fees
Webhooks & Fees
- Verify webhook signature validation works
- Test webhook retry and idempotency handling
- Verify successful payments include fee information
- Ensure your system correctly stores fee breakdown data
Next Steps
Embedded Flow Overview
Back to the Embedded Flow overview
Embed the Checkout
Iframe setup, Stripe mutual exclusion, and purchase button routing
Webhook API Reference
Full webhook endpoint documentation
Hosted Checkout
Collect payments via a hosted checkout page instead