Recommended flow
POST /v1/payoutswith a uniqueIdempotency-Keyand store the returned Payout ID.GET /v1/payouts/{payout_id}when you need the latest state recorded by Flowlix.- Use
GET /v1/payoutsto reconcile payouts and page or filter the result. - 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: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.
Flowlix makes bounded retries of eligible provider failures. If preparation
still fails before execution was sent, the Payout can be FAILED with
processor_unavailable or processor_error; this is not an issuer decline.
If execution may have reached the provider, Flowlix reads the existing order
to reconcile the result. The create response can already contain a terminal
result, or remain PENDING or PROCESSING when it is unresolved. An unavailable
provider read alone does not establish failure. Store the Payout ID and retrieve
its latest recorded state; do not resubmit it with a new key.
List Payouts
- literal, case-insensitive
searchacross Payout IDs, merchant references, and recipient names; exactly four digits also match the destination card’s last four digits; - cursor pagination with
starting_afterorending_before; - repeated
status,currency, andcard_brandfilters; card_last4, creation-time, and amount-range filters.
search also matches an exact major-unit
amount. For example, search=49.99¤cy=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.
Percent-encode query values: search=%25%25 searches for literal %%, and
search=%5F%5F searches for literal __. Malformed percent escapes return
400 parameter_invalid; correct the encoding before retrying.
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
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 sameIdempotency-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.