Asks for a report as a file, PDF or CSV, on one network. Citadel builds it in the
background: the answer is 202 with the report queued. Follow it with
GET /reports/{id} until it is ready, then fetch the file with GET /reports/{id}/file.
A report shows the books as they stand when it is built.
type
What it holds
wallet
window_days
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
custody
The organization: its assets and their estimated USD value, its top counterparties
none
none
overview
The organization: holdings, value per chain, inflow, outflow and fees of the last 30 days, top counterparties, concentration
none
none
Only confirmed transfers are in a report. USD figures are reference estimates, marked as
such in the file; no rate is locked with them.
A statement has a row for every change to the wallet’s balance in the window: each
transfer, and a row of its own for what a transaction moved beyond its transfers. The CSV
names each row in its kind column:
kind
The row
transfer
A confirmed transfer to or from the wallet
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
stake
Coin the wallet staked (negative) or unstaked (positive)
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
The balance before the first row is what the wallet held when the window opened; the
balance after the last row is what it holds now. Citadel books a transaction as one change
to the balance: when a transaction has several rows, the running balance counts what came
in before what went out, so every row of it reads at least the lower of the balance before
the transaction and the balance after it, and never below zero. The balance after the
transaction is the one on its last row.
A statement names its wallet like GET /wallets/{reference}: your reference on the
network the request names, or the wallet’s id. A wallet without an address yet (creating
or failed) and a token sub-account Citadel keeps under a wallet are refused with 422;
ask for the statement of the wallet that owns it. A retired wallet has a statement.
A refused request leaves no report behind. Sending the same request again asks for another
report.
network is required. Needs the read scope: a report moves nothing and holds only what
the reads return. A key limited to vaults is refused with 403 vault_limited: the
organization-wide reports cover every vault, and a statement names the other wallets of the
organization it dealt with.
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 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/ask-for-a-report","slug":"/api-reference/reports/ask-for-a-report","pageMetadata":{"openapi":"/openapi.yaml post /reports","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","href":"/api-reference/reports/ask-for-a-report","title":"Ask for 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 table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Asks for a report as a file, PDF or CSV, on one network. Citadel builds it in the\\nbackground: the answer is \", _jsx(_components.code, {\n children: \"202\"\n }), \" with the report \", _jsx(_components.code, {\n children: \"queued\"\n }), \". Follow it with\\n\", _jsx(_components.code, {\n children: \"GET /reports/{id}\"\n }), \" until it is \", _jsx(_components.code, {\n children: \"ready\"\n }), \", then fetch the file with \", _jsx(_components.code, {\n children: \"GET /reports/{id}/file\"\n }), \".\\nA report shows the books as they stand when it is built.\"]\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"type\"\n })\n }), _jsx(_components.th, {\n children: \"What it holds\"\n }), _jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"wallet\"\n })\n }), _jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"window_days\"\n })\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"wallet_statement\"\n })\n }), _jsx(_components.td, {\n children: \"One wallet: its compliance screening, its balances, and every confirmed movement of the window, network fees included, with a running balance per asset\"\n }), _jsx(_components.td, {\n children: \"required\"\n }), _jsx(_components.td, {\n children: \"optional, 1 to 30, default 30\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"custody\"\n })\n }), _jsx(_components.td, {\n children: \"The organization: its assets and their estimated USD value, its top counterparties\"\n }), _jsx(_components.td, {\n children: \"none\"\n }), _jsx(_components.td, {\n children: \"none\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"overview\"\n })\n }), _jsx(_components.td, {\n children: \"The organization: holdings, value per chain, inflow, outflow and fees of the last 30 days, top counterparties, concentration\"\n }), _jsx(_components.td, {\n children: \"none\"\n }), _jsx(_components.td, {\n children: \"none\"\n })]\n })]\n })]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Only confirmed transfers are in a report. USD figures are reference estimates, marked as\\nsuch in the file; no rate is locked with them.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A 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 \", _jsx(_components.code, {\n children: \"kind\"\n }), \" column:\"]\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"kind\"\n })\n }), _jsx(_components.th, {\n children: \"The row\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"transfer\"\n })\n }), _jsx(_components.td, {\n children: \"A confirmed transfer to or from the wallet\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"fee\"\n })\n }), _jsx(_components.td, {\n children: \"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 })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"stake\"\n })\n }), _jsx(_components.td, {\n children: \"Coin the wallet staked (negative) or unstaked (positive)\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"adjustment\"\n })\n }), _jsx(_components.td, {\n children: \"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 })]\n })]\n })]\n }), \"\\n\", _jsx(_components.p, {\n children: \"The 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 }), \"\\n\", _jsxs(_components.p, {\n children: [\"A statement names its wallet like \", _jsx(_components.code, {\n children: \"GET /wallets/{reference}\"\n }), \": your reference on the\\nnetwork the request names, or the wallet’s id. A wallet without an address yet (\", _jsx(_components.code, {\n children: \"creating\"\n }), \"\\nor \", _jsx(_components.code, {\n children: \"failed\"\n }), \") and a token sub-account Citadel keeps under a wallet are refused with \", _jsx(_components.code, {\n children: \"422\"\n }), \";\\nask for the statement of the wallet that owns it. A retired wallet has a statement.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"A refused request leaves no report behind. Sending the same request again asks for another\\nreport.\"\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 report moves nothing and holds only what\\nthe reads return. A key limited to vaults is refused with \", _jsx(_components.code, {\n children: \"403 vault_limited\"\n }), \": the\\norganization-wide reports cover every vault, and a statement names the other wallets of the\\norganization it dealt with.\"]\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 post /reports","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","href":"/api-reference/reports/ask-for-a-report","title":"Ask for a report"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Reports"],"operationId":"createReport","summary":"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","requestBody":"9c930a84-f601-4674-a7b4-6a2f3f43e8ee","responses":{"202":"526f0439-1d66-4718-8fca-d50a7def8b63","401":"bc7f49af-8c02-45d1-9632-ecba82727472","403":"603d5d03-8933-43e6-b7bb-044e7dc1285e","404":"09e11c13-44dd-47be-9714-a1ecd3d9afdb","422":"ed7aac76-be07-47b3-bd05-4e56b9697638"},"method":"post","type":"path","servers":["825d9789-7332-4a65-b039-b330384d4003"],"security":["24aebd70-fdbd-4dae-a4a9-d627e2d2711f"],"path":"/reports","baseUrlOptions":["https://api.citadel.example/api/v1"],"title":"Ask for a report","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["network","type","format"],"properties":{"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>"},"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>"},"wallet":{"type":"string","description":"`wallet_statement` only, and required there: your reference for the wallet on `network`, or its id.","uniqueKey":"wallet","typeLabel":"string"},"window_days":{"oneOf":[{"type":"integer","minimum":1,"maximum":30,"description":"`wallet_statement` only: how many days the statement covers, up to when it is built. Absent or `null` — 30.","uniqueKey":"window_days.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":30,"description":"`wallet_statement` only: how many days the statement covers, up to when it is built. Absent or `null` — 30.","uniqueKey":"window_days.oneOf.1","typeLabel":"null"}],"uniqueKey":"window_days","typeLabel":"integer | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"statement":{"title":"statement","value":{"network":"mainnet","type":"wallet_statement","format":"csv","wallet":"user-4211","window_days":7}},"custody":{"title":"custody","value":{"network":"mainnet","type":"custody","format":"pdf"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"526f0439-1d66-4718-8fca-d50a7def8b63":{"description":"Queued. The report, as `GET /reports/{id}` reads it.","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":"queued","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":null,"file":null},"examples":{"Example":{"title":"Example","value":{"id":"0199a3e1-2b3c-7d4e-8f50-61728394a5b6","type":"wallet_statement","format":"csv","network":"mainnet","status":"queued","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":null,"file":null}}},"exampleType":"examples"}},"exampleType":"examples"},"bc7f49af-8c02-45d1-9632-ecba82727472":{"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"},"603d5d03-8933-43e6-b7bb-044e7dc1285e":{"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"},"09e11c13-44dd-47be-9714-a1ecd3d9afdb":{"description":"`wallet` names no wallet of your organization on this network.","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":"wallet not found"},"examples":{"Example":{"title":"Example","value":{"error":"wallet not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"ed7aac76-be07-47b3-bd05-4e56b9697638":{"description":"`network_required`, `network_not_served` or `network_mismatch`; or the report cannot be\nmade from the request (no `code`): an unknown `type` or `format`, a statement without a\nwallet, a wallet or a `window_days` given to a report that takes none, a `window_days`\nthat is not a whole number from 1 to 30, a wallet without an address, a token\nsub-account. Nothing was queued.\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":{"type":{"title":"type","value":{"error":"type must be one of overview, custody, wallet_statement"}},"no_wallet":{"title":"no_wallet","value":{"error":"a wallet statement needs a wallet"}},"window":{"title":"window","value":{"error":"window_days must be a whole number of days from 1 to 30"}},"org_wide":{"title":"org_wide","value":{"error":"a custody report takes no window_days"}},"network_required":{"title":"network_required","value":{"error":"network is required (mainnet, testnet)","code":"network_required"}}},"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":"Ask for a report - Citadel API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/reports/ask-for-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=\"Asks for a report as a file, PDF or CSV, on one network. Citadel builds it in the background: the answer is 202 with the report queued. Follow it with GET /reports/{id} until it is ready, then fetch the file with GET /reports/{id}/file. A report shows the books as they stand when it is built. | type | What it holds | wallet | window_days | |---|---|---|---| | 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 | | custody | The organization: its assets and their estimated USD value, its top counterparties | none | none | | overview | The organization: holdings, value per chain, inflow, outflow and fees of the last 30 days, top counterparties, concentration | none | none | Only confirmed transfers are in a report. USD figures are reference estimates, marked as such in the file; no rate is locked with them. A statement has a row for every change to the wallet\u0026#x27;s balance in the window: each transfer, and a row of its own for what a transaction moved beyond its transfers. The CSV names each row in its kind column: | kind | The row | |---|---| | transfer | A confirmed transfer to or from the wallet | | fee | The network fee of a transaction the wallet paid for, in the chain\u0026#x27;s coin: one it sent, or one it sponsored. Only the payer\u0026#x27;s statement has it, and all of it: a sponsored transaction\u0026#x27;s fee is on the sponsor\u0026#x27;s statement, none of it on the statement of the wallet it ran for | | stake | Coin the wallet staked (negative) or unstaked (positive) | | 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 | The balance before the first row is what the wallet held when the window opened; the balance after the last row is what it holds now. Citadel books a transaction as one change to the balance: when a transaction has several rows, the running balance counts what came in before what went out, so every row of it reads at least the lower of the balance before the transaction and the balance after it, and never below zero. The balance after the transaction is the one on its last row. A statement names its wallet like GET /wallets/{reference}: your reference on the network the request names, or the wallet\u0026#x27;s id. A wallet without an address yet (creating or failed) and a token sub-account Citadel keeps under a wallet are refused with 422; ask for the statement of the wallet that owns it. A retired wallet has a statement. A refused request leaves no report behind. Sending the same request again asks for another report. network is required. Needs the read scope: a report moves nothing and holds only what the reads return. A key limited to vaults is refused with 403 vault_limited: the organization-wide reports cover every vault, and a statement names the other wallets of the organization it dealt with.\">\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=\"Ask for a report - Citadel API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Asks for a report as a file, PDF or CSV, on one network. Citadel builds it in the background: the answer is 202 with the report queued. Follow it with GET /reports/{id} until it is ready, then fetch the file with GET /reports/{id}/file. A report shows the books as they stand when it is built. | type | What it holds | wallet | window_days | |---|---|---|---| | 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 | | custody | The organization: its assets and their estimated USD value, its top counterparties | none | none | | overview | The organization: holdings, value per chain, inflow, outflow and fees of the last 30 days, top counterparties, concentration | none | none | Only confirmed transfers are in a report. USD figures are reference estimates, marked as such in the file; no rate is locked with them. A statement has a row for every change to the wallet\u0026#x27;s balance in the window: each transfer, and a row of its own for what a transaction moved beyond its transfers. The CSV names each row in its kind column: | kind | The row | |---|---| | transfer | A confirmed transfer to or from the wallet | | fee | The network fee of a transaction the wallet paid for, in the chain\u0026#x27;s coin: one it sent, or one it sponsored. Only the payer\u0026#x27;s statement has it, and all of it: a sponsored transaction\u0026#x27;s fee is on the sponsor\u0026#x27;s statement, none of it on the statement of the wallet it ran for | | stake | Coin the wallet staked (negative) or unstaked (positive) | | 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 | The balance before the first row is what the wallet held when the window opened; the balance after the last row is what it holds now. Citadel books a transaction as one change to the balance: when a transaction has several rows, the running balance counts what came in before what went out, so every row of it reads at least the lower of the balance before the transaction and the balance after it, and never below zero. The balance after the transaction is the one on its last row. A statement names its wallet like GET /wallets/{reference}: your reference on the network the request names, or the wallet\u0026#x27;s id. A wallet without an address yet (creating or failed) and a token sub-account Citadel keeps under a wallet are refused with 422; ask for the statement of the wallet that owns it. A retired wallet has a statement. A refused request leaves no report behind. Sending the same request again asks for another report. network is required. Needs the read scope: a report moves nothing and holds only what the reads return. A key limited to vaults is refused with 403 vault_limited: the organization-wide reports cover every vault, and a statement names the other wallets of the organization it dealt with.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Citadel API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://local./api-reference/reports/ask-for-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=\"Ask for a report - Citadel API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Asks for a report as a file, PDF or CSV, on one network. Citadel builds it in the background: the answer is 202 with the report queued. Follow it with GET /reports/{id} until it is ready, then fetch the file with GET /reports/{id}/file. A report shows the books as they stand when it is built. | type | What it holds | wallet | window_days | |---|---|---|---| | 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 | | custody | The organization: its assets and their estimated USD value, its top counterparties | none | none | | overview | The organization: holdings, value per chain, inflow, outflow and fees of the last 30 days, top counterparties, concentration | none | none | Only confirmed transfers are in a report. USD figures are reference estimates, marked as such in the file; no rate is locked with them. A statement has a row for every change to the wallet\u0026#x27;s balance in the window: each transfer, and a row of its own for what a transaction moved beyond its transfers. The CSV names each row in its kind column: | kind | The row | |---|---| | transfer | A confirmed transfer to or from the wallet | | fee | The network fee of a transaction the wallet paid for, in the chain\u0026#x27;s coin: one it sent, or one it sponsored. Only the payer\u0026#x27;s statement has it, and all of it: a sponsored transaction\u0026#x27;s fee is on the sponsor\u0026#x27;s statement, none of it on the statement of the wallet it ran for | | stake | Coin the wallet staked (negative) or unstaked (positive) | | 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 | The balance before the first row is what the wallet held when the window opened; the balance after the last row is what it holds now. Citadel books a transaction as one change to the balance: when a transaction has several rows, the running balance counts what came in before what went out, so every row of it reads at least the lower of the balance before the transaction and the balance after it, and never below zero. The balance after the transaction is the one on its last row. A statement names its wallet like GET /wallets/{reference}: your reference on the network the request names, or the wallet\u0026#x27;s id. A wallet without an address yet (creating or failed) and a token sub-account Citadel keeps under a wallet are refused with 422; ask for the statement of the wallet that owns it. A retired wallet has a statement. A refused request leaves no report behind. Sending the same request again asks for another report. network is required. Needs the read scope: a report moves nothing and holds only what the reads return. A key limited to vaults is refused with 403 vault_limited: the organization-wide reports cover every vault, and a statement names the other wallets of the organization it dealt with.\">\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/ask-for-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/ask-for-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","description":"Sends every failed delivery recorded in a period again — how you catch up once your\nendpoint is back. Each goes back in line as with a single retry, keeping its `id`.\n\nOldest first, at most 500 per call: while `more` is `true`, send the same call again.\nCalling again is safe, because what one call sent is pending by the next, not failed. A\nfailed delivery whose endpoint is paused or disabled stays failed and counts in `skipped`:\nresume the endpoint (`PATCH /webhook_endpoints/{id}` with `state: active`), then call again.\n\nTakes the list's filters except `status`. Needs the `webhooks.write` scope. A key limited\nto vaults is refused with `403 vault_limited`.\n","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","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","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":"Ask for 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"]}