Skip to main content

Overview

A withdrawal allows users to transfer funds from their Fluz balance to an external account. Users can withdraw from two types of balances:
  • Cash Balance - Funds deposited by the user into their Fluz account
  • Rewards Balance - Cashback earnings accumulated from purchases
Fluz supports the following withdrawal methods:

Withdraw Cash Balance

Sample Request

You can initiate a withdrawal with the withdrawCashBalance mutation. This mutation transfers funds from a user’s Fluz balance to their specified external account.
This mutation requires the WithdrawCashBalanceInput input type. Any field marked with an exclamation mark (!) in the schema is mandatory and must be included in the request.

Input Fields

WithdrawCashBalanceInput


Sample Response

The response from the withdrawCashBalance mutation includes the withdrawal record(s) and the user’s updated balances.

Response Fields

Withdraw Object


Required Scope

This mutation requires the MAKE_WITHDRAWAL scope to be granted to the access token. The getWithdrawFeeEstimate query requires the same scope.

Withdrawal Methods by Account Type


Preview Fees Before Withdrawing

Use the getWithdrawFeeEstimate query to quote a withdrawal before you submit it. Pass the same amount, method, source, and isExpedited you intend to send, and the response tells you exactly what the user will receive.
The fee is deducted from the withdrawal rather than added on top: the balance is debited the full amount, and the destination receives netAmount. Passing FLUZPAY as method returns ARG-0001.

Push-to-Card Withdrawals (OCT)

A BANK_CARD withdrawal is a push-to-card payout, delivered as an original credit transaction (OCT) — the card-network transaction type for crediting funds to a card. It requires bankCardId, and the linked debit card must support OCT. An ineligible card cannot be delivered to by any other means, so the user has to pick a different withdrawal method. Delivery speed is controlled by isExpedited:
A PENDING push-to-card withdrawal is not yet final.A standard withdrawal is delivered to the card after the settlement delay, and it can still fail at that point — for example if the card is no longer able to receive the payout. When it does, the funds are credited back to the source balance. Reconcile withdrawal status instead of treating the initial PENDING response as a completed payout.

Card Eligibility

Most Visa and Mastercard debit cards can receive a push-to-card payout. Eligibility is evaluated when the withdrawal is submitted, and is a property of the card itself rather than something you configure.
Eligibility is not available in advance, and does not carry over from deposits.There is no query that reports whether a card supports OCT — it surfaces on the first withdrawal to that card. Withdrawal and deposit eligibility are also independent, so a card a user successfully deposited from is not necessarily a card you can send a withdrawal to. See Deposit From External Accounts.
BANK_CARD withdrawals are not restricted by cardType: a PREPAID card is not ruled out up front, and is accepted or declined on eligibility like any other card. Because BANK_CARD has no alternative delivery path, always keep BANK_ACH, PAYPAL, or VENMO reachable in your UI so an ineligible card does not dead-end the flow. Push-to-card failures surface as HN-0124 or BC-0004 — see Error Handling below.

Error Handling

Common error scenarios: ARG-* errors are raised before any funds move.

Example Error Response


Multiple Withdrawals

In some cases, a single withdrawal request may result in multiple withdrawal records. This can happen when the withdrawal amount is split across multiple seats (network positions). The response will contain all withdrawal records created.

Best Practices

  1. Always use unique idempotency keys - Generate a new UUID for each withdrawal request to prevent duplicate transactions.
  2. Check balances before withdrawing - Use the getWallet query to verify the user has sufficient funds before initiating a withdrawal.
  3. Handle pending states - Withdrawals may take time to process. The status field will indicate the current state of the withdrawal.
  4. Store transaction references - Save the withdrawId and transactionLogId for reconciliation and support purposes.

Changelog

v1.3.0

Expedited withdrawals and fee previews
  • Reintroduced isExpedited on WithdrawCashBalanceInput. It controls delivery speed for BANK_CARD withdrawals: true pushes to the card during the request, false or omitted settles on the standard schedule. This supersedes the v1.2.0 note below, which said the field had been removed.
  • Added the getWithdrawFeeEstimate query and the GetWithdrawFeeEstimateInput / WithdrawFeeEstimate types, so fees, net amount, and settlement timing can be previewed before submitting.
  • Documented push-to-card withdrawals as original credit transactions (OCT), including card eligibility and the fact that a standard withdrawal can still fail after it is submitted and be refunded to the source balance.
  • Corrected the required scope for withdrawCashBalance to MAKE_WITHDRAWAL. The MANAGE_PAYMENT scope previously listed on this page was wrong; seat_id on the Withdraw type is also optional (UUID), not required as v1.2.0 stated.
  • Documented that FLUZPAY, though present on the WithdrawMethods enum, is not a usable withdrawal method: withdrawCashBalance rejects it with WDR-0004 (invalid withdrawal method), and getWithdrawFeeEstimate rejects it with ARG-0001.

v1.2.0 - 2024-11-20

Schema refinements and field cleanup
  • Removed isExpedited field from WithdrawCashBalanceInput - expedited ACH is no longer configurable via the API
  • Changed seat_id field on Withdraw type from optional to required (UUIDUUID!)
  • Updated description for BANK_CARD method to remove “expedited” reference

v1.1.0 - 2024-10-15

Added Venmo support and rewards balance withdrawals
  • Added VENMO to WithdrawMethods enum
  • Added venmoAccountId field to WithdrawCashBalanceInput
  • Added REWARDS_BALANCE to WithdrawSource enum to support withdrawing cashback earnings
  • Added seat_id field to Withdraw response type for multi-seat account tracking

v1.0.0 - 2024-09-01

Initial release
  • Introduced withdrawCashBalance mutation with MAKE_WITHDRAWAL scope requirement
  • Added WithdrawMethods enum with PAYPAL, BANK_ACH, and BANK_CARD methods
  • Added WithdrawSource enum with CASH_BALANCE source
  • Added WithdrawCashBalanceInput input type with idempotency support
  • Added Withdraw response type with full withdrawal record details
  • Added WithdrawCashBalanceResponse type returning withdrawal records and updated balances
  • Integrated with payout-service for withdrawal processing
  • Added application action logging for audit trail