SET Merchant API · Payout controls
Schedule a recurring payout
POST/v1/payout_schedules
The same payout every day, week, month, quarter or year from a customer's custodial wallet to one of its recipients. Each run makes an ordinary payout under the creating key, with the same limits, approval and checks; the wallet's balance is checked when it runs.
Headers
Idempotency-Keystring- Optional. The same key and body run once; a replay answers with
Idempotent-Replayed: true. Kept 24 hours.
Body
walletstringrequired- The paying customer's custodial wallet.
recipientstringrequired- One of that customer's recipients.
amountdecimal stringrequired- USDC per payout, whole cents.
every"day" | "week" | "month" | "quarter" | "year"required- How often.
startAtISO time- The first run, with its offset, within a year. Default: now.
countinteger- How many payouts, 1–1000. Default: until canceled.
approval"required"- Hold each payout for an approver key.
externalIdstring- Your id; a repeat returns the same schedule. Each payout's
externalIdis<schedule>:<n>.
Notes
- A scheduled payout takes no
reference: references go to the bank in the sending request only and are never stored. - Runs missed while SET's scheduler was down are skipped, never sent twice. A revoked key or a disabled recipient stops the schedule.
- Events
payout_schedule.created,.skipped(withproblem),.completed,.canceled, and each payout's own events.
Errors
400 body_invalid400 external_id_invalid400 every_invalid400 start_at_invalid400 count_invalid400 approval_invalid400 reference_not_supported403 operator_cannot_pay_out409 limit_exceeded400 amount_invalid400 amount_too_small400 reference_invalid400 external_id_invalid400 recipient_other_customer404 recipient_unknown404 wallet_unknown409 recipient_disabled409 recipient_incomplete409 payee_not_ready409 balance_too_low409 initiation_required403 operator_cannot_pay_out403 platform_fee_not_allowed503 bridge_wallets_disabled401 api_key_required401 api_key_invalid401 api_key_wrong_mode403 scope_missing429 rate_limited