Recipe: exact-net payout
SET Direct Deposit API · Recipe, 2026-11-10
What it does
Your payee must receive the full amount in their bank, say $100.00, and must be paid once, however often your system retries. SET's fee is the payee's, taken from what you send, so you send a little more than $100.00. Every part of this is live; this page puts the calls in order.
Before you start, register the wallet you pay from (Sender wallets). You need the payee's Cash-Out Address and your own reference for the payout (a bounty, invoice or job id; never a name or email).
Steps
- Ask how much to send. ``
GET /api/partner/quote?netUsd=100.00&chain=base&address=0x…`amountUsdcis the least whole-cent amount that reaches the bank as at leastnetUsdafter the fee on that address: 103.09 at 3%.belowMinimummust befalse.partnerShareUsd` is your revenue share on it (Paying an exact amount to the bank). - Check the address takes that amount. ``
GET /api/partner/address?chain=base&address=0x…&amountUsdc=103.09`Go on only ifacceptsPayoutsistrue`. - Reserve the payout under your reference. ``
POST /api/partner/payout_intents { "reference": "bounty-4471", "amountUsdc": "103.09", "chain": "base", "address": "0x…" }`201withstate: "open". If your system asks again for the same reference, the answer is409 already_intended(oralready_paid`) with the first intent, so nothing is paid twice (Paying each reference once). - Send exactly
amountUsdcUSDC to the address, from your registered wallet. Keep the transaction hash. - Set your reference on the payment. ``
POST /api/partner/references { "chain": "base", "txHash": "0x…", "to": "0x…", "reference": "bounty-4471" }`The intent becomespaid, and you getpayout_intent.paid`. - Follow the bank leg.
payout.funds_received, thenpayout.payment_processed, carry your reference. The bank amount on the provider's receipt is final.
What it costs you
The payee pays the fee: on $103.09 at 3%, $3.09, and the bank receives $100.00. Making them whole costs you the $3.09 you add, less your revenue share on the payout, which SET pays you monthly. A platform cannot pay the fee in the payee's place instead (Paying an exact amount to the bank, "What it is not").
In the sandbox
On staging, step 4 can be a simulated payout to a sandbox payee's Cash-Out Address (POST /api/partner/sandbox/payouts, then …/advance for each bank step). A self-serve sandbox key has no payee Cash-Out Address to pay yet, so with one of those the recipe stops at step 1 with 404 address_unknown. Step 3 can be tried with a payee resolved by email, sending payeeId in place of address (Wallet everywhere, bank in the US).