Deposit Accounts

Manage per-user deposit accounts. Each account has one destination (chain + address + token) and one or more deposit addresses that customers send funds to.

POST /v1/deposit-accounts

Create a new deposit account. destination is optional: when omitted, the account inherits the tenant destination policy. If neither an explicit destination nor a policy exists, the request fails with a 422 whose error starts with destination_policy_missing. Non-active chains are rejected with a 400 starting unsupported_chain.

Request body

FieldTypeRequiredDescription
externalUserIdstringYesYour unique user identifier
destination.chainIdnumberNo*Destination chain ID (1, 137, 8453)
destination.addressstringNo*Destination wallet address
destination.tokenAddressstringNo*Destination token contract address
metadataobjectNoArbitrary key-value metadata

* The whole destination object may be omitted when a tenant destination policy is configured; when supplied, all three fields are required.

curlbash
curl -X POST https://api.projectsilo.app/v1/deposit-accounts \
  -H "Authorization: Bearer project_silo_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "externalUserId": "user_123",
    "destination": {
      "chainId": 137,
      "address": "0x1111111111111111111111111111111111111111",
      "tokenAddress": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"
    }
  }'

Response 200

response.jsonjson
{
  "depositAccount": {
    "id": "da_abc123",
    "externalUserId": "user_123",
    "status": "active",
    "destination": { "chainId": 137, "address": "0x1111...", "tokenAddress": "0x2791..." },
    "depositAddresses": [
      { "chainId": 1, "address": "0xAAAA...", "assets": ["USDC"] },
      { "chainId": 137, "address": "0xBBBB...", "assets": ["USDC", "USDC.e"] },
      { "chainId": 8453, "address": "0xCCCC...", "assets": ["USDC"] }
    ],
    "metadata": {},
    "createdAt": "2026-04-28T12:00:00.000Z",
    "updatedAt": "2026-04-28T12:00:00.000Z"
  }
}

GET /v1/deposit-accounts

List all deposit accounts for the authenticated tenant.

Query parameters

ParamTypeDescription
limitnumberMax accounts to return (default: 50)

GET /v1/deposit-accounts/:externalUserId

Get a specific deposit account by external user ID.

PATCH /v1/deposit-accounts/:externalUserId/destination

Update the settlement destination for a deposit account. Emits the deposit.account.destination_updated webhook event with the updated account, the prior destination, and the acting API key id.

Request body

FieldTypeRequiredDescription
destinationDestinationYesNew destination (chainId, address, tokenAddress)