Skip to main content
POST

Authorizations

Authorization
string
header
required

Keycloak JWT. Roles: admin (platform admin — can register merchants, act on behalf of any merchant), merchant (dashboard user — scoped to their own merchant_id via user attribute mapper), POS terminals use client credentials flow with merchant_id injected via protocol mapper.

Body

application/json
amount
number<double>
required
Required range: x >= 0.01
Example:

99.99

currency
string
default:USD
Example:

"USD"

description
string
Example:

"Coffee and pastry"

expires_in
integer
default:1800

Seconds until expiration (default: 1800)

Required range: x >= 60
Example:

1800

counter_id
string<uuid> | null

POS terminal (counter) that created this intent. When set, the counter's webhook_url is used for delivery if no callback_url is provided.

Example:

"c1d2e3f4-a5b6-7890-abcd-ef1234567890"

reference
string | null

Merchant's own order or invoice ID. Stored for correlation and returned in webhook payload.

Example:

"ORD-12345"

callback_url
string<uri> | null

Per-intent webhook override. Takes priority over counter and merchant-level webhooks. Useful for ecommerce flows where each order has its own callback.

Example:

"https://shop.example.com/orders/ORD-12345/payment-callback"

metadata
object | null

Arbitrary JSON object stored with the intent and forwarded verbatim in the webhook payload.

Example:

Response

Payment intent created successfully

success
boolean
Example:

true

payment_intent
object