Payouts
Create one-shot or scheduled payouts, recurring schedules, and a per-app address book. Secret API key or dashboard JWT. Amounts on create are human decimal strings.
💡
Standing auth
The payout wallet must already be authorized in the merchant dashboard. ERC-20 payouts need an allowance to Merchant Manager; native EVM payouts spend depositETH.
⚠️
Chain limits
Bulk lines (2–200) are EVM only. Solana is native SOL, one recipient. Sui cannot be scheduled and cannot execute on-chain yet. Create amounts are human decimals; stored amounts are atomic. Bank settlement is a separate dashboard flow, not these endpoints.
Create a payout
POST
/payouts| Parameter | Type | Required | Description |
|---|---|---|---|
appId | string | Yes | App UUID (SDK sets this) |
chain | string | Yes | Chain id, e.g. 11155111 |
tokenAddress | string | Yes | Admin+app catalog token, or native sentinel |
lines | { recipient, amount }[] | Yes* | 1–200 human amounts. *Or recipientWallet + tokenAmount |
scheduledAt | string | No | ISO UTC. Future time → SCHEDULED |
executeNow | boolean | No | Default true when scheduledAt is omitted |
amountUsd | string | No | Record only |
List / get / execute / cancel
GET
/payoutsGET
/payouts/:idPOST
/payouts/:id/executePOST
/payouts/:id/cancelSchedules
POST
/payout-schedules| Parameter | Type | Required | Description |
|---|---|---|---|
appId | string | Yes | App UUID |
chain | string | Yes | Chain id |
tokenAddress | string | Yes | Catalog token |
lines | array | Yes | Fixed recipients and human amounts |
intervalDays | number | Yes | 1–365 UTC days |
startAt | string | No | First run ISO UTC (default now) |
GET
/payout-schedulesPOST
/payout-schedules/:id/pausePOST
/payout-schedules/:id/resumePOST
/payout-schedules/:id/cancelAddress book
POST
/apps/:appId/payout-contactsGET
/apps/:appId/payout-contactsPUT
/apps/:appId/payout-contacts/:contactIdDELETE
/apps/:appId/payout-contacts/:contactIdPOST
/apps/:appId/payout-contacts/importCSV header: label,wallet,amount. Body: csv, family (EVM | SOLANA | SUI), saveToAddressBook.PUT updates label, wallet, or family. Contacts are scoped to the URL appId.
Funding (dashboard)
GET
/apps/:id/payout-funding?chainId=Webhooks
payout.executedeventIntent executed on-chainpayout.failedeventExecute failed; recurring stays ACTIVE