Skip to main content
POST
Create a hosted payment page payment

Authorizations

Authorization
string
header
required

Use your secret API key as the Bearer token. Test mode keys start with api_test_sk_ and live mode keys start with api_live_sk_. Both modes use the same API host; the mode is determined by the key.

Headers

Idempotency-Key
string
required

A unique key to ensure the request is processed only once. If a request with the same idempotency key and the same body has already been processed successfully, the original response is returned. Non-2xx responses are not cached, so callers may retry after errors. Keys expire after 24 hours.

For one-shot requests, such as creating a payment from a checkout button, a random UUIDv4 is fine. For requests tied to a specific business operation, such as refunding an order, a deterministic key is preferred so retries collapse correctly across processes.

Maximum string length: 255

Body

application/json
amount
integer<int64>
required

Payment amount in minor units.

Required range: x >= 1
Example:

2500

currency
enum<string>
required

Three-letter ISO 4217 currency code. Currently supported for card acquiring: EUR.

Available options:
EUR
Example:

"EUR"

billing_details
object
required
return_url
string<uri>
required

Merchant URL where the customer returns after hosted payment completion or abandonment.

Example:

"https://shop.example.com/checkout/complete"

merchant_reference
integer<int64>

Optional merchant-side reconciliation reference. The value must contain exactly 10 decimal digits and does not provide idempotency by itself.

Required range: 1000000000 <= x <= 9999999999
Example:

1234567890

description
string

Merchant-provided payment description.

Maximum string length: 500
Example:

"Order #5678"

Response

Hosted payment page payment accepted and a Payment object was created. When provider submission succeeds, the payment moves directly from PENDING to REQUIRES_ACTION with next_action.reason and next_action.redirect_url; it does not pass through PROCESSING before customer redirect. Use the Payment object's status from GET /v1/payments/{id} or webhooks as the source of truth for the final outcome.

A Payment represents one attempt to collect funds from the customer. Merchants can use merchant_reference to associate multiple payment attempts with the same order or checkout in their own systems.

id
string
required

Unique opaque identifier for a payment (pay_ prefix + random alphanumeric suffix).

Pattern: ^pay_[A-Za-z0-9]{24}$
Example:

"pay_q7Mk2Np8Vr4Xt6Yz9Ab3Cd5E"

amount
integer<int64>
required

Payment amount in minor units.

Required range: x >= 1
Example:

4999

currency
enum<string>
required

Three-letter ISO 4217 currency code. Currently supported for card acquiring: EUR.

Available options:
EUR
Example:

"EUR"

status
enum<string>
required

Current status of a payment attempt.

  • PENDING -- The payment was accepted by Flowlix and is awaiting provider submission or the next lifecycle decision.
  • REQUIRES_ACTION -- Customer action is required, such as completing 3D Secure authentication or a hosted payment page.
  • PROCESSING -- The payment is being processed by downstream payment systems.
  • SUCCEEDED -- The payment completed successfully.
  • FAILED -- The payment was declined or failed permanently.
  • CANCELED -- The payment was canceled before completion.
  • EXPIRED -- The customer did not complete a required action before its expiry time.
Available options:
PENDING,
REQUIRES_ACTION,
PROCESSING,
SUCCEEDED,
FAILED,
CANCELED,
EXPIRED
Example:

"SUCCEEDED"

integration_type
enum<string>
required

How the payment was collected. This is separate from the payment method instrument, such as card or a future wallet.

Available options:
DIRECT,
HOSTED_PAYMENT_PAGE
Example:

"DIRECT"

amount_refunded
integer<int64>
required

Total amount successfully refunded so far, in minor units.

Required range: x >= 0
Example:

0

amount_refundable
integer<int64>
required

Remaining amount that can be refunded, in minor units.

Required range: x >= 0
Example:

4999

created_at
integer<int64>
required

Unix timestamp when the payment was created.

Example:

1719792000

livemode
boolean
required

Whether this payment was created using a live API key.

Example:

false

merchant_reference
integer<int64> | null

Merchant-side reconciliation reference, if provided.

Required range: 1000000000 <= x <= 9999999999
Example:

1234567890

description
string | null

Merchant-provided payment description.

Example:

"Order #1234"

card
object | null

Masked card details, or null before card details are available.

billing_details
object | null

Billing details captured for the payment, if available.

failure_code
enum<string> | null

Machine-readable reason code when the payment reaches a terminal failed status.

Available options:
invalid_request,
not_found,
processor_error,
processor_unavailable,
generic_decline,
do_not_honor,
issuer_declined,
insufficient_funds,
invalid_number,
invalid_expiry,
expired_card,
invalid_amount,
invalid_currency,
not_permitted,
cardholder_limit,
card_velocity_exceeded,
lost_card,
stolen_card,
suspect_fraud,
fraud_filter,
payment_canceled,
three_d_secure_failed,
three_d_secure_timeout,
three_d_secure_not_supported,
three_d_secure_error
Example:

"insufficient_funds"

failure_message
string | null

Human-readable explanation when the payment reaches a terminal failed status.

Example:

"The card has insufficient funds."

refunds
object[]

Refunds created for this payment, oldest first.

status_transitions
object

Timestamps for important payment status transitions.

next_action
object | null

Customer action required to continue the payment.