Skip to main content
The Qint merchant API is a small, server-to-server REST API around one resource: the payment intent. Create one, redirect the buyer to its checkoutUrl, and learn the outcome via webhooks or reads.
20 October 2026: the payment intent’s credit fields changed. creditUsdt and creditAsset are gone, creditAmount and creditCurrency are new, and creditRate has a new meaning. See the breaking change note.

Base URL

All endpoints are versioned under /api/v1.
api.qint.ch is the stable production hostname. Keep the base URL in configuration anyway — environment switches stay a one-line change.

Authentication

Send your qk_live_… API key with every request, either way:
Keys carry Read and/or Write scopes; requests outside a key’s scopes return 403. See Authentication for creation and rotation.

Errors

Errors are RFC 7807 problem documents, Content-Type: application/problem+json:
Include the traceId when contacting support about a failed request.

Error codes

Only three errors carry a machine-readable code: amount_out_of_range (400, with minChf, maxChf and amountChf), terms_acceptance_required (403) and rate_unavailable (503). Every other error has no code field — branch on the HTTP status and treat detail as a human-readable message. A currency Qint has switched off for new payments is one of these code-less 400s:
Response (400 Bad Request)
(The real response also carries type, title and traceId, as above.) If you need to tell this case apart, match detail against is currently disabled on Qint. Better: check the public list currencies endpoint before creating an intent, so you never send a disabled currency. See currency availability.

Rate limits

The API is rate limited per client. On 429, retry with exponential backoff. Creates are retry-safe — the required idempotencyKey makes a replay return the original intent; see idempotency.

Conventions

  • JSON in, JSON out, camelCase field names.
  • Statuses are lowercase strings on the wire: initiated, pending, confirmed, settled, failed, expired, cancelled.
  • Crypto amounts are 8-decimal strings ("55.48765432") — parse as decimals, never floats.
  • Timestamps are ISO 8601 with offset.
  • Pagination on list endpoints: page (1-based) and pageSize (1–100, default 20); responses carry items, total, page, pageSize.
  • Ids are prefixed: intents pi_…, payment links pl_…, invoices inv_….

Breaking change 20 October 2026

Merchant balances are now kept in fiat, in each merchant’s Account Currency (CHF, EUR, USD or GBP; CHF by default), instead of a stablecoin. Every payment is credited in that currency at the rate fixed when the buyer is quoted. The base path stays /api/v1; the change affects the payment intent and the payment.status webhook. Payment intents (POST /api/v1/intents, GET /api/v1/intents, GET /api/v1/intents/{id}):
  • Removed: creditUsdt and creditAsset.
  • Added: creditAmount (what the payment added to your balance, 2 decimal places) and creditCurrency (your Account Currency at the time of the quote).
  • Changed meaning: creditRate is now units of creditCurrency per 1 unit of the invoice currency, 1 when they match. It used to be fiat per stablecoin unit.
  • Changed: feeAmount and netAmount (still in currency) are computed on the quote, so they always agree with the credit. A settledAmount booked later no longer changes them.
  • All three credit fields are null until the payment is credited, and on payments settled before 20 October 2026.
Webhook payment.status: creditAmount, creditCurrency and creditRate are added (filled on the settled event, null otherwise). The change is additive; see credit fields. SDKs: @qint/node 0.3.0, the .NET package Qint 0.3.0, qint-sdk for Python 0.3.0 and github.com/SwizzX-GmbH/qint-go v0.4.0 follow the change (credit_amount and credit_currency in Python, CreditAmount and CreditCurrency in .NET and Go). The WooCommerce plugin 1.0.5 shows the credit in the order note. Dashboard: the balance, balance conversion and Account Currency endpoints are listed under Dashboard in this reference. Crypto payouts are not offered at launch.

Endpoints

POST /api/v1/intents — Create a payment intent

GET /api/v1/intents/{id} — Retrieve a payment intent

GET /api/v1/intents — List payment intents

GET /api/v1/public/currencies — List currencies