Skip to main content
This guide takes you from zero to a completed bank payment in about ten minutes. You’ll authenticate, create a Redirect payment in test mode, send a buyer to their bank, and confirm the result with a webhook. Every request is copy-pasteable.

Sign Up for Credentials

Create your merchant account to get your client_id and client_secret
Test mode. Every request below sets test_transaction: true, so no real money moves. Test payments use the same endpoints and fire the same webhooks as live ones, so the integration you build here is the integration you ship. See Testing for more.
1

Get an access token

Exchange your credentials for an access token using the OAuth 2.0 client credentials flow. The token is valid for 15 minutes.
curl -X POST 'https://core.quidkey.com/api/v1/oauth2/token' \
  -H 'Content-Type: application/json' \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET"
  }'
You should receive an access_token valid for 15 minutes, plus a refresh_token and expires_in. Send the access token as Authorization: Bearer <token> on every request that follows.
No credentials yet? Try authentication in the API playground first. No setup required. For the full token lifecycle, see Authentication.
2

Create a Redirect payment

Create a payment with POST /api/v1/payment-requests:redirect. Amounts are integer minor units, so 2550 means £25.50. Send an Idempotency-Key so a retried request never creates a second payment, and keep test_transaction: true while developing.
curl -X POST 'https://core.quidkey.com/api/v1/payment-requests:redirect' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Idempotency-Key: order-1001-attempt-1' \
  -H 'Content-Type: application/json' \
  -d '{
    "merchant_id": "your-merchant-id",
    "customer": {
      "name": "Jane Buyer",
      "email": "jane@example.com",
      "phone_number": "+447700900123"
    },
    "billing_address": {
      "address_line1": "1 Market Street",
      "city": "London",
      "postal_code": "EC1A 1AA",
      "country": "GB"
    },
    "amount": 2550,
    "currency": "GBP",
    "payment_reference": "ORDER1001",
    "locale": "en-GB",
    "success_url_redirect": "https://yoursite.com/success",
    "fail_url_redirect": "https://yoursite.com/failure",
    "test_transaction": true
  }'
A successful call returns 201 Created with { "success": true, "data": { "redirect_url": "..." } }. Save the redirect_url.
3

Redirect the buyer

Send the buyer’s browser to the redirect_url. It opens a Quidkey-hosted bank page where they pick their bank and approve the payment. When they finish, Quidkey sends 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 redirect back to your site tells you the buyer returned, not that the payment settled. Treat the webhook as authoritative before fulfilling the order.
4

Verify the webhook

Quidkey sends a webhook to your registered endpoint with the final result. Listen for quidkey.payment_request.succeeded and only then mark the order as paid.

Set Up Webhooks

Register your endpoint, verify signatures, and handle every payment status event

What’s Next

You just built the Redirect flow. Explore the full feature set, or pick a different integration path.

Redirect (Pay by Bank)

The full guide: request reference, deep-linking to a bank, and webhooks

Embedded (with Stripe)

Add Quidkey inline alongside your Stripe Payment Element

Hosted Checkout

Generate a shareable checkout link in one API call

API Reference

Explore every endpoint with an interactive playground