Object model
The API models five resources and how they relate:
- PaymentLink — the charge you create. Denominated in
amount+currency. Produces a hostedcheckout_url. It is the entry point of the integration. - CheckoutSession — the payer's session on the hosted page, created by the platform when the
checkout_urlis opened. You do not create it directly. - Quote — the locked price of a charge for a method and moment: charged exchange rate, total fee, and net. Single source of price.
- PaymentIntent — internal orchestration detail created when a
Quoteis accepted. Not the integrator's main vocabulary. - Payment — the result. It is the reconciliation object: it carries
reference, charged and net amounts, fee breakdown, locked exchange rate, and settlement.
Direct integration flow: Quote → accept → PaymentLink. The integrator sends the link to the customer. The PaymentIntent exists behind the scenes to tie charge, ledger, and reconciliation together. Hosted-link flow: PaymentLink → (payer opens) CheckoutSession → (payer confirms) locked Quote + PaymentIntent → Payment. Each Payment transition emits an Event, which is delivered to your WebhookEndpoints and recorded in WebhookDeliveries.
POST /v1/quotes/{id}/accept materializes a charge from a quote without recomputing the price and responds with a payment link. The quote must belong to the key's tenant, be within expires_at, and not yet be consumed.
In the legacy POST /v1/payment_intents flow, legal_entity_id is optional. When omitted, the platform uses the tenant's single active legal entity. If the tenant has no active entity, it returns 400 no_active_legal_entity; if it has more than one active, it returns 400 legal_entity_required and the integrator must supply legal_entity_id. When supplied, the field is still validated against the key's tenant, and an entity from another tenant returns 404 legal_entity_not_found.