sendMoney to send money from a user’s Fluz cash balance. You can address it to an email address or phone number, to a Fluz account id, or to nobody, in which case you get a claim link to deliver yourself. The recipient doesn’t need to be a user of your application, or to have a Fluz account yet.
A send ends one of two ways. SENT means the money reached the recipient’s balance, and it’s final. PENDING_CLAIM means Fluz holds the money until the recipient claims it on a Fluz page. If nobody claims it before it expires, or you cancel it, the money goes back to the sender. How you address the send decides which one happens.
Before you start
- Call with a Bearer user access token that has the
MAKE_PAYOUT_TRANSFER_SENDscope. Basic Auth with your API key isn’t accepted. - The token’s user must be an owner or admin of the account.
- Fluz turns on send money per account. Ask your account team to enable it for each account that sends.
- The account must have passed identity verification: KYC for a personal account, KYB for a business.
- If the user limited your application to certain spend accounts, send from one of those.
Not the same as
createTransfer.createTransfer moves money between your application’s account and accounts that have authorized your application, or between two of those accounts. sendMoney can pay any Fluz account that can receive payments, or reach someone by email or phone. For a new recipient it holds the money until they claim it, and Fluz sends them the claim link.How a send is delivered
Fluz matches the email address and phone number on a user’s Fluz profile. If either matches more than one user, the send is refused, and you need a different identifier.
You can pass
recipientEmail and recipientPhone together for the same person. If both match one user, the phone decides: the money lands right away only if that user has verified the phone. If they match two different users, Fluz holds the money instead of choosing. If only one of them matches a user, that contact decides on its own: if the user verified it, the money lands in their account right away, even though the other contact matches nobody.
recipientId can’t be combined with an email or phone, and linkOnly can’t be combined with any recipient. You can’t send to the sender’s own account.
A send that would land right away but can’t, for example because the recipient’s account can’t receive payments or the amount is over a limit, fails with an error. Fluz doesn’t hold it instead.
Send money
The same mutation covers every kind of send. Only the input changes.Mutation
To an email address or phone number
claimLink is a short link to the claim page. Use it exactly as returned, without building or parsing it.
To send to a phone number, pass recipientPhone in E.164 format, such as +14155551234, instead of recipientEmail.
To a Fluz account
Pass the recipient’s account id. The send lands right away or is refused.Variables
As a claim link
SetlinkOnly and deliver claimLink yourself, for example in your own app or message.
Variables
Input fields
SendMoneyInput
Address the send with
recipientEmail, recipientPhone or both, with recipientId, or with linkOnly.
On a held send, the memo appears on the claim page, where anyone who opens the link can read it, even after the send is claimed or returned. Keep personal details out of it.
Response fields
SendMoneyResponse
What the recipient does
Claiming happens on a Fluz page, not through the API.1
Open the link
Fluz sends the claim link to the email address or phone number you sent to. For a link-only send, you deliver it.
2
Sign in or create a Fluz account
The money goes to the account they’re signed in to when they claim, personal or business.
3
Verify their identity
The account must pass KYC for a personal account or KYB for a business, and be able to receive payments.
4
Prove the contact
For a send to a phone number, the phone on their Fluz account must match it and be verified. For a send to an email address, Fluz emails a 6-digit code to that address. If you sent to both, a verified matching phone is enough. If their account’s phone matches but isn’t verified, they verify it first. Otherwise they enter the email code. A link-only send needs only the link.
Track a held send
To check where a held send stands, callsendMoney again with the same idempotencyKey and the same input. The response repeats the original result and ids with the current claimStatus, includes claimLink only while claimStatus is PENDING, and moves no money.
The repeat call runs the same scope, role and spend account checks as a new send, so it’s refused if the user is no longer an owner or admin, or if your application can no longer use the spend account.
Cancel a held send
cancelMoneySend cancels a send while its claimStatus is PENDING and returns the money to the cash balance it came from. A SENT send can’t be cancelled.
Mutation
cancelled is always true. When the same user repeats a successful cancel of the same send with the same idempotencyKey within 24 hours, it gets the same response. A refused cancel isn’t stored, so a repeat runs it again.
Expiry
A held send can be claimed until the end of the day, Eastern time,daysUntilExpiration days after it was sent. The response doesn’t include that date, so record it when you send.
After that, claims are refused, and Fluz returns the money to the sender’s cash balance the next morning, in a daily run at 9:00 Eastern. Until the money is returned, claimStatus still reads PENDING and you can still cancel the send.
Idempotency
sendMoney and cancelMoneySend both take an idempotencyKey, a UUID you generate. Letter case doesn’t matter.
- A repeat with the same key and the same input returns the original send, moves no money, and shows where the send stands now.
- A key stays tied to its send. Fluz answers repeats from a cache for 24 hours and from the send itself after that, so a key never sends twice. Use a new key for every new send.
- A repeat that changes the amount, the cash balance or the recipient, or sets
linkOnlyon a key used for a recipient, is refused withARG-0001. Never reuse a key from another operation: one used withcreateTransfermakes a new send, and one used for an external payout is refused only if that payout’s key was lowercase. memoanddaysUntilExpirationaren’t compared. A repeat that changes only those returns the original send unchanged.sendMoneykeys belong to the account, not to your application. The same key and input from another application or user on the account returns the original send.- If a send fails before any money moves, for example because the balance is too low, the key stays free. Fix the cause and retry with the same key.
G-0409 means Fluz is still working on that key, or its answer was lost. The send may have gone through, so retry with the same key and the same input until you get a result. A request in progress holds its key for up to 10 minutes.
Limits
Sends count against the account’s transfer limits: daily, weekly, monthly and yearly totals, plus a minimum and maximum per send. A held send counts from when it’s sent until the money is returned. The recipient’s receive limits apply when the money lands, at send for an immediate send and at claim for a held one. Ask your account team for your account’s limits.Errors
Errors come back in the GraphQLerrors array with sendMoney or cancelMoneySend set to null. Branch on extensions.code. The ARG- and G-0003 messages name the specific reason. Other messages can change.
A send that lands right away also goes through Fluz’s fraud screening, which can refuse it with other codes. On a send to
recipientEmail or recipientPhone, a FLUZ- limit code can also mean the recipient’s receive limit.
A missing, invalid or revoked token is refused before the operation runs, with HTTP 401, or HTTP 498 once it has expired, and no GraphQL errors array.
For cancelMoneySend: