Skip to main content
Use the Payout API to submit funds to an eligible Visa or Mastercard. Payouts are available through server-to-server Direct API requests. This is not shopper 3D Secure: a Payout never sends the recipient through a browser challenge or return URL.
  1. POST /v1/payouts with a unique Idempotency-Key and store the returned Payout ID.
  2. GET /v1/payouts/{payout_id} when you need the latest state recorded by Flowlix.
  3. Use GET /v1/payouts to reconcile payouts and page or filter the result.
  4. Subscribe to the four Payout webhooks to receive lifecycle changes. Retrieve the Payout when reconciling delayed or out-of-order events.

Create a Payout

Send card data only from your secure server environment:
The card number in this request is a payload shape example only. It does not guarantee Payout eligibility or any particular outcome. Replace it with test data supplied for your current Sandbox account. Amounts use minor units. initiator_ip_address is the IP address of the human initiating the Payout. recipient.country, first and last names are required. Each name must contain a non-whitespace character and be 1–255 characters long. Names are preserved as submitted; do not rely on trimming or normalization. The response is 201 Created with a Payout object. Store its id, masked destination summary, status, and timestamps. A 201 response acknowledges the Payout submission; interpret the status using the table below. Every returned Payout includes both recipient names as strings, including reads and webhook snapshots. A provider rate limit or another uncertain provider response is recorded as a 201 Payout with status: PENDING, not as a retryable provider HTTP error. Store the Payout ID and retrieve its latest recorded state; do not resubmit it with a new key.

List Payouts

The list is merchant-scoped and ordered newest first. It supports:
  • literal, case-insensitive search across Payout IDs, merchant references, and recipient names; exactly four digits also match the destination card’s last four digits;
  • cursor pagination with starting_after or ending_before;
  • repeated status, currency, and card_brand filters;
  • card_last4, creation-time, and amount-range filters.
With exactly one currency filter, search also matches an exact major-unit amount. For example, search=49.99&currency=EUR matches amount: 4999. A decimal comma is accepted. Without one currency, numeric search matches only text or the card’s last four digits. % and _ are literal characters, not wildcards; all structured filters still constrain the results. For the next page, pass the last returned Payout id as starting_after. For a previous page, pass the first returned Payout id as ending_before. The response does not contain separate cursor fields. total_count is the number of matching Payouts before cursor pagination.

Retrieve a Payout

The ID is scoped to the authenticated merchant and mode. Use the returned Payout as the latest recorded state. Retrieval does not itself advance the Payout.

Payout statuses

Payouts have two nonterminal states and two terminal states: A Payout can move directly from PENDING to a terminal state; you do not need to observe PROCESSING first. There is no guaranteed completion deadline. The Payout result is not a separate banking-settlement receipt. Every response includes the recipient summary and masked destination. The failure_code and failure_message fields are returned only for FAILED and omitted in other states. These are public operation-failure fields, not the HTTP error.code envelope or raw provider details.

Retry safely

If the create request times out or returns a retryable HTTP error, retry only while the same destination card data remains available inside your approved PCI handling boundary. Preserve the same Idempotency-Key and an equivalent effective request identity, but do not persist the complete card-data body for retries. Never substitute a new key just because the response was lost. Use a new key only for a distinct business Payout. A same-key retry returns the saved creation response, which can still show PROCESSING after the Payout has completed. Use GET /v1/payouts/{payout_id} to read the current state; replaying POST is not polling. See Idempotency and operation failures for conflict and error handling.