Skip to main content
Hosted Payment Page (HPP) is the shortest integration path. Flowlix renders the card form; your server creates a Payment, redirects the customer’s browser, and retrieves the Payment for the authoritative result.

When to use HPP

Choose HPP when raw card numbers and CVC values must not enter your checkout or backend. Your merchant server does not send card data in an HPP request. Your server still owns order fulfilment, idempotency, and final-status handling. HPP supports card payments. Apple Pay and Google Pay are not available on HPP. Do not send payment_method_data or a selected method in the HPP create request. Use the Direct API for wallet integrations. Apple Pay and Google Pay are Experimental: their support and this guidance are still being refined and are not final.

Prerequisites

Complete the shared setup in Authentication.

1. Create a Payment

Reuse the exact merchant_customer_id for the same customer. Never use an email, phone, login, name, order/payment/attempt ID, or fresh per-payment UUID. Case and whitespace are significant; the value must be nonblank, contain 1–255 Unicode scalar values, and contain no U+0000. Use an HTTPS return_url. A parsed URI using HTTP, javascript:, or another scheme, or without a valid host, returns 400 parameter_invalid with param: return_url before a Payment is created. Malformed URI text returns 400 request_body_invalid. Host validation checks URL syntax; your domain does not need to be on a Flowlix allowlist, and no DNS lookup is performed. Integrations that previously sent HTTP or custom-scheme return URLs must switch to HTTPS. You can supply optional billing_details when creating the Payment. These details are forwarded for the payment; shoppers cannot edit them on the hosted card-entry page. The editable cardholder-name field is separate from the billing profile. The API reference contains the complete request schema.

2. Store the response and redirect

A create returns 201 Created with the current Payment state. Store its id before taking further action. The initial state is one of: For example, a Payment ready for the hosted browser flow is:
Redirect only when the response has status: REQUIRES_ACTION, and use the exact opaque next_action.redirect_url. Flowlix collects the card details on the hosted page. 3D Secure may be presented during that hosted flow when required by the payment provider. A PENDING or FAILED response has no immediate shopper redirect. payment_method: null means the shopper’s actual method is unknown, not card. Read any later masked card details from payment_method.card, as explained in Payment method and card details. For Sandbox card entry and the amounts that select each outcome, see Sandbox testing. While the Payment is REQUIRES_ACTION, retrieve it periodically. If its latest next_action.redirect_url changes, send the browser to the new URL. Do not repeatedly redirect the same browser to an unchanged URL.

3. Handle the browser return

Flowlix sends the customer to return_url after the hosted browser flow.
Reaching return_url does not confirm payment. Never fulfil an order from a query parameter or browser state. Retrieve the Payment from your server.

4. Confirm the final status

Repeat the retrieval while the Payment is PENDING, REQUIRES_ACTION, or PROCESSING. Stop when it reaches: For polling intervals and every status, see Payment lifecycle. The optional payment_method.card block may be omitted or null even after a successful HPP payment. Confirm the result from status; do not wait for card details before fulfilment. See optional card details.

Safe retries

Flowlix retries eligible hosted-order creation failures in a bounded burst. An uncertain creation is not treated like a safe failure before direct-payment execution: an executable hosted page may already exist. A returned PENDING Payment stays unresolved; retrieve it rather than creating a replacement. If an earlier creation attempt was uncertain, a later provider rejection does not prove that no hosted order exists. Flowlix preserves that uncertainty rather than turning it into a failed Payment solely from the later rejection. If the create request times out or returns a transient HTTP error, retry with the same Idempotency-Key and an equivalent effective request identity. A changed business attempt uses a new key. See Idempotency.

Next steps