VaultsCreate a Vault

Create a Vault

Creates a Vault with its full derivation structure in a single request. The RouteMap must contain the special "network" key (its variants are upserted into the global Network registry by coinType). The other segments become Routes: order is normalized from 0 in the order of the source values. The Vault is created in draft status (lockedAt = null). D1 doesn't support transactions, so on a partial failure a best-effort cleanup is performed.

curl -X POST "https://policy-engine-rest.ezig.workers.dev/api/v1/vaults" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
  "vault": {
    "code": "acme-otc",
    "name": "ACME OTC",
    "description": "example_string",
    "walletServiceUrl": "https://wallet.example.com"
  },
  "routes": {
    "network": {
      "order": 0,
      "name": "Network",
      "dynamic": false,
      "variants": [
        {
          "id": 195,
          "code": "tron_network",
          "name": "Tron"
        }
      ]
    },
    "index": {
      "order": 1,
      "name": "Index",
      "dynamic": true
    },
    "asset": {
      "order": 2,
      "name": "Asset",
      "dynamic": false,
      "variants": [
        {
          "id": 0,
          "code": "a7a5",
          "name": "A7A5"
        },
        {
          "id": 1,
          "code": "usdt",
          "name": "USDT"
        }
      ]
    }
  }
}'
{
  "id": "cmr3f41z20001psp7phmyapw3",
  "code": "test_vault",
  "name": "Test Vault",
  "description": "example_string",
  "lockedAt": "2026-07-02T11:25:15.134000Z",
  "walletServiceUrl": "example_string",
  "createdAt": "2026-07-02T11:25:15.134000Z",
  "updatedAt": "2026-07-02T11:25:15.134000Z",
  "networks": [
    {
      "id": "cmr3f41z20001psp7phmyapw3",
      "coinType": 195,
      "code": "tron_network",
      "slug": "tron",
      "name": "Tron",
      "description": "example_string",
      "logoUri": "https://cdn.example.com/networks/tron.png",
      "type": "TRON",
      "createdAt": "2026-07-02T11:25:15.134000Z",
      "updatedAt": "2026-07-02T11:25:15.134000Z"
    }
  ],
  "routes": [
    {
      "id": "cmr3f41z20001psp7phmyapw3",
      "vaultId": "example_string",
      "order": 0,
      "code": "purpose",
      "name": "John Doe",
      "description": "example_string",
      "dynamic": true,
      "createdAt": "2026-07-02T11:25:15.134000Z",
      "updatedAt": "2026-07-02T11:25:15.134000Z",
      "variants": [
        {
          "id": "cmr3f41z20001psp7phmyapw3",
          "routeId": "example_string",
          "pathId": 1,
          "code": "usdt",
          "name": "John Doe",
          "description": "example_string",
          "enabled": true,
          "tokenId": "example_string",
          "createdAt": "2026-07-02T11:25:15.134000Z",
          "updatedAt": "2026-07-02T11:25:15.134000Z"
        }
      ]
    }
  ]
}
POST
/api/v1/vaults
POST
Base URLstring

Target server for requests. Edit to use your own host.

Bearer Token
Bearer Tokenstring
Required

Session token. Mobile/services. The web uses a cookie.

Session token. Mobile/services. The web uses a cookie.
API Key (cookie: session_token)
session_tokenstring
Required

API key (sent in cookie)

Content-Typestring
Required

The media type of the request body

Options: application/json
routesobject
Required

RouteMap: the key is the segment code. The special "network" key is required (static; its variants go into the global Network registry, id = SLIP-0044 coinType). The other segments become the Vault's Routes, with order normalized from 0.

Request Preview
Response

Response will appear here after sending the request

Authentication

header
Authorizationstring
Required

Bearer token. Session token. Mobile/services. The web uses a cookie.

path
parameterstring
Required

API Key for authentication. Provide your API key in the cookie.

Body

application/json
vaultobject
Required
routesobject
Required

RouteMap: the key is the segment code. The special "network" key is required (static; its variants go into the global Network registry, id = SLIP-0044 coinType). The other segments become the Vault's Routes, with order normalized from 0.

Example:
{"network":{"order":0,"name":"Network","dynamic":false,"variants":[{"id":195,"code":"tron_network","name":"Tron"}]},"index":{"order":1,"name":"Index","dynamic":true},"asset":{"order":2,"name":"Asset","dynamic":false,"variants":[{"id":0,"code":"a7a5","name":"A7A5"},{"id":1,"code":"usdt","name":"USDT"}]}}

Responses