ExchainDocs
DocsAPI

APIReadsGet the bound statement

Get the bound statement

Signed statement of the honest and worst-case outflow.

GET
/v1/wallets/{walletId}/bound

honest is what the agent can still spend under the mandate now; worstCase is what can leave if the agent key and every Exchain key are compromised (x402: the Safe balance, the treasury AllowanceModule allowance and the Permit2 approval; Cardano: the wallet value capped by the period ceiling left in its datum), read at one block or slot. statement is the same payload as a JWS by the journal key.

Authorization

headerAuthorizationBearer <token>

Node Token from the Exchain console. Works for wallets this node registered; the node’s network (preprod or mainnet) decides the network of the request. Use a preprod token in the playground.

Path Parameters

walletId*string

Wallet id returned at registration: wal_ and 26 Crockford base32 characters.

Match^wal_[0-9A-HJKMNP-TV-Z]{26}$

Response Body

The bound statement.

application/json
  1. response
walletId*WalletId
Match^wal_[0-9A-HJKMNP-TV-Z]{26}$
rail*string
Value in"cardano""x402"
network*string
block?integer
slot?integer
asset*string
honest*Amount
Match^[0-9]+$
worstCase*Amount
Match^[0-9]+$
worstCaseParts*
assets?array<>

A Cardano wallet's statement per governed asset; the top-level asset, honest and worstCase describe the first.

statement*string
asOf*string
Match^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z$
Formatdate-time
schemaVersion*string

Wire schema version, "1.1" today.

Value in"1.0""1.1"
chainTip*|null
Example Request
curl -X GET 'https://cosign.exchain.network/v1/wallets/wal_01J9XK3M4N5P6Q7R8S9T0V1W2Z/bound'
Example Response
{  "v": 1,  "walletId": "wal_01M53M3ZNQQ4DDNPE4262QAZ28",  "rail": "x402",  "network": "eip155:84532",  "block": 33521874,  "asset": "eip155:84532/erc20:0x036cbd53842c5426634e7929541ec2318f3dcf7e",  "honest": "9900000",  "worstCase": "109900000",  "worstCaseParts": {    "safeBalance": "9900000",    "treasuryAllowancePerPeriod": "0",    "permit2Approval": "100000000"  },  "issuedAt": "2026-11-05T14:22:07Z",  "statement": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6Y29zaWduLmV4Y2hhaW4ubmV0d29yayNqb3VybmFsIn0.eyJ2IjoxLCJ3YWxsZXRJZCI6IndhbF8wMU01M00zWk5RUTRERE5QRTQyNjJRQVoyOCIsInJhaWwiOiJ4NDAyIiwibmV0d29yayI6ImVpcDE1NTo4NDUzMiIsImJsb2NrIjozMzUyMTg3NCwiYXNzZXQiOiJlaXAxNTU6ODQ1MzIvZXJjMjA6MHgwMzZjYmQ1Mzg0MmM1NDI2NjM0ZTc5Mjk1NDFlYzIzMThmM2RjZjdlIiwiaG9uZXN0IjoiOTkwMDAwMCIsIndvcnN0Q2FzZSI6IjEwOTkwMDAwMCIsIndvcnN0Q2FzZVBhcnRzIjp7InNhZmVCYWxhbmNlIjoiOTkwMDAwMCIsInRyZWFzdXJ5QWxsb3dhbmNlUGVyUGVyaW9kIjoiMCIsInBlcm1pdDJBcHByb3ZhbCI6IjEwMDAwMDAwMCJ9LCJpc3N1ZWRBdCI6IjIwMjYtMTEtMDVUMTQ6MjI6MDdaIn0.podv47FT8aBsRZm73yW386Wa2mZ02AJMSdD0JpsqgRNRp2rXKmxqzqgeBGz56FMpSThN1pV5th0YEBOY1UEdJQ",  "asOf": "2026-11-05T14:22:07.318Z",  "schemaVersion": "1.1",  "chainTip": {    "slot": 104118120,    "blockHash": "9a301ac2e5747e7ebeeecececd2f114f55695614277514e085211c5417d04c26"  }}

Errors

StatusCodeMeaning
401unauthorizedThe bearer credential is missing, unknown or revoked.
404not_foundThe wallet does not exist, this node did not register it, or the read token is for another wallet.
502rpc_failedThe chain could not be read; retry.
503chain_unavailableThe chain cannot be read here: no EVM RPC for the Safe’s chain, or the Cardano wallet UTxO cannot be read.

Every code and what to do about it: Errors and codes.