Where a report is: queued, running, then ready with its file, or failed. A
failed report stays failed: ask for a new one. Poll every few seconds until it ends.
Every report of your organization reads here, including the ones people asked for in the
console and the ones a workflow’s report step asked for: that step puts the report’s id
in the run’s outputs.
It takes no network: the id is enough, and the answer carries the network the report
reads. Needs the read scope. A key limited to vaults is refused with 403 vault_limited.
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 wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
The file GET /reports/{id}/file streams; null until ready.
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/reports/get-a-report","slug":"/api-reference/reports/get-a-report","pageMetadata":{"openapi":"/openapi.yaml get /reports/{id}","description":"Where a report is: `queued`, `running`, then `ready` with its `file`, or `failed`. A\nfailed report stays failed: ask for a new one. Poll every few seconds until it ends.\n\nEvery report of your organization reads here, including the ones people asked for in the\nconsole and the ones a workflow's report step asked for: that step puts the report's `id`\nin the run's outputs.\n\nIt takes no `network`: the id is enough, and the answer carries the `network` the report\nreads. Needs the `read` scope. A key limited to vaults is refused with `403 vault_limited`.\n","href":"/api-reference/reports/get-a-report","title":"Get a report"},"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: [\"Where a report is: \", _jsx(_components.code, {\n children: \"queued\"\n }), \", \", _jsx(_components.code, {\n children: \"running\"\n }), \", then \", _jsx(_components.code, {\n children: \"ready\"\n }), \" with its \", _jsx(_components.code, {\n children: \"file\"\n }), \", or \", _jsx(_components.code, {\n children: \"failed\"\n }), \". A\\nfailed report stays failed: ask for a new one. Poll every few seconds until it ends.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Every report of your organization reads here, including the ones people asked for in the\\nconsole and the ones a workflow’s report step asked for: that step puts the report’s \", _jsx(_components.code, {\n children: \"id\"\n }), \"\\nin the run’s outputs.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"It takes no \", _jsx(_components.code, {\n children: \"network\"\n }), \": the id is enough, and the answer carries the \", _jsx(_components.code, {\n children: \"network\"\n }), \" the report\\nreads. Needs the \", _jsx(_components.code, {\n children: \"read\"\n }), \" scope. A key limited to vaults is refused with \", _jsx(_components.code, {\n children: \"403 vault_limited\"\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 /reports/{id}","description":"Where a report is: `queued`, `running`, then `ready` with its `file`, or `failed`. A\nfailed report stays failed: ask for a new one. Poll every few seconds until it ends.\n\nEvery report of your organization reads here, including the ones people asked for in the\nconsole and the ones a workflow's report step asked for: that step puts the report's `id`\nin the run's outputs.\n\nIt takes no `network`: the id is enough, and the answer carries the `network` the report\nreads. Needs the `read` scope. A key limited to vaults is refused with `403 vault_limited`.\n","href":"/api-reference/reports/get-a-report","title":"Get a report"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Reports"],"operationId":"getReport","summary":"Get a report","description":"Where a report is: `queued`, `running`, then `ready` with its `file`, or `failed`. A\nfailed report stays failed: ask for a new one. Poll every few seconds until it ends.\n\nEvery report of your organization reads here, including the ones people asked for in the\nconsole and the ones a workflow's report step asked for: that step puts the report's `id`\nin the run's outputs.\n\nIt takes no `network`: the id is enough, and the answer carries the `network` the report\nreads. Needs the `read` scope. A key limited to vaults is refused with `403 vault_limited`.\n","parameters":["16a79ade-3c88-4f8a-b064-0f0c86490ed5"],"responses":{"200":"534bd120-1db3-44cd-a271-0f84894f3c53","401":"97dab2b5-625d-4362-824d-836b03cb3655","403":"870594db-8151-4931-8c40-d5214e7b1816","404":"13884428-891a-4f7c-b33c-0628d1c4f6f6"},"method":"get","type":"path","servers":["825d9789-7332-4a65-b039-b330384d4003"],"security":["24aebd70-fdbd-4dae-a4a9-d627e2d2711f"],"path":"/reports/{id}","baseUrlOptions":["https://api.citadel.example/api/v1"],"title":"Get a report","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"16a79ade-3c88-4f8a-b064-0f0c86490ed5":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"responses":{"534bd120-1db3-44cd-a271-0f84894f3c53":{"description":"The report.","content":{"application/json":{"schema":{"type":"object","required":["id","type","format","network","status","wallet","window_days","failure_reason","created_at","completed_at","file"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"type":{"type":"string","enum":["wallet_statement","custody","overview"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"format":{"type":"string","enum":["pdf","csv"],"isRequired":true,"uniqueKey":"format","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>"},"status":{"type":"string","enum":["queued","running","ready","failed"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"wallet":{"oneOf":[{"type":"object","description":"The statement's wallet; `null` for an organization-wide report.","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"wallet.oneOf.0.id","typeLabel":"string\u003cuuid>"},"reference":{"type":"string","uniqueKey":"wallet.oneOf.0.reference","typeLabel":"string"},"address":{"type":"string","uniqueKey":"wallet.oneOf.0.address","typeLabel":"string"}},"isRequired":true,"uniqueKey":"wallet.oneOf.0","typeLabel":"object"},{"type":"null","description":"The statement's wallet; `null` for an organization-wide report.","properties":{"id":{"type":"string","format":"uuid"},"reference":{"type":"string"},"address":{"type":"string"}},"isRequired":true,"uniqueKey":"wallet.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"wallet","typeLabel":"object | null"},"window_days":{"oneOf":[{"type":"integer","description":"The days a statement covers, up to when it was built; `null` for an organization-wide report.","isRequired":true,"uniqueKey":"window_days.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The days a statement covers, up to when it was built; `null` for an organization-wide report.","isRequired":true,"uniqueKey":"window_days.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"window_days","typeLabel":"integer | null"},"failure_reason":{"oneOf":[{"type":"string","description":"Set when `status` is `failed`. Human-readable; not stable.","isRequired":true,"uniqueKey":"failure_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Set when `status` is `failed`. Human-readable; not stable.","isRequired":true,"uniqueKey":"failure_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"failure_reason","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"completed_at":{"oneOf":[{"type":"string","format":"date-time","description":"When it became `ready` or `failed`.","isRequired":true,"uniqueKey":"completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When it became `ready` or `failed`.","isRequired":true,"uniqueKey":"completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"completed_at","typeLabel":"string\u003cdate-time> | null"},"file":{"oneOf":[{"type":"object","description":"The file `GET /reports/{id}/file` streams; `null` until `ready`.","properties":{"filename":{"type":"string","uniqueKey":"file.oneOf.0.filename","typeLabel":"string"},"content_type":{"type":"string","enum":["application/pdf","text/csv"],"uniqueKey":"file.oneOf.0.content_type","typeLabel":"enum\u003cstring>"},"size":{"type":"integer","description":"Bytes.","uniqueKey":"file.oneOf.0.size","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"file.oneOf.0","typeLabel":"object"},{"type":"null","description":"The file `GET /reports/{id}/file` streams; `null` until `ready`.","properties":{"filename":{"type":"string"},"content_type":{"type":"string","enum":["application/pdf","text/csv"]},"size":{"type":"integer","description":"Bytes."}},"isRequired":true,"uniqueKey":"file.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"file","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"example":{"id":"0199a3e1-2b3c-7d4e-8f50-61728394a5b6","type":"wallet_statement","format":"csv","network":"mainnet","status":"ready","wallet":{"id":"0199a3c4-7f1e-7b11-9c2e-3f4a5b6c7d8e","reference":"user-4211","address":"TC6A9sQD2tCSaR1wcBXZtrvGkFyoLgRHHF"},"window_days":7,"failure_reason":null,"created_at":"2026-10-18T09:00:00Z","completed_at":"2026-10-18T09:00:04Z","file":{"filename":"wallet-statement-user-4211-mainnet-2026-10-18.csv","content_type":"text/csv","size":18342}},"examples":{"Example":{"title":"Example","value":{"id":"0199a3e1-2b3c-7d4e-8f50-61728394a5b6","type":"wallet_statement","format":"csv","network":"mainnet","status":"ready","wallet":{"id":"0199a3c4-7f1e-7b11-9c2e-3f4a5b6c7d8e","reference":"user-4211","address":"TC6A9sQD2tCSaR1wcBXZtrvGkFyoLgRHHF"},"window_days":7,"failure_reason":null,"created_at":"2026-10-18T09:00:00Z","completed_at":"2026-10-18T09:00:04Z","file":{"filename":"wallet-statement-user-4211-mainnet-2026-10-18.csv","content_type":"text/csv","size":18342}}}},"exampleType":"examples"}},"exampleType":"examples"},"97dab2b5-625d-4362-824d-836b03cb3655":{"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"},"870594db-8151-4931-8c40-d5214e7b1816":{"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"},"13884428-891a-4f7c-b33c-0628d1c4f6f6":{"description":"No such report in your organization.","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":"report not found"},"examples":{"Example":{"title":"Example","value":{"error":"report not found"}}},"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 report - Citadel API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/reports/get-a-report.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=\"Where a report is: queued, running, then ready with its file, or failed. A failed report stays failed: ask for a new one. Poll every few seconds until it ends. Every report of your organization reads here, including the ones people asked for in the console and the ones a workflow\u0026#x27;s report step asked for: that step puts the report\u0026#x27;s id in the run\u0026#x27;s outputs. It takes no network: the id is enough, and the answer carries the network the report reads. Needs the read scope. A key limited to vaults is refused with 403 vault_limited.\">\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 report - Citadel API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Where a report is: queued, running, then ready with its file, or failed. A failed report stays failed: ask for a new one. Poll every few seconds until it ends. Every report of your organization reads here, including the ones people asked for in the console and the ones a workflow\u0026#x27;s report step asked for: that step puts the report\u0026#x27;s id in the run\u0026#x27;s outputs. It takes no network: the id is enough, and the answer carries the network the report reads. Needs the read scope. A key limited to vaults is refused with 403 vault_limited.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Citadel API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://local./api-reference/reports/get-a-report\">\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 report - Citadel API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Where a report is: queued, running, then ready with its file, or failed. A failed report stays failed: ask for a new one. Poll every few seconds until it ends. Every report of your organization reads here, including the ones people asked for in the console and the ones a workflow\u0026#x27;s report step asked for: that step puts the report\u0026#x27;s id in the run\u0026#x27;s outputs. It takes no network: the id is enough, and the answer carries the network the report reads. Needs the read scope. A key limited to vaults is refused with 403 vault_limited.\">\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/reports/get-a-report\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/reports/get-a-report.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","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","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","description":"Asks for a report as a file, PDF or CSV, on one network. Citadel builds it in the\nbackground: the answer is `202` with the report `queued`. Follow it with\n`GET /reports/{id}` until it is `ready`, then fetch the file with `GET /reports/{id}/file`.\nA report shows the books as they stand when it is built.\n\n| `type` | What it holds | `wallet` | `window_days` |\n|---|---|---|---|\n| `wallet_statement` | One wallet: its compliance screening, its balances, and every confirmed movement of the window, network fees included, with a running balance per asset | required | optional, 1 to 30, default 30 |\n| `custody` | The organization: its assets and their estimated USD value, its top counterparties | none | none |\n| `overview` | The organization: holdings, value per chain, inflow, outflow and fees of the last 30 days, top counterparties, concentration | none | none |\n\nOnly confirmed transfers are in a report. USD figures are reference estimates, marked as\nsuch in the file; no rate is locked with them.\n\nA statement has a row for every change to the wallet's balance in the window: each\ntransfer, and a row of its own for what a transaction moved beyond its transfers. The CSV\nnames each row in its `kind` column:\n\n| `kind` | The row |\n|---|---|\n| `transfer` | A confirmed transfer to or from the wallet |\n| `fee` | The network fee of a transaction the wallet paid for, in the chain's coin: one it sent, or one it sponsored. Only the payer's statement has it, and all of it: a sponsored transaction's fee is on the sponsor's statement, none of it on the statement of the wallet it ran for |\n| `stake` | Coin the wallet staked (negative) or unstaked (positive) |\n| `adjustment` | Any other change the books recorded for the transaction, such as part of a transfer coming back, gas a sponsor advanced and got back, or what receiving cost a TON wallet in a transaction another wallet paid for |\n\nThe balance before the first row is what the wallet held when the window opened; the\nbalance after the last row is what it holds now. Citadel books a transaction as one change\nto the balance: when a transaction has several rows, the running balance counts what came\nin before what went out, so every row of it reads at least the lower of the balance before\nthe transaction and the balance after it, and never below zero. The balance after the\ntransaction is the one on its last row.\n\nA statement names its wallet like `GET /wallets/{reference}`: your reference on the\nnetwork the request names, or the wallet's id. A wallet without an address yet (`creating`\nor `failed`) and a token sub-account Citadel keeps under a wallet are refused with `422`;\nask for the statement of the wallet that owns it. A retired wallet has a statement.\n\nA refused request leaves no report behind. Sending the same request again asks for another\nreport.\n\n`network` is required. Needs the `read` scope: a report moves nothing and holds only what\nthe reads return. A key limited to vaults is refused with `403 vault_limited`: the\norganization-wide reports cover every vault, and a statement names the other wallets of the\norganization it dealt with.\n","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","description":"The file of a `ready` report, as an attachment: `application/pdf` or `text/csv`, under the\nfilename `GET /reports/{id}` names. Fetch it as many times as you need.\n\nBefore the report is ready, `409 report_not_ready`: follow it with `GET /reports/{id}`. A\nfailed report has no file: `409 report_failed`.\n\nIt takes no `network`. Needs the `read` scope. A key limited to vaults is refused with\n`403 vault_limited`.\n","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 report - 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"]}