SETSimple Easy Transactions
SET DocsAPI reference and complianceUpdated 2026-11-09
Browse: SET Direct Deposit API

Sender wallets and unknown senders

SET Direct Deposit API · Live since 2026-11-09 · Draft guide

SET credits a payout to a partner, counts it in the partner's statement and tax data, and sends the partner's Travel Rule details with it, only when it comes from a wallet registered to that partner. Partners register their own wallets with the wallet's signature. A payout from a wallet nobody has registered is never guessed at.

Register a wallet you pay from

  1. GET /api/partner/senders/message?chain=base&address=0x… returns the exact text to sign and its issuedAt. The text names your partner id, the wallet, the network and the mode (live or test), and is valid for one hour.
  2. Sign it with the wallet:
    • an ordinary wallet signs with personal_sign (EIP-191);
    • a contract wallet such as a Safe is checked on chain with EIP-1271 isValidSignature.
  3. POST /api/partner/senders with {chain, address, issuedAt, signature, label?}.

A wallet belongs to one partner (409 sender_taken). GET /api/partner/senders lists your wallets with how each was registered (source: operator or signature; proof: eoa or eip1271). DELETE /api/partner/senders/{chain}/{address} removes one; payouts already credited stay credited.

When a payout arrives from an unknown wallet

If you send a payout to an address SET has told you takes your payouts (GET /api/partner/address answered acceptsPayouts: true, or Payable Email answered direct) from a wallet nobody registered, SET:

  • records it as unknown_sender and keeps the sending wallet from the chain;
  • sends you payout.unknown_sender with the payout id, address, amount, deposit transaction and sending wallet. Nothing about the payee is disclosed: you already hold the address, and the transfer is public on chain.

Late attribution. Register that wallet within 30 days of the payout and SET credits the payout to you and sends its Travel Rule data at the next scheduled run. The registration answer reports it as lateAttribution: {credited, queued}.

Try it in the sandbox

On staging, POST /api/partner/sandbox/unknown_sender with {chain, address, amount, senderAddress} creates a payout from an unregistered wallet and sends payout.unknown_sender. Registering senderAddress afterwards credits it (payout.funds_received). No money moves.