Skip to main content
Use 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_SEND scope. 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
Set linkOnly and deliver claimLink yourself, for example in your own app or message.
Variables
Treat the claim link like a password.Anyone who has a link-only send’s claimLink can claim the money once they pass identity verification. Its shareRequestId is just as sensitive, because the claim page can be reached with it. Keep both out of logs and analytics.

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.
The claim page shows the amount, the sender’s name and the memo to anyone who opens the link, before they sign in. When someone claims, Fluz checks the sender’s account again. If it no longer passes KYC or KYB, or Fluz has restricted it, the claim is refused and the money stays held until you cancel the send or it expires. Turning off send money for an account doesn’t stop its held sends from being claimed, so cancel any you want to stop.

Track a held send

To check where a held send stands, call sendMoney 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
Cancelling needs the same scope, and the token’s user must be an owner or admin of the sending account. You can cancel any held send from the account, including one another user or application sent. A refused cancel comes back as an error, so 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 linkOnly on a key used for a recipient, is refused with ARG-0001. Never reuse a key from another operation: one used with createTransfer makes a new send, and one used for an external payout is refused only if that payout’s key was lowercase.
  • memo and daysUntilExpiration aren’t compared. A repeat that changes only those returns the original send unchanged.
  • sendMoney keys 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 GraphQL errors 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:

Reference