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.

curlbash
curl https://api.projectsilo.app/v1/destination-policy \
  -H "Authorization: Bearer project_silo_live_..."

Response 200

response.jsonjson
{
  "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

FieldTypeRequiredDescription
destination.chainIdnumberYesActive chain id (1, 137, 8453)
destination.addressstringYesDestination wallet address (0x + 40 hex)
destination.tokenAddressstringYesDestination token contract address (0x + 40 hex)
venuestring | nullNoFree-form venue label (max 120 chars)
curlbash
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.