Added

Crypto withdrawal addresses: registration, ownership verification and withdrawals

You can now register your own crypto wallet as a withdrawal destination, prove you own it, and withdraw to it. Withdrawals only go to addresses that have been verified (active).

Impact

  • Breaking change: No. This adds new endpoints and fields. Existing integrations keep working.
  • Who is affected: Platform clients who want to withdraw crypto, for their own platform-level wallets or on behalf of a managed account.

Endpoints

  1. Register a crypto external address - POST /external-addresses
  2. Get an external address by id - GET /external-addresses/{externalAddressId}
  3. List external addresses - GET /external-addresses
  4. Delete an external address - DELETE /external-addresses/{externalAddressId}
  5. Create a withdrawal - POST /withdrawals
  6. Get a withdrawal by id - GET /withdrawals/{withdrawalId}

How verification and withdrawal works

  1. Register the address. It starts as pending.
  2. It becomes active once risk screening passes and you prove ownership with a satoshi test. This is a small test transfer.
  3. A few seconds after registration, call Get an external address by id. satoshiTest is null until the test amount is issued, so poll briefly.
  4. Send exactly satoshiTest.amount from the registered address to the account's own payouts wallet on the same network, before expiresAt. A deposit to any other wallet doesn't count.
  5. Once the test succeeds, ownershipVerification.status becomes verified and the address becomes active. You can then withdraw to it.
  6. When withdrawal status gets updated, you will receive webhooks accordingly via the withdrawal_status_update events.