SET API (Platforms) · Transfers
Make a one-off transfer
POST/v1/transfers
One movement that a fixed address does not cover: wire_to_usdc, a single wire paid in and delivered as USDC (for one invoice paid by wire), or wallet_to_swift, USDC from a customer's custodial wallet paid out in USD by SWIFT.
Headers
Idempotency-Keystring- Optional. The same key and body run once; a replay answers with
Idempotent-Replayed: true. Kept 24 hours.
Body
kind"wire_to_usdc" | "wallet_to_swift"required- Which transfer.
customerstringwire_to_usdc: the receiving customer.to{ wallet } | { asset, address, beneficiary }wire_to_usdc: the customer's custodial wallet, or USDC on Base, Ethereum or Solana to an address with its beneficiary.walletstringwallet_to_swift: the paying customer's custodial wallet.bankAccount | recipientstringwallet_to_swift: the customer's own USD bank account, or a USD bank recipient (a third party).amountdecimal stringrequired- US dollars. At least 1.00 must be delivered after SET's fee.
swiftReferencestringwallet_to_swift: up to 4 lines (separated by\n) of at most 35 characters.chargeBearer"sha" | "our" | "ben"wallet_to_swift: who pays SWIFT charges. Defaultsha(shared).externalIdstring- Your id; a retry with the same one returns the same transfer.
platformFeeBpsinteger- Platform keys: the platform's own fee, once SET allows it.
Notes
- A wire in answers with
depositInstructions, including a deposit message unique to this transfer that the wire must carry. They are re-read while the transfer awaits funds and never stored. SET's fee is the bank on-ramp fee. - A SWIFT payout's fee is the payout fee. Whether a bank account takes SWIFT is the provider's decision. Only the business's own key can send one; SET's operator cannot.
- Events
transfer.created,transfer.<state>(forward only),transfer.create_failed,transfer.trade_executed. SET re-reads open transfers every 10 minutes.
Errors
400 body_invalid400 kind_invalid400 external_id_invalid400 amount_invalid400 amount_too_small400 asset_invalid400 address_invalid400 swift_reference_invalid400 charge_bearer_invalid400 currency_not_supported400 field_not_used400 transfer_refused404 wallet_unknown404 recipient_unknown404 bank_account_unknown409 verification_incomplete409 balance_too_low409 initiation_required403 operator_cannot_pay_out503 bridge_wallets_disabled502 transfer_refused401 api_key_required401 api_key_invalid401 api_key_wrong_mode403 scope_missing429 rate_limited