What your policy engine last said about the limits a payout from this wallet runs into:
the wallet’s own ceiling (scope: wallet) and, when the wallet has an end_user_ref, that
end user’s (scope: end_user_ref). For reference only, before a payout: your policy engine
decides every payout on its own count, so a payout that fits here can still fail
policy_refused.
The wallet’s figure counts every payout from it. The end user’s counts the payouts that
name them as end_user_ref, from any wallet, to addresses outside your whitelist. A
payout to a whitelisted address goes without a request signature, so your engine does
not take its end_user_ref on trust: it counts it under the reserved reference
system:whitelisted, shared by every payout to your whitelist, and it is not in the end
user’s figure. Moves between your own wallets count against no limit.
Citadel computes no limit. Your engine signs its counters with every payout it approves,
and this is the last one it signed for the wallet and for its end user. Each counter is as
of its as_of: since then, spends older than the window have rolled off, and payouts your
engine signed later are not in it until their decision arrives. By window_end, everything
counted in it has rolled off. Until your engine approves a payout from the wallet or for
its end user, there are no counters: limits is empty — an unknown ceiling, not a zero.
network is required. 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.
Available options:
mainnet,
testnet
Response
The wallet's limits, as your policy engine last signed them.
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.
Empty until your policy engine approves a payout from the wallet or for its end user.
Show child attributes
{"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-wallets-limits","slug":"/api-reference/wallets/get-a-wallets-limits","pageMetadata":{"openapi":"/openapi.yaml get /wallets/{reference}/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","href":"/api-reference/wallets/get-a-wallets-limits","title":"Get a wallet's limits"},"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: [\"What your policy engine last said about the limits a payout from this wallet runs into:\\nthe wallet’s own ceiling (\", _jsx(_components.code, {\n children: \"scope: wallet\"\n }), \") and, when the wallet has an \", _jsx(_components.code, {\n children: \"end_user_ref\"\n }), \", that\\nend user’s (\", _jsx(_components.code, {\n children: \"scope: end_user_ref\"\n }), \"). 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\", _jsx(_components.code, {\n children: \"policy_refused\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The wallet’s figure counts every payout from it. The end user’s counts the payouts that\\nname them as \", _jsx(_components.code, {\n children: \"end_user_ref\"\n }), \", 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 \", _jsx(_components.code, {\n children: \"end_user_ref\"\n }), \" on trust: it counts it under the reserved reference\\n\", _jsx(_components.code, {\n children: \"system:whitelisted\"\n }), \", 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 }), \"\\n\", _jsxs(_components.p, {\n children: [\"Citadel 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 \", _jsx(_components.code, {\n children: \"as_of\"\n }), \": 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 \", _jsx(_components.code, {\n children: \"window_end\"\n }), \", 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: \", _jsx(_components.code, {\n children: \"limits\"\n }), \" is empty — an unknown ceiling, not a zero.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"network\"\n }), \" is required. Needs the \", _jsx(_components.code, {\n children: \"read\"\n }), \" scope. A wallet outside the key’s vaults answers\\n\", _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}/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","href":"/api-reference/wallets/get-a-wallets-limits","title":"Get a wallet's limits"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Wallets"],"operationId":"getWalletLimits","summary":"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","parameters":["92ee5875-91e7-45d6-a58f-538bcc5c6e27","9264ab90-eb96-4382-b7e1-ab69cd68ee56"],"responses":{"200":"a22b761c-c5e8-4b59-9646-872fac5b94e2","401":"c80f906c-b0ef-47c6-8104-178f987369c9","403":"c9d22fa3-dec4-4579-8ca4-a703fa665001","404":"42eebf4b-f176-4fea-8cc3-3176f14dfbc8","422":"6ba1e599-a318-4b22-b509-09237613f4ef"},"method":"get","type":"path","servers":["825d9789-7332-4a65-b039-b330384d4003"],"security":["24aebd70-fdbd-4dae-a4a9-d627e2d2711f"],"path":"/wallets/{reference}/limits","baseUrlOptions":["https://api.citadel.example/api/v1"],"title":"Get a wallet's limits","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"92ee5875-91e7-45d6-a58f-538bcc5c6e27":{"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"}},"9264ab90-eb96-4382-b7e1-ab69cd68ee56":{"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":{"a22b761c-c5e8-4b59-9646-872fac5b94e2":{"description":"The wallet's limits, as your policy engine last signed them.","content":{"application/json":{"schema":{"type":"object","required":["reference","chain","network","end_user_ref","limits"],"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>"},"end_user_ref":{"type":"string","description":"The wallet's end user, whose limits `scope: end_user_ref` rows are.","isRequired":true,"uniqueKey":"end_user_ref","typeLabel":"string"},"limits":{"type":"array","description":"Empty until your policy engine approves a payout from the wallet or for its end user.","items":{"type":"object","required":["scope","asset","window","limit","used","remaining","window_start","window_end","as_of"],"properties":{"scope":{"type":"string","enum":["wallet","end_user_ref"],"description":"`wallet` — the wallet's own ceiling, over every payout from it; `end_user_ref` — its end user's, over the payouts that name them from any wallet, except those to your whitelist (counted under `system:whitelisted`).","isRequired":true,"uniqueKey":"limits.items.[INDEX].scope","typeLabel":"enum\u003cstring>"},"asset":{"type":"string","description":"The asset as your policy document counts it: its asset key (`USDT/6`).","isRequired":true,"uniqueKey":"limits.items.[INDEX].asset","typeLabel":"string"},"window":{"type":"string","description":"The rolling window, as your policy engine writes a duration (`24h0m0s`).","isRequired":true,"uniqueKey":"limits.items.[INDEX].window","typeLabel":"string"},"limit":{"oneOf":[{"type":"string","description":"The ceiling over the window, in base units.","isRequired":true,"uniqueKey":"limits.items.[INDEX].limit.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ceiling over the window, in base units.","isRequired":true,"uniqueKey":"limits.items.[INDEX].limit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.items.[INDEX].limit","typeLabel":"string | null"},"used":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"limits.items.[INDEX].used","typeLabel":"string"},"remaining":{"oneOf":[{"type":"string","description":"`limit - used`, in base units.","isRequired":true,"uniqueKey":"limits.items.[INDEX].remaining.oneOf.0","typeLabel":"string"},{"type":"null","description":"`limit - used`, in base units.","isRequired":true,"uniqueKey":"limits.items.[INDEX].remaining.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.items.[INDEX].remaining","typeLabel":"string | null"},"window_start":{"oneOf":[{"type":"string","format":"date-time","description":"`as_of` minus the window: the oldest spend counted.","isRequired":true,"uniqueKey":"limits.items.[INDEX].window_start.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"`as_of` minus the window: the oldest spend counted.","isRequired":true,"uniqueKey":"limits.items.[INDEX].window_start.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.items.[INDEX].window_start","typeLabel":"string\u003cdate-time> | null"},"window_end":{"oneOf":[{"type":"string","format":"date-time","description":"`as_of` plus the window: by then everything counted has rolled off.","isRequired":true,"uniqueKey":"limits.items.[INDEX].window_end.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"`as_of` plus the window: by then everything counted has rolled off.","isRequired":true,"uniqueKey":"limits.items.[INDEX].window_end.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.items.[INDEX].window_end","typeLabel":"string\u003cdate-time> | null"},"as_of":{"oneOf":[{"type":"string","format":"date-time","description":"When your policy engine signed these figures.","isRequired":true,"uniqueKey":"limits.items.[INDEX].as_of.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When your policy engine signed these figures.","isRequired":true,"uniqueKey":"limits.items.[INDEX].as_of.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"limits.items.[INDEX].as_of","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"limits.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"limits","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"reference":"user-4211","chain":"tron","network":"mainnet","end_user_ref":"user-4211","limits":[{"scope":"wallet","asset":"USDT/6","window":"24h0m0s","limit":"10000000000","used":"2500000000","remaining":"7500000000","window_start":"2026-10-07T12:00:00Z","window_end":"2026-10-09T12:00:00Z","as_of":"2026-10-08T12:00:00Z"},{"scope":"end_user_ref","asset":"USDT/6","window":"24h0m0s","limit":"1000000000","used":"900000000","remaining":"100000000","window_start":"2026-10-07T12:00:00Z","window_end":"2026-10-09T12:00:00Z","as_of":"2026-10-08T12:00:00Z"}]},"examples":{"Example":{"title":"Example","value":{"reference":"user-4211","chain":"tron","network":"mainnet","end_user_ref":"user-4211","limits":[{"scope":"wallet","asset":"USDT/6","window":"24h0m0s","limit":"10000000000","used":"2500000000","remaining":"7500000000","window_start":"2026-10-07T12:00:00Z","window_end":"2026-10-09T12:00:00Z","as_of":"2026-10-08T12:00:00Z"},{"scope":"end_user_ref","asset":"USDT/6","window":"24h0m0s","limit":"1000000000","used":"900000000","remaining":"100000000","window_start":"2026-10-07T12:00:00Z","window_end":"2026-10-09T12:00:00Z","as_of":"2026-10-08T12:00:00Z"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"c80f906c-b0ef-47c6-8104-178f987369c9":{"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"},"c9d22fa3-dec4-4579-8ca4-a703fa665001":{"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"},"42eebf4b-f176-4fea-8cc3-3176f14dfbc8":{"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"},"6ba1e599-a318-4b22-b509-09237613f4ef":{"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's limits - Citadel API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/wallets/get-a-wallets-limits.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=\"What your policy engine last said about the limits a payout from this wallet runs into: the wallet\u0026#x27;s own ceiling (scope: wallet) and, when the wallet has an end_user_ref, that end user\u0026#x27;s (scope: end_user_ref). For reference only, before a payout: your policy engine decides every payout on its own count, so a payout that fits here can still fail policy_refused. The wallet\u0026#x27;s figure counts every payout from it. The end user\u0026#x27;s counts the payouts that name them as end_user_ref, from any wallet, to addresses outside your whitelist. A payout to a whitelisted address goes without a request signature, so your engine does not take its end_user_ref on trust: it counts it under the reserved reference system:whitelisted, shared by every payout to your whitelist, and it is not in the end user\u0026#x27;s figure. Moves between your own wallets count against no limit. Citadel computes no limit. Your engine signs its counters with every payout it approves, and this is the last one it signed for the wallet and for its end user. Each counter is as of its as_of: since then, spends older than the window have rolled off, and payouts your engine signed later are not in it until their decision arrives. By window_end, everything counted in it has rolled off. Until your engine approves a payout from the wallet or for its end user, there are no counters: limits is empty — an unknown ceiling, not a zero. network is required. 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\u0026#x27;s limits - Citadel API\">\u003cmeta data-mint-head property=\"og:description\" content=\"What your policy engine last said about the limits a payout from this wallet runs into: the wallet\u0026#x27;s own ceiling (scope: wallet) and, when the wallet has an end_user_ref, that end user\u0026#x27;s (scope: end_user_ref). For reference only, before a payout: your policy engine decides every payout on its own count, so a payout that fits here can still fail policy_refused. The wallet\u0026#x27;s figure counts every payout from it. The end user\u0026#x27;s counts the payouts that name them as end_user_ref, from any wallet, to addresses outside your whitelist. A payout to a whitelisted address goes without a request signature, so your engine does not take its end_user_ref on trust: it counts it under the reserved reference system:whitelisted, shared by every payout to your whitelist, and it is not in the end user\u0026#x27;s figure. Moves between your own wallets count against no limit. Citadel computes no limit. Your engine signs its counters with every payout it approves, and this is the last one it signed for the wallet and for its end user. Each counter is as of its as_of: since then, spends older than the window have rolled off, and payouts your engine signed later are not in it until their decision arrives. By window_end, everything counted in it has rolled off. Until your engine approves a payout from the wallet or for its end user, there are no counters: limits is empty — an unknown ceiling, not a zero. network is required. 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-wallets-limits\">\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\u0026#x27;s limits - Citadel API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"What your policy engine last said about the limits a payout from this wallet runs into: the wallet\u0026#x27;s own ceiling (scope: wallet) and, when the wallet has an end_user_ref, that end user\u0026#x27;s (scope: end_user_ref). For reference only, before a payout: your policy engine decides every payout on its own count, so a payout that fits here can still fail policy_refused. The wallet\u0026#x27;s figure counts every payout from it. The end user\u0026#x27;s counts the payouts that name them as end_user_ref, from any wallet, to addresses outside your whitelist. A payout to a whitelisted address goes without a request signature, so your engine does not take its end_user_ref on trust: it counts it under the reserved reference system:whitelisted, shared by every payout to your whitelist, and it is not in the end user\u0026#x27;s figure. Moves between your own wallets count against no limit. Citadel computes no limit. Your engine signs its counters with every payout it approves, and this is the last one it signed for the wallet and for its end user. Each counter is as of its as_of: since then, spends older than the window have rolled off, and payouts your engine signed later are not in it until their decision arrives. By window_end, everything counted in it has rolled off. Until your engine approves a payout from the wallet or for its end user, there are no counters: limits is empty — an unknown ceiling, not a zero. network is required. 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-wallets-limits\">\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-wallets-limits.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","openapi":"/openapi.yaml post /wallets/{reference}/retire","href":"/api-reference/wallets/retire-a-wallet"},{"title":"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","openapi":"/openapi.yaml get /wallets/{reference}/balance","href":"/api-reference/wallets/get-a-wallet-balance"},{"title":"Get a wallet's limits","openapi":"/openapi.yaml get /wallets/{reference}/limits","href":"/api-reference/wallets/get-a-wallets-limits"}]},{"group":"Transactions","pages":[{"title":"List transactions","description":"The transactions you sent with `POST /transactions` on one network, newest first, queued\nones included. Each row is the body `GET /transactions/{id}` reads. Use it to reconcile\nyour payouts, or to catch up after missed `operation.*` webhooks.\n\nOnly what your API keys submitted is listed. Transactions Citadel makes for itself (network\nfee top-ups, sweeps between your wallets, energy) are not, nor are the ones a workflow\nsends: those are on the workflow's run (`GET /runs/{id}`, the `run.*` webhooks).\n\n`network` is required. Paged with a cursor — see Lists and pagination. Needs the `read`\nscope. A key limited to vaults lists the transactions of wallets in them.\n","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's limits - 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"]}