The ledger’s balance of one wallet, per asset, in base units. spendable is
balance - escrow: what is on chain minus what transactions in flight have reserved.
The wallet’s figures include the token sub-accounts Citadel keeps under it (a TON
jetton wallet, a Solana token account): a token deposited there counts here, and so
does the coin a jetton wallet holds for its fees. An asset Citadel does not list in
GET /assets — never listed, or disabled since — reads as its contract, with
decimals: null, as in GET /balances.
Needs the read scope. A wallet outside the key’s vaults answers 404.
An API key minted in the console (ctd_…). Authenticates; never authorizes funds. A key
carries scopes (read, wallets.write, transactions.write, events.write,
webhooks.write, policy.write) and may be limited to vaults, to IP addresses, and in
lifetime — see Authentication.
The network the data lives on. Required — there is no default network: without it,
422 network_required. A wallet named by its id on another network: 422 network_mismatch.
The network the data lives on. Required wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
The network the data lives on. Required wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Citadel API","colors":{"primary":"#1F5BD8","light":"#5B8BEF","dark":"#163F99"},"api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python","go"]}},"integrations":{"telemetry":{"enabled":false}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"hasAudioNarration":false,"customDomains":[],"gitSource":{"type":"github","owner":"local","repo":"local","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"local","isBase":true},"buildId":"local","clientVersion":"0.0.4088"},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false,"isLoggedInCli":false,"mintExport":{}},"customCss":[],"page":{"pagePath":"api-reference/wallets/get-a-wallet-balance","slug":"/api-reference/wallets/get-a-wallet-balance","pageMetadata":{"openapi":"/openapi.yaml get /wallets/{reference}/balance","description":"The ledger's balance of one wallet, per asset, in base units. `spendable` is\n`balance - escrow`: what is on chain minus what transactions in flight have reserved.\nThe wallet's figures include the token sub-accounts Citadel keeps under it (a TON\njetton wallet, a Solana token account): a token deposited there counts here, and so\ndoes the coin a jetton wallet holds for its fees. An asset Citadel does not list in\n`GET /assets` — never listed, or disabled since — reads as its contract, with\n`decimals: null`, as in `GET /balances`.\n\nNeeds the `read` scope. A wallet outside the key's vaults answers `404`.\n","href":"/api-reference/wallets/get-a-wallet-balance","title":"Get a wallet balance"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"The ledger’s balance of one wallet, per asset, in base units. \", _jsx(_components.code, {\n children: \"spendable\"\n }), \" is\\n\", _jsx(_components.code, {\n children: \"balance - escrow\"\n }), \": what is on chain minus what transactions in flight have reserved.\\nThe wallet’s figures include the token sub-accounts Citadel keeps under it (a TON\\njetton wallet, a Solana token account): a token deposited there counts here, and so\\ndoes the coin a jetton wallet holds for its fees. An asset Citadel does not list in\\n\", _jsx(_components.code, {\n children: \"GET /assets\"\n }), \" — never listed, or disabled since — reads as its contract, with\\n\", _jsx(_components.code, {\n children: \"decimals: null\"\n }), \", as in \", _jsx(_components.code, {\n children: \"GET /balances\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Needs the \", _jsx(_components.code, {\n children: \"read\"\n }), \" scope. A wallet outside the key’s vaults answers \", _jsx(_components.code, {\n children: \"404\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"/openapi.yaml get /wallets/{reference}/balance","description":"The ledger's balance of one wallet, per asset, in base units. `spendable` is\n`balance - escrow`: what is on chain minus what transactions in flight have reserved.\nThe wallet's figures include the token sub-accounts Citadel keeps under it (a TON\njetton wallet, a Solana token account): a token deposited there counts here, and so\ndoes the coin a jetton wallet holds for its fees. An asset Citadel does not list in\n`GET /assets` — never listed, or disabled since — reads as its contract, with\n`decimals: null`, as in `GET /balances`.\n\nNeeds the `read` scope. A wallet outside the key's vaults answers `404`.\n","href":"/api-reference/wallets/get-a-wallet-balance","title":"Get a wallet balance"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Wallets"],"operationId":"getWalletBalance","summary":"Get a wallet balance","description":"The ledger's balance of one wallet, per asset, in base units. `spendable` is\n`balance - escrow`: what is on chain minus what transactions in flight have reserved.\nThe wallet's figures include the token sub-accounts Citadel keeps under it (a TON\njetton wallet, a Solana token account): a token deposited there counts here, and so\ndoes the coin a jetton wallet holds for its fees. An asset Citadel does not list in\n`GET /assets` — never listed, or disabled since — reads as its contract, with\n`decimals: null`, as in `GET /balances`.\n\nNeeds the `read` scope. A wallet outside the key's vaults answers `404`.\n","parameters":["cd6ec3ae-d94d-4a6e-a9f9-7d07baf3ab13","78c23bb6-e532-47f0-ba2e-a37f6200d653"],"responses":{"200":"14ba38a7-64b9-4918-bd8b-0d14884dbcd3","401":"1c0397c9-af14-49fc-9a58-d0411064052f","403":"f7be0980-e613-4f34-bdc8-b4eeefb68a12","404":"1bee21ca-17bc-4414-b7fb-83ac8721423e","422":"45c86b58-3000-4859-bf70-90604314ad36"},"method":"get","type":"path","servers":["825d9789-7332-4a65-b039-b330384d4003"],"security":["24aebd70-fdbd-4dae-a4a9-d627e2d2711f"],"path":"/wallets/{reference}/balance","baseUrlOptions":["https://api.citadel.example/api/v1"],"title":"Get a wallet balance","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"cd6ec3ae-d94d-4a6e-a9f9-7d07baf3ab13":{"name":"reference","in":"path","required":true,"description":"Your reference for the wallet, or its id.","schema":{"type":"string","isRequired":true,"description":"Your reference for the wallet, or its id.","uniqueKey":"","typeLabel":"string"}},"78c23bb6-e532-47f0-ba2e-a37f6200d653":{"name":"network","in":"query","required":true,"description":"The network the data lives on. Required — there is no default network: without it,\n`422 network_required`. A wallet named by its id on another network: `422 network_mismatch`.\n","schema":{"type":"string","enum":["mainnet","testnet"],"description":"The network the data lives on. Required — there is no default network: without it,\n`422 network_required`. A wallet named by its id on another network: `422 network_mismatch`.\n\nThe network the data lives on. Required wherever it appears in a request — there is no\ndefault network. One your installation does not serve: `422 network_not_served`.\n","isRequired":true,"uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"responses":{"14ba38a7-64b9-4918-bd8b-0d14884dbcd3":{"description":"Balances per asset.","content":{"application/json":{"schema":{"type":"object","required":["reference","chain","network","balances"],"properties":{"reference":{"type":"string","isRequired":true,"uniqueKey":"reference","typeLabel":"string"},"chain":{"type":"string","enum":["tron","evm","solana","ton"],"isRequired":true,"uniqueKey":"chain","typeLabel":"enum\u003cstring>"},"network":{"type":"string","enum":["mainnet","testnet"],"description":"The network the data lives on. Required wherever it appears in a request — there is no\ndefault network. One your installation does not serve: `422 network_not_served`.\n","isRequired":true,"uniqueKey":"network","typeLabel":"enum\u003cstring>"},"balances":{"type":"array","items":{"type":"object","required":["asset","balance","escrow","staked","spendable"],"properties":{"asset":{"type":"string","description":"Catalog symbol; the contract when the catalog has none.","isRequired":true,"uniqueKey":"balances.items.[INDEX].asset","typeLabel":"string"},"balance":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"balances.items.[INDEX].balance","typeLabel":"string"},"escrow":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"balances.items.[INDEX].escrow","typeLabel":"string"},"staked":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"balances.items.[INDEX].staked","typeLabel":"string"},"spendable":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"balances.items.[INDEX].spendable","typeLabel":"string"},"contract":{"oneOf":[{"type":"string","description":"null for the native coin.","uniqueKey":"balances.items.[INDEX].contract.oneOf.0","typeLabel":"string"},{"type":"null","description":"null for the native coin.","uniqueKey":"balances.items.[INDEX].contract.oneOf.1","typeLabel":"null"}],"uniqueKey":"balances.items.[INDEX].contract","typeLabel":"string | null"},"decimals":{"oneOf":[{"type":"integer","description":"null for an asset the catalog does not list.","uniqueKey":"balances.items.[INDEX].decimals.oneOf.0","typeLabel":"integer"},{"type":"null","description":"null for an asset the catalog does not list.","uniqueKey":"balances.items.[INDEX].decimals.oneOf.1","typeLabel":"null"}],"uniqueKey":"balances.items.[INDEX].decimals","typeLabel":"integer | null"}},"uniqueKey":"balances.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"balances","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"reference":"user-4211","chain":"tron","network":"mainnet","balances":[{"asset":"TRX","contract":null,"decimals":6,"balance":"25000000","escrow":"0","staked":"0","spendable":"25000000"},{"asset":"USDT","contract":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","decimals":6,"balance":"150000000","escrow":"50000000","staked":"0","spendable":"100000000"}]},"examples":{"Example":{"title":"Example","value":{"reference":"user-4211","chain":"tron","network":"mainnet","balances":[{"asset":"TRX","contract":null,"decimals":6,"balance":"25000000","escrow":"0","staked":"0","spendable":"25000000"},{"asset":"USDT","contract":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","decimals":6,"balance":"150000000","escrow":"50000000","staked":"0","spendable":"100000000"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"1c0397c9-af14-49fc-9a58-d0411064052f":{"description":"Missing, unknown, revoked or expired API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable; not stable.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code, where one exists.","uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"unauthorized"},"examples":{"Example":{"title":"Example","value":{"error":"unauthorized"}}},"exampleType":"examples"}},"exampleType":"examples"},"f7be0980-e613-4f34-bdc8-b4eeefb68a12":{"description":"The key may not make this call. Nothing was created or reserved. `code`:\n`ip_not_allowed` — the call came from an address outside the key's IP allowlist;\n`scope_missing` — the key lacks the scope the endpoint needs;\n`vault_limited` — the key is limited to vaults and the wallet is outside them, or the\nendpoint drives or lists workflows, manages webhook endpoints, reads webhook deliveries,\nreads or changes the policy document, or asks for or reads a report.\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable; not stable.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code, where one exists.","uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"ip_not_allowed":{"title":"ip_not_allowed","value":{"error":"request from 198.51.100.1 is not allowed for this key","code":"ip_not_allowed"}},"scope_missing":{"title":"scope_missing","value":{"error":"this key lacks the transactions.write scope","code":"scope_missing"}},"vault_limited":{"title":"vault_limited","value":{"error":"wallet is outside this key's vaults","code":"vault_limited"}}},"exampleType":"examples"}},"exampleType":"examples"},"1bee21ca-17bc-4414-b7fb-83ac8721423e":{"description":"No such resource in your organization, or outside the key's vaults.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable; not stable.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code, where one exists.","uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"operation not found"},"examples":{"Example":{"title":"Example","value":{"error":"operation not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"45c86b58-3000-4859-bf70-90604314ad36":{"description":"The request was understood and refused. Nothing was created or reserved. A request\nwithout `network` is refused with `network_required`, a network your installation does\nnot serve with `network_not_served`, a wallet id from another network with\n`network_mismatch`. A list refuses a cursor it did not issue with `invalid_cursor`, and an\nunknown filter value, a filter sent as a list or an object instead of one string, or a\n`limit` out of range without a `code`; so does a webhook retry of a period without `from`.\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable; not stable.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code, where one exists.","uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"refused":{"title":"refused","value":{"error":"wallet has no address yet"}},"network_required":{"title":"network_required","value":{"error":"network is required (mainnet, testnet)","code":"network_required"}},"network_not_served":{"title":"network_not_served","value":{"error":"network \"devnet\" is not served here (mainnet, testnet)","code":"network_not_served"}},"network_mismatch":{"title":"network_mismatch","value":{"error":"wallet 0199a3c4-7f1e-7b11-9c2e-3f4a5b6c7d8e lives on testnet, not mainnet","code":"network_mismatch"}},"invalid_cursor":{"title":"invalid_cursor","value":{"error":"cursor is not one this API issued","code":"invalid_cursor"}},"invalid_filter":{"title":"invalid_filter","value":{"error":"unknown status settled (created, aml_pending, awaiting_approval, …)"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"24aebd70-fdbd-4dae-a4a9-d627e2d2711f":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key minted in the console (`ctd_…`). Authenticates; never authorizes funds. A key\ncarries scopes (`read`, `wallets.write`, `transactions.write`, `events.write`,\n`webhooks.write`, `policy.write`) and may be limited to vaults, to IP addresses, and in\nlifetime — see Authentication.\n","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"825d9789-7332-4a65-b039-b330384d4003":{"url":"https://api.citadel.example/api/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An API key minted in the console (`ctd_…`). Authenticates; never authorizes funds. A key\ncarries scopes (`read`, `wallets.write`, `transactions.write`, `events.write`,\n`webhooks.write`, `policy.write`) and may be limited to vaults, to IP addresses, and in\nlifetime — see Authentication.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An API key minted in the console (`ctd_…`). Authenticates; never authorizes funds. A key\ncarries scopes (`read`, `wallets.write`, `transactions.write`, `events.write`,\n`webhooks.write`, `policy.write`) and may be limited to vaults, to IP addresses, and in\nlifetime — see Authentication.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"localhost","siteName":"Citadel API","title":"Get a wallet balance - Citadel API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/wallets/get-a-wallet-balance.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The ledger\u0026#x27;s balance of one wallet, per asset, in base units. spendable is balance - escrow: what is on chain minus what transactions in flight have reserved. The wallet\u0026#x27;s figures include the token sub-accounts Citadel keeps under it (a TON jetton wallet, a Solana token account): a token deposited there counts here, and so does the coin a jetton wallet holds for its fees. An asset Citadel does not list in GET /assets — never listed, or disabled since — reads as its contract, with decimals: null, as in GET /balances. Needs the read scope. A wallet outside the key\u0026#x27;s vaults answers 404.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Citadel API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get a wallet balance - Citadel API\">\u003cmeta data-mint-head property=\"og:description\" content=\"The ledger\u0026#x27;s balance of one wallet, per asset, in base units. spendable is balance - escrow: what is on chain minus what transactions in flight have reserved. The wallet\u0026#x27;s figures include the token sub-accounts Citadel keeps under it (a TON jetton wallet, a Solana token account): a token deposited there counts here, and so does the coin a jetton wallet holds for its fees. An asset Citadel does not list in GET /assets — never listed, or disabled since — reads as its contract, with decimals: null, as in GET /balances. Needs the read scope. A wallet outside the key\u0026#x27;s vaults answers 404.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Citadel API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://local./api-reference/wallets/get-a-wallet-balance\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get a wallet balance - Citadel API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The ledger\u0026#x27;s balance of one wallet, per asset, in base units. spendable is balance - escrow: what is on chain minus what transactions in flight have reserved. The wallet\u0026#x27;s figures include the token sub-accounts Citadel keeps under it (a TON jetton wallet, a Solana token account): a token deposited there counts here, and so does the coin a jetton wallet holds for its fees. An asset Citadel does not list in GET /assets — never listed, or disabled since — reads as its contract, with decimals: null, as in GET /balances. Needs the read scope. A wallet outside the key\u0026#x27;s vaults answers 404.\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Citadel API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1F5BD8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://local./api-reference/wallets/get-a-wallet-balance\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/wallets/get-a-wallet-balance.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Citadel API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Citadel API","nav":{"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","groups":[{"group":"Wallets","pages":[{"title":"List wallets","openapi":"/openapi.yaml get /wallets","href":"/api-reference/wallets/list-wallets"},{"title":"Issue a deposit wallet","openapi":"/openapi.yaml post /wallets","href":"/api-reference/wallets/issue-a-deposit-wallet"},{"title":"Issue wallets in a batch","openapi":"/openapi.yaml post /wallets/batch","href":"/api-reference/wallets/issue-wallets-in-a-batch"},{"title":"Get a wallet","openapi":"/openapi.yaml get /wallets/{reference}","href":"/api-reference/wallets/get-a-wallet"},{"title":"Update a wallet","openapi":"/openapi.yaml patch /wallets/{reference}","href":"/api-reference/wallets/update-a-wallet"},{"title":"Retire a wallet","description":"Takes an active wallet out of circulation — a user who left, an address you no longer show.\nIt ends `retired` for good: a retired wallet does not come back, and a new address for the\nuser is a new wallet, under a new reference. The `wallet.retired` webhook follows.\n\nA retired wallet is out of circulation, not out of sight:\n\n- its address is still watched: a deposit that still arrives on it is credited to it, and\n reported as any deposit is (`blockchain_event.confirmed`, `GET /transfers`);\n- it still sends with `POST /transactions`, so you can move out what arrives;\n- workflows no longer pick it, and a workflow step does not send from it;\n- `GET /wallets` lists it with `status: retired`, and `GET /wallets/{reference}` reads it.\n\nRetiring it again answers the same `200`, without a second webhook. A wallet with no address\ndoes not retire: `409 not_retirable` while it is `creating`, and for a `failed` one. A token\nsub-account Citadel keeps under a wallet follows that wallet: it is `retired` with it, also\none Citadel opens later, so no workflow reaches the wallet through its address. Retiring one\non its own is refused with `422`.\n\n`network` is required: a reference names a wallet within it. Needs the `wallets.write`\nscope. A wallet outside the key's vaults answers `404`.\n","openapi":"/openapi.yaml post /wallets/{reference}/retire","href":"/api-reference/wallets/retire-a-wallet"},{"title":"Get a wallet balance","openapi":"/openapi.yaml get /wallets/{reference}/balance","href":"/api-reference/wallets/get-a-wallet-balance"},{"title":"Get a wallet's limits","description":"What your policy engine last said about the limits a payout from this wallet runs into:\nthe wallet's own ceiling (`scope: wallet`) and, when the wallet has an `end_user_ref`, that\nend user's (`scope: end_user_ref`). For reference only, before a payout: your policy engine\ndecides every payout on its own count, so a payout that fits here can still fail\n`policy_refused`.\n\nThe wallet's figure counts every payout from it. The end user's counts the payouts that\nname them as `end_user_ref`, from any wallet, to addresses outside your whitelist. A\npayout to a whitelisted address goes without a request signature, so your engine does\nnot take its `end_user_ref` on trust: it counts it under the reserved reference\n`system:whitelisted`, shared by every payout to your whitelist, and it is not in the end\nuser's figure. Moves between your own wallets count against no limit.\n\nCitadel computes no limit. Your engine signs its counters with every payout it approves,\nand this is the last one it signed for the wallet and for its end user. Each counter is as\nof its `as_of`: since then, spends older than the window have rolled off, and payouts your\nengine signed later are not in it until their decision arrives. By `window_end`, everything\ncounted in it has rolled off. Until your engine approves a payout from the wallet or for\nits end user, there are no counters: `limits` is empty — an unknown ceiling, not a zero.\n\n`network` is required. Needs the `read` scope. A wallet outside the key's vaults answers\n`404`.\n","openapi":"/openapi.yaml get /wallets/{reference}/limits","href":"/api-reference/wallets/get-a-wallets-limits"}]},{"group":"Transactions","pages":[{"title":"List transactions","openapi":"/openapi.yaml get /transactions","href":"/api-reference/transactions/list-transactions"},{"title":"Send a transaction","openapi":"/openapi.yaml post /transactions","href":"/api-reference/transactions/send-a-transaction"},{"title":"Estimate a transaction","openapi":"/openapi.yaml post /transactions/estimate","href":"/api-reference/transactions/estimate-a-transaction"},{"title":"Get a transaction","openapi":"/openapi.yaml get /transactions/{id}","href":"/api-reference/transactions/get-a-transaction"},{"title":"Cancel a transaction","openapi":"/openapi.yaml post /transactions/{id}/cancel","href":"/api-reference/transactions/cancel-a-transaction"},{"title":"Speed up a stuck EVM transaction","openapi":"/openapi.yaml post /transactions/{id}/speedup","href":"/api-reference/transactions/speed-up-a-stuck-evm-transaction"},{"title":"Validate an address","openapi":"/openapi.yaml get /addresses/validate","href":"/api-reference/transactions/validate-an-address"}]},{"group":"Transfers","pages":[{"title":"List transfers","openapi":"/openapi.yaml get /transfers","href":"/api-reference/transfers/list-transfers"},{"title":"Get a transfer","openapi":"/openapi.yaml get /transfers/{tx_hash}","href":"/api-reference/transfers/get-a-transfer"}]},{"group":"Reference","pages":[{"title":"List networks and chains","openapi":"/openapi.yaml get /networks","href":"/api-reference/reference/list-networks-and-chains"},{"title":"List assets","openapi":"/openapi.yaml get /assets","href":"/api-reference/reference/list-assets"},{"title":"List asset prices","openapi":"/openapi.yaml get /prices","href":"/api-reference/reference/list-asset-prices"},{"title":"Get network status","openapi":"/openapi.yaml get /status","href":"/api-reference/reference/get-network-status"}]},{"group":"Organization","pages":[{"title":"List vaults","openapi":"/openapi.yaml get /vaults","href":"/api-reference/organization/list-vaults"},{"title":"Get organization balances","openapi":"/openapi.yaml get /balances","href":"/api-reference/organization/get-organization-balances"},{"title":"Get the calling key","openapi":"/openapi.yaml get /me","href":"/api-reference/organization/get-the-calling-key"},{"title":"Get the billing balance","openapi":"/openapi.yaml get /billing/balance","href":"/api-reference/organization/get-the-billing-balance"}]},{"group":"Approvals","pages":[{"title":"List approvals","openapi":"/openapi.yaml get /approvals","href":"/api-reference/approvals/list-approvals"}]},{"group":"Policy","pages":[{"title":"Get the policy document","openapi":"/openapi.yaml get /policy","href":"/api-reference/policy/get-the-policy-document"},{"title":"Draft the policy document","openapi":"/openapi.yaml post /policy/drafts","href":"/api-reference/policy/draft-the-policy-document"},{"title":"Get a policy draft","openapi":"/openapi.yaml get /policy/drafts/{version}","href":"/api-reference/policy/get-a-policy-draft"},{"title":"Publish a signed policy draft","openapi":"/openapi.yaml post /policy/publish","href":"/api-reference/policy/publish-a-signed-policy-draft"}]},{"group":"Workflows","pages":[{"title":"Start workflows by event","openapi":"/openapi.yaml post /events/{name}","href":"/api-reference/workflows/start-workflows-by-event"},{"title":"List workflow runs","openapi":"/openapi.yaml get /runs","href":"/api-reference/workflows/list-workflow-runs"},{"title":"Get a workflow run","openapi":"/openapi.yaml get /runs/{id}","href":"/api-reference/workflows/get-a-workflow-run"},{"title":"Cancel a workflow run","openapi":"/openapi.yaml post /runs/{id}/cancel","href":"/api-reference/workflows/cancel-a-workflow-run"},{"title":"List workflows","openapi":"/openapi.yaml get /workflows","href":"/api-reference/workflows/list-workflows"}]},{"group":"Webhook endpoints","pages":[{"title":"List webhook endpoints","openapi":"/openapi.yaml get /webhook_endpoints","href":"/api-reference/webhook-endpoints/list-webhook-endpoints"},{"title":"Add a webhook endpoint","openapi":"/openapi.yaml post /webhook_endpoints","href":"/api-reference/webhook-endpoints/add-a-webhook-endpoint"},{"title":"Get a webhook endpoint","openapi":"/openapi.yaml get /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/get-a-webhook-endpoint"},{"title":"Remove a webhook endpoint","openapi":"/openapi.yaml delete /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/remove-a-webhook-endpoint"},{"title":"Change a webhook endpoint","openapi":"/openapi.yaml patch /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/change-a-webhook-endpoint"},{"title":"Send a test delivery","openapi":"/openapi.yaml post /webhook_endpoints/{id}/test","href":"/api-reference/webhook-endpoints/send-a-test-delivery"},{"title":"Rotate the signing secret","openapi":"/openapi.yaml post /webhook_endpoints/{id}/rotate_secret","href":"/api-reference/webhook-endpoints/rotate-the-signing-secret"}]},{"group":"Webhook deliveries","pages":[{"title":"List webhook deliveries","openapi":"/openapi.yaml get /webhook_deliveries","href":"/api-reference/webhook-deliveries/list-webhook-deliveries"},{"title":"Retry a failed delivery","openapi":"/openapi.yaml post /webhook_deliveries/{id}/retry","href":"/api-reference/webhook-deliveries/retry-a-failed-delivery"},{"title":"Retry the failed deliveries of a period","openapi":"/openapi.yaml post /webhook_deliveries/retry","href":"/api-reference/webhook-deliveries/retry-the-failed-deliveries-of-a-period"}]},{"group":"Reports","pages":[{"title":"Ask for a report","openapi":"/openapi.yaml post /reports","href":"/api-reference/reports/ask-for-a-report"},{"title":"Get a report","openapi":"/openapi.yaml get /reports/{id}","href":"/api-reference/reports/get-a-report"},{"title":"Download a report's file","openapi":"/openapi.yaml get /reports/{id}/file","href":"/api-reference/reports/download-a-reports-file"}]},{"group":"API Reference","pages":[{"title":"Operation*","openapi":"/openapi.yaml webhook operation","href":"/api-reference/operation*"},{"title":"Blockchain event*","openapi":"/openapi.yaml webhook blockchain_event","href":"/api-reference/blockchain_event*"},{"title":"Run*","openapi":"/openapi.yaml webhook run","href":"/api-reference/run*"},{"title":"Wallet*","openapi":"/openapi.yaml webhook wallet","href":"/api-reference/wallet*"}]}]}]},"basePath":"","title":"Get a wallet balance - Citadel API","buildId":"3c5c97139bf8","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DGp7Pxzx.js","utils-8Jv-1L07.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CLSsw4wM.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-RrVIaDh7.js","snippetPresets-DSI4wgEf.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-W2e9g_oX.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CDpwfEDw.js","shallow-Dq5-SwG1.js","getApiPlaygroundDisplay-basMZYRO.js","CodeSnippet-CWKJfCQt.js","CodeSnippets-xDLW1FEv.js","Page-Dc5qkJG8.js","getPastedJson-DObxGgIR.js","icon-HMNWawTa.js","MethodPill-DA_6XsWN.js","DuplicateIcon-DK5o2DOi.js","createIcon-BhUMOhLi.js","DynamicMarkdown-Dokq7GGW.js","SectionHeading-DSaxk-9e.js","axios-vUo_bRtp.js","Markdown-BDO6y5hF.js","clsx-DfU2JnNK.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BRVLaqXg.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CxOoiG7S.js"]}