Create a payment and redirect the buyer to a Quidkey-hosted bank page
Collect the buyer’s details on your own site, create a payment from your backend, and send the buyer to a Quidkey-hosted page to pick their bank and approve. No iframe and no checkout UI to build: one API call and a redirect.
Amounts are integer minor units.2550 = £25.50, 1000 = €10.00. The same format is used across the Payment API. See Amounts & Currencies.
Call POST /api/v1/payment-requests:redirect with a Bearer token and an Idempotency-Key. The request body carries the buyer, the billing address, the amount, and where to send the buyer afterwards.
Strict schema. This endpoint rejects unknown fields and rejects decimal amounts. Send only the fields above, and send amount as a whole integer in minor units. 25.50 is invalid; 2550 is correct.
Send the buyer’s browser to the redirect_url. It opens a Quidkey-hosted page that shows only banks (no card option), where the buyer selects their bank and approves the payment inside their banking app or web flow. When they finish, Quidkey returns them to your success_url_redirect or fail_url_redirect.
Node.js
// In your route handler, after creating the payment:res.redirect(303, data.redirect_url);
The browser redirect back to your site only means the buyer returned. It does not confirm the payment settled. Always wait for the webhook before fulfilling the order. See Verify with webhooks.
After the bank flow, Quidkey sends the buyer back to your success_url_redirect or fail_url_redirect. Treat these strictly as UX: a place to show the buyer a confirmation or retry screen. They are not proof of the outcome. Confirm the result authoritatively via the webhook, or by polling the merchant status endpoint GET /api/v1/payment-requests/{paymentRequestId}/status.
Send a unique Idempotency-Key header on every create request. If the request is retried, for example after a network timeout, Quidkey returns the original result instead of creating a second payment. Use a value tied to the buyer’s intent, such as your order ID plus an attempt counter.
Reuse the same key when retrying the same logical request. Use a new key only when the buyer genuinely starts a new payment. See Idempotency for the full semantics.
To skip the bank picker, pass a selected_bank_id at create time when the buyer has already chosen their bank in your own UI. The hosted page takes them straight to that bank.
To show the buyer’s most popular banks in your own UI before they reach the hosted page, fetch the top banks for their country and currency, then pass the chosen id as selected_bank_id. This endpoint is public and cacheable at the market level, so it needs no access token.
country is required (ISO 3166-1 alpha-2); currency and limit (1-50) are optional. Render buttons from displayName and logoUrl, then pass the matching id as selected_bank_id. This step is optional: let the buyer choose on the hosted page if you prefer.