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
| Field | Type | Required | Description |
|---|---|---|---|
| externalUserId | string | Yes | Your unique user identifier |
| destination.chainId | number | No* | Destination chain ID (1, 137, 8453) |
| destination.address | string | No* | Destination wallet address |
| destination.tokenAddress | string | No* | Destination token contract address |
| metadata | object | No | Arbitrary key-value metadata |
* The whole destination object may be omitted when a tenant destination policy is configured; when supplied, all three fields are required.
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
{
"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
| Param | Type | Description |
|---|---|---|
| limit | number | Max 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
| Field | Type | Required | Description |
|---|---|---|---|
| destination | Destination | Yes | New destination (chainId, address, tokenAddress) |