Destination Policy
The tenant destination policy is the default settlement destination ("settle to venue"). Configure it once and every deposit account created without an explicit destination settles into it — useful when all of your users' funds land in one venue wallet.
GET /v1/destination-policy
Requires the destination_policy:read scope. Returns { "destinationPolicy": null } when no policy is configured.
curl https://api.projectsilo.app/v1/destination-policy \
-H "Authorization: Bearer project_silo_live_..."Response 200
{
"destinationPolicy": {
"tenantId": "11111111-2222-3333-4444-555555555555",
"destination": {
"chainId": 137,
"address": "0x1111111111111111111111111111111111111111",
"tokenAddress": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174"
},
"venue": "polymarket",
"createdAt": "2026-06-01T12:00:00.000Z",
"updatedAt": "2026-06-01T12:00:00.000Z"
}
}PUT /v1/destination-policy
Requires the destination_policy:write scope. Creates or replaces the tenant's policy. The destination chain must be active in GET /v1/chains — declared chains are rejected with a 400 starting unsupported_chain.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| destination.chainId | number | Yes | Active chain id (1, 137, 8453) |
| destination.address | string | Yes | Destination wallet address (0x + 40 hex) |
| destination.tokenAddress | string | Yes | Destination token contract address (0x + 40 hex) |
| venue | string | null | No | Free-form venue label (max 120 chars) |
curl -X PUT https://api.projectsilo.app/v1/destination-policy \
-H "Authorization: Bearer project_silo_live_..." \
-H "Content-Type: application/json" \
-d '{
"destination": {
"chainId": 137,
"address": "0x1111111111111111111111111111111111111111",
"tokenAddress": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174"
},
"venue": "polymarket"
}'Fallback behaviour
POST /v1/deposit-accounts no longer requires destination. When it is omitted, the account inherits the tenant destination policy at creation time. If neither an explicit destination nor a policy exists, the request fails with a 422 whose error starts with destination_policy_missing.
Changing the policy later does not rewrite existing deposit accounts — it only applies to accounts created afterwards. Use PATCH /v1/deposit-accounts/:externalUserId/destination to move an existing account (which emits the deposit.account.destination_updated webhook).
Portal access
The same policy is readable by any tenant member and writable by members with the developer role or higher under Settings → Settlement destination in the portal, or via session-authenticated GET/PUT /v1/tenants/{tenantId}/destination-policy.