Skip to main content
QR payins let you create a charge that a customer completes with their banking app. Use an idempotency key whenever a client may retry after a timeout or ambiguous network response.

Create a QR payin

Send method: "qr" to POST /v1/payins. The key is optional and can be sent in the JSON body or in the Idempotency-Key header.
Response 201:
Display the QR payload or the qr_image_url returned by the API. When the customer pays, the account is credited automatically. Read the current status with GET /v1/payins/{payinID}.

Idempotent retries

idempotency_key is optional for QR payins. Send it in the JSON body or as the Idempotency-Key header. If both are present, the body value is used. The platform namespaces the key by account internally; the integrator sends the key exactly as provided. The request identity includes country, currency, method and the numeric amount. For example, "100" and "100.00" are equivalent. description is display text and is not part of replay identity. The QR channel is not part of the replay identity: the same key replays the same charge regardless of channel. The first request creates one charge. A retry with the same key and equivalent payload returns the original object with idempotency_hit: true; it does not create another charge:
The header form is equivalent:
If the same key is reused with a different country, currency, method or amount, the API returns 409 idempotency_conflict:
An expired or paid charge is replayed as-is. The replay response preserves the original object; use GET /v1/payins/{payinID} to read its live status. Both the core and the platform return 400 invalid_idempotency_key when the integrator key is longer than 256 characters or contains carriage-return/ line-feed characters. The platform also rejects the request with the same code if its server-side account namespace would make the resulting core key exceed 256 characters. That namespace is invisible to the integrator: send the key unchanged.

Errors

FAQ

Yes. The description is display text and is not part of the replay identity.
Retry with the same idempotency key, then read the returned payin_id with GET /v1/payins/{payinID}. Do not create a new key for the same operation.
Last modified on October 2, 2026