How Quidkey represents money: integer minor units and ISO 4217 currencies
The Payment API represents money in a single, consistent way: amounts are integer minor units, and currencies are ISO 4217 codes. Getting this right is the single most important detail when creating a payment.
On the redirect, embedded, and hosted checkout endpoints, amount is an integer in the currency’s smallest unit: pence for GBP, cents for EUR/USD. For example, 1999 = £19.99.
The 100× footgun. Sending 20 does not mean £20; it means £0.20. To charge £20.00, send 2000. A decimal value such as 19.99 is rejected with a 400 validation error. Always multiply major units by 100 (for two-decimal currencies) before sending.
To convert a display price to minor units, multiply by 100 and round to an integer:
# £19.99 is sent as the integer 1999curl -X POST 'https://core.quidkey.com/api/v1/payment-requests:redirect' \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "amount": 1999, "currency": "GBP", "locale": "en-GB" }'
Webhook payloads carry the same minor-unit value, but as a JSON string: data.object.amount (and the numeric fees fields) arrive as a stringified integer such as "1999", not the number 1999. Parse with Number(...) before doing arithmetic, and divide by 100 only at the presentation layer. See Webhooks.
The legacy POST /api/v1/payment-requests (v1) endpoint takes a decimal amount in major units ("19.99" for £19.99), not minor units. It is retained for backward compatibility only. New integrations should use the minor-unit endpoints (redirect, embedded, and hosted checkout).