Withdraws a transaction while nothing of it is signed yet:
held by your approval rules (status: awaiting_approval): its quorum request closes
(approval.status: cancelled), so nobody can approve it any more, and the amounts and
the network fee held for it are spendable again;
queued (queue: true) and not yet picked up by a workflow’s batch: it held nothing.
The transaction ends failed with failure.reason: cancelled, and the operation.failed
webhook follows. The answer is the transaction, the body GET /transactions/{id} reads.
Cancelling it again answers the same 200.
Otherwise it is 409 not_cancellable, and nothing changes. From authorized on, the
transaction is on its way to your signer, signed, on chain or ended, and the error says
which. A quorum that has already decided stands: approved, it is being sent; rejected or
expired, it fails on its own. A queued payout a batch already carries goes with the batch.
Only what your API keys sent can be cancelled: a transaction a workflow sent stops with
its run (POST /runs/{id}/cancel), and the ones Citadel makes for itself cannot be.
Takes the operation_id or the idempotency key, like GET /transactions/{id}, and no
network. Needs the transactions.write scope. A transaction from a wallet outside the
key’s vaults answers 404.
An API key minted in the console (ctd_…). Authenticates; never authorizes funds. A key
carries scopes (read, wallets.write, transactions.write, events.write,
webhooks.write, policy.write) and may be limited to vaults, to IP addresses, and in
lifetime — see Authentication.
The network the data lives on. Required wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
The transaction was declared expired, then landed after all (the chain index served it
late). The earlier verdict is withdrawn — if you resubmitted on it, that payout is a
second one.
An EVM transaction waits behind its nonce: no node has taken its signed bytes for 5
minutes (the operation.stuck webhook). It keeps its holds and is sent again and again,
and new transactions from the wallet are refused until it moves. Absent once a node takes
it. POST /transactions/{id}/speedup signs it again at a higher fee.
Present when your approval rules held the transaction for a passkey quorum — on the
202 and on every read after it. Absent when it went out without waiting for people.
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/transactions/cancel-a-transaction","slug":"/api-reference/transactions/cancel-a-transaction","pageMetadata":{"openapi":"/openapi.yaml post /transactions/{id}/cancel","description":"Withdraws a transaction while nothing of it is signed yet:\n\n- held by your approval rules (`status: awaiting_approval`): its quorum request closes\n (`approval.status: cancelled`), so nobody can approve it any more, and the amounts and\n the network fee held for it are spendable again;\n- queued (`queue: true`) and not yet picked up by a workflow's batch: it held nothing.\n\nThe transaction ends `failed` with `failure.reason: cancelled`, and the `operation.failed`\nwebhook follows. The answer is the transaction, the body `GET /transactions/{id}` reads.\nCancelling it again answers the same `200`.\n\nOtherwise it is `409 not_cancellable`, and nothing changes. From `authorized` on, the\ntransaction is on its way to your signer, signed, on chain or ended, and the `error` says\nwhich. A quorum that has already decided stands: approved, it is being sent; rejected or\nexpired, it fails on its own. A queued payout a batch already carries goes with the batch.\nOnly what your API keys sent can be cancelled: a transaction a workflow sent stops with\nits run (`POST /runs/{id}/cancel`), and the ones Citadel makes for itself cannot be.\n\nTakes the `operation_id` or the idempotency key, like `GET /transactions/{id}`, and no\n`network`. Needs the `transactions.write` scope. A transaction from a wallet outside the\nkey's vaults answers `404`.\n","href":"/api-reference/transactions/cancel-a-transaction","title":"Cancel a transaction"},"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 li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Withdraws a transaction while nothing of it is signed yet:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"held by your approval rules (\", _jsx(_components.code, {\n children: \"status: awaiting_approval\"\n }), \"): its quorum request closes\\n(\", _jsx(_components.code, {\n children: \"approval.status: cancelled\"\n }), \"), so nobody can approve it any more, and the amounts and\\nthe network fee held for it are spendable again;\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"queued (\", _jsx(_components.code, {\n children: \"queue: true\"\n }), \") and not yet picked up by a workflow’s batch: it held nothing.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The transaction ends \", _jsx(_components.code, {\n children: \"failed\"\n }), \" with \", _jsx(_components.code, {\n children: \"failure.reason: cancelled\"\n }), \", and the \", _jsx(_components.code, {\n children: \"operation.failed\"\n }), \"\\nwebhook follows. The answer is the transaction, the body \", _jsx(_components.code, {\n children: \"GET /transactions/{id}\"\n }), \" reads.\\nCancelling it again answers the same \", _jsx(_components.code, {\n children: \"200\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Otherwise it is \", _jsx(_components.code, {\n children: \"409 not_cancellable\"\n }), \", and nothing changes. From \", _jsx(_components.code, {\n children: \"authorized\"\n }), \" on, the\\ntransaction is on its way to your signer, signed, on chain or ended, and the \", _jsx(_components.code, {\n children: \"error\"\n }), \" says\\nwhich. A quorum that has already decided stands: approved, it is being sent; rejected or\\nexpired, it fails on its own. A queued payout a batch already carries goes with the batch.\\nOnly what your API keys sent can be cancelled: a transaction a workflow sent stops with\\nits run (\", _jsx(_components.code, {\n children: \"POST /runs/{id}/cancel\"\n }), \"), and the ones Citadel makes for itself cannot be.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Takes the \", _jsx(_components.code, {\n children: \"operation_id\"\n }), \" or the idempotency key, like \", _jsx(_components.code, {\n children: \"GET /transactions/{id}\"\n }), \", and no\\n\", _jsx(_components.code, {\n children: \"network\"\n }), \". Needs the \", _jsx(_components.code, {\n children: \"transactions.write\"\n }), \" scope. A transaction from a wallet outside the\\nkey’s vaults answers \", _jsx(_components.code, {\n children: \"404\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"/openapi.yaml post /transactions/{id}/cancel","description":"Withdraws a transaction while nothing of it is signed yet:\n\n- held by your approval rules (`status: awaiting_approval`): its quorum request closes\n (`approval.status: cancelled`), so nobody can approve it any more, and the amounts and\n the network fee held for it are spendable again;\n- queued (`queue: true`) and not yet picked up by a workflow's batch: it held nothing.\n\nThe transaction ends `failed` with `failure.reason: cancelled`, and the `operation.failed`\nwebhook follows. The answer is the transaction, the body `GET /transactions/{id}` reads.\nCancelling it again answers the same `200`.\n\nOtherwise it is `409 not_cancellable`, and nothing changes. From `authorized` on, the\ntransaction is on its way to your signer, signed, on chain or ended, and the `error` says\nwhich. A quorum that has already decided stands: approved, it is being sent; rejected or\nexpired, it fails on its own. A queued payout a batch already carries goes with the batch.\nOnly what your API keys sent can be cancelled: a transaction a workflow sent stops with\nits run (`POST /runs/{id}/cancel`), and the ones Citadel makes for itself cannot be.\n\nTakes the `operation_id` or the idempotency key, like `GET /transactions/{id}`, and no\n`network`. Needs the `transactions.write` scope. A transaction from a wallet outside the\nkey's vaults answers `404`.\n","href":"/api-reference/transactions/cancel-a-transaction","title":"Cancel a transaction"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Transactions"],"operationId":"cancelTransaction","summary":"Cancel a transaction","description":"Withdraws a transaction while nothing of it is signed yet:\n\n- held by your approval rules (`status: awaiting_approval`): its quorum request closes\n (`approval.status: cancelled`), so nobody can approve it any more, and the amounts and\n the network fee held for it are spendable again;\n- queued (`queue: true`) and not yet picked up by a workflow's batch: it held nothing.\n\nThe transaction ends `failed` with `failure.reason: cancelled`, and the `operation.failed`\nwebhook follows. The answer is the transaction, the body `GET /transactions/{id}` reads.\nCancelling it again answers the same `200`.\n\nOtherwise it is `409 not_cancellable`, and nothing changes. From `authorized` on, the\ntransaction is on its way to your signer, signed, on chain or ended, and the `error` says\nwhich. A quorum that has already decided stands: approved, it is being sent; rejected or\nexpired, it fails on its own. A queued payout a batch already carries goes with the batch.\nOnly what your API keys sent can be cancelled: a transaction a workflow sent stops with\nits run (`POST /runs/{id}/cancel`), and the ones Citadel makes for itself cannot be.\n\nTakes the `operation_id` or the idempotency key, like `GET /transactions/{id}`, and no\n`network`. Needs the `transactions.write` scope. A transaction from a wallet outside the\nkey's vaults answers `404`.\n","parameters":["cff04c5d-d475-4a60-80b8-d68a5051e71c"],"responses":{"200":"27cfe078-6b28-4764-8d3d-fc630c180c2c","401":"5a29bd4c-8d81-4178-8691-af06c5b08dd4","403":"73e180b4-bc8f-452d-b483-5a8e688be47f","404":"e4f5d38f-4b54-441d-a1d4-39023217c225","409":"6269161a-489a-48ea-b275-a293d9c922f0"},"method":"post","type":"path","servers":["825d9789-7332-4a65-b039-b330384d4003"],"security":["24aebd70-fdbd-4dae-a4a9-d627e2d2711f"],"path":"/transactions/{id}/cancel","baseUrlOptions":["https://api.citadel.example/api/v1"],"title":"Cancel a transaction","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"cff04c5d-d475-4a60-80b8-d68a5051e71c":{"name":"id","in":"path","required":true,"description":"The `operation_id`, or the idempotency key — yours, or the `intent:\u003cuuid>` Citadel returned for a request sent without one.","schema":{"type":"string","isRequired":true,"description":"The `operation_id`, or the idempotency key — yours, or the `intent:\u003cuuid>` Citadel returned for a request sent without one.","uniqueKey":"","typeLabel":"string"}}},"responses":{"27cfe078-6b28-4764-8d3d-fc630c180c2c":{"description":"Cancelled — now, or by an earlier call.","content":{"application/json":{"schema":{"type":"object","required":["operation_id","status","actions","tags","created_at","updated_at"],"description":"A transaction. A field with nothing to say is absent, except `actions` and `tags`.","properties":{"operation_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"operation_id","typeLabel":"string\u003cuuid>"},"status":{"type":"string","enum":["created","aml_pending","awaiting_approval","authorized","signing","signed","broadcasting","broadcast","confirmed","final","failed","rejected","expired"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"actions":{"type":"array","description":"What it does, in order — the actions you sent, each asset named as balances name it.","items":{"type":"object","required":["type"],"description":"One action as the transaction carries it. A `transfer`, `approve` or `swap` names its asset\nby catalog `asset` symbol, `contract` (`null` for the native coin) and `decimals`; a `call`\nnames the `contract` it calls, its `method`, `args` and `value`.\n","properties":{"type":{"type":"string","enum":["transfer","approve","swap","stake","unstake","delegate","undelegate","call"],"isRequired":true,"uniqueKey":"actions.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"to":{"type":"string","uniqueKey":"actions.items.[INDEX].to","typeLabel":"string"},"amount":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","uniqueKey":"actions.items.[INDEX].amount","typeLabel":"string"},"asset":{"type":"string","description":"The catalog symbol; the contract when the catalog has none; `native` when neither is known.","uniqueKey":"actions.items.[INDEX].asset","typeLabel":"string"},"contract":{"oneOf":[{"type":"string","uniqueKey":"actions.items.[INDEX].contract.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"actions.items.[INDEX].contract.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.items.[INDEX].contract","typeLabel":"string | null"},"decimals":{"oneOf":[{"type":"integer","uniqueKey":"actions.items.[INDEX].decimals.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"actions.items.[INDEX].decimals.oneOf.1","typeLabel":"null"}],"uniqueKey":"actions.items.[INDEX].decimals","typeLabel":"integer | null"},"token_out":{"type":"string","uniqueKey":"actions.items.[INDEX].token_out","typeLabel":"string"},"min_amount_out":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","uniqueKey":"actions.items.[INDEX].min_amount_out","typeLabel":"string"},"resource":{"type":"string","enum":["energy","bandwidth"],"uniqueKey":"actions.items.[INDEX].resource","typeLabel":"enum\u003cstring>"},"method":{"type":"string","uniqueKey":"actions.items.[INDEX].method","typeLabel":"string"},"args":{"type":"object","additionalProperties":true,"uniqueKey":"actions.items.[INDEX].args","typeLabel":"object"},"value":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","uniqueKey":"actions.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"actions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"actions","typeLabel":"object[]"},"tags":{"type":"array","items":{"type":"string","uniqueKey":"tags.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"tags","typeLabel":"string[]"},"created_at":{"type":"string","format":"date-time","description":"When Citadel accepted it.","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"Its last change of state.","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"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","uniqueKey":"network","typeLabel":"enum\u003cstring>"},"chain":{"type":"string","enum":["tron","evm","solana","ton"],"uniqueKey":"chain","typeLabel":"enum\u003cstring>"},"wallet":{"type":"object","description":"The wallet it leaves from.","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"wallet.id","typeLabel":"string\u003cuuid>"},"reference":{"type":"string","uniqueKey":"wallet.reference","typeLabel":"string"},"address":{"type":"string","uniqueKey":"wallet.address","typeLabel":"string"}},"uniqueKey":"wallet","typeLabel":"object"},"end_user_ref":{"type":"string","uniqueKey":"end_user_ref","typeLabel":"string"},"tx_hash":{"type":"string","description":"Known from `broadcasting` on.","uniqueKey":"tx_hash","typeLabel":"string"},"fee":{"type":"object","required":["amount","asset"],"description":"The network fee the landed transaction cost, in the native coin of the chain it landed on. Absent until it lands.","properties":{"amount":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"fee.amount","typeLabel":"string"},"asset":{"type":"string","isRequired":true,"uniqueKey":"fee.asset","typeLabel":"string"},"decimals":{"type":"integer","uniqueKey":"fee.decimals","typeLabel":"integer"}},"uniqueKey":"fee","typeLabel":"object"},"idempotency_key":{"type":"string","description":"The key the request was sent with. A request sent without one gets\n`intent:\u003cuuid>`, unique to this transaction; `GET /transactions/{id}` takes it too.\n","uniqueKey":"idempotency_key","typeLabel":"string"},"queued":{"type":"boolean","description":"true while a queued payout (`queue: true`) waits for its workflow; absent otherwise.","uniqueKey":"queued","typeLabel":"boolean"},"failure":{"type":"object","required":["stage","reason","retryable","message"],"properties":{"stage":{"type":"string","enum":["build","engine","signer","expired","rejected","reverted","approval","queue"],"description":"How far it got. `queue` — a queued payout (`queue: true`) cancelled before a batch carried it.","isRequired":true,"uniqueKey":"failure.stage","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","enum":["window_expired","rpc_unavailable","build_failed","sequence_refused","policy_refused","signing_failed","rejected_by_chain","reverted","approval_rejected","approval_expired","approval_stale","cancelled"],"isRequired":true,"uniqueKey":"failure.reason","typeLabel":"enum\u003cstring>"},"retryable":{"type":"boolean","description":"Safe to submit again with a NEW idempotency key — provably nothing moved.","isRequired":true,"uniqueKey":"failure.retryable","typeLabel":"boolean"},"message":{"type":"string","isRequired":true,"uniqueKey":"failure.message","typeLabel":"string"},"detail":{"type":"string","description":"What the refusing party said, trimmed.","uniqueKey":"failure.detail","typeLabel":"string"}},"uniqueKey":"failure","typeLabel":"object"},"corrected":{"type":"object","description":"The transaction was declared `expired`, then landed after all (the chain index served it\nlate). The earlier verdict is withdrawn — if you resubmitted on it, that payout is a\nsecond one.\n","properties":{"from":{"type":"string","enum":["expired"],"uniqueKey":"corrected.from","typeLabel":"enum\u003cstring>"},"failure":{"type":"object","required":["stage","reason","retryable","message"],"properties":{"stage":{"type":"string","enum":["build","engine","signer","expired","rejected","reverted","approval","queue"],"description":"How far it got. `queue` — a queued payout (`queue: true`) cancelled before a batch carried it.","isRequired":true,"uniqueKey":"corrected.failure.stage","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","enum":["window_expired","rpc_unavailable","build_failed","sequence_refused","policy_refused","signing_failed","rejected_by_chain","reverted","approval_rejected","approval_expired","approval_stale","cancelled"],"isRequired":true,"uniqueKey":"corrected.failure.reason","typeLabel":"enum\u003cstring>"},"retryable":{"type":"boolean","description":"Safe to submit again with a NEW idempotency key — provably nothing moved.","isRequired":true,"uniqueKey":"corrected.failure.retryable","typeLabel":"boolean"},"message":{"type":"string","isRequired":true,"uniqueKey":"corrected.failure.message","typeLabel":"string"},"detail":{"type":"string","description":"What the refusing party said, trimmed.","uniqueKey":"corrected.failure.detail","typeLabel":"string"}},"uniqueKey":"corrected.failure","typeLabel":"object"},"at":{"type":"string","format":"date-time","uniqueKey":"corrected.at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"corrected","typeLabel":"object"},"stuck":{"type":"object","description":"An EVM transaction waits behind its nonce: no node has taken its signed bytes for 5\nminutes (the `operation.stuck` webhook). It keeps its holds and is sent again and again,\nand new transactions from the wallet are refused until it moves. Absent once a node takes\nit. `POST /transactions/{id}/speedup` signs it again at a higher fee.\n","properties":{"since":{"type":"string","format":"date-time","description":"When its current version was signed.","uniqueKey":"stuck.since","typeLabel":"string\u003cdate-time>"},"sequence":{"type":"integer","description":"The nonce it holds.","uniqueKey":"stuck.sequence","typeLabel":"integer"},"error":{"type":"string","description":"The nodes' last answer, e.g. `max fee per gas less than block base fee` or `insufficient funds for gas * price + value`.","uniqueKey":"stuck.error","typeLabel":"string"}},"uniqueKey":"stuck","typeLabel":"object"},"speedup":{"type":"object","required":["status","number","requested_at"],"description":"The latest `POST /transactions/{id}/speedup` of this transaction, and what came of it.","properties":{"status":{"type":"string","enum":["requested","signed","refused"],"description":"`requested` — waiting for your signer, at most its 10-minute signing window. `signed` —\nthe new version (`tx_hash`) is sent in place of the old one. `refused` — not sent\n(`reason`); the old version is unchanged.\n","isRequired":true,"uniqueKey":"speedup.status","typeLabel":"enum\u003cstring>"},"number":{"type":"integer","description":"How many speedups this transaction has had, this one included.","isRequired":true,"uniqueKey":"speedup.number","typeLabel":"integer"},"requested_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"speedup.requested_at","typeLabel":"string\u003cdate-time>"},"tx_hash":{"type":"string","description":"The new version's hash, once signed.","uniqueKey":"speedup.tx_hash","typeLabel":"string"},"reason":{"type":"string","description":"Why it was refused.","uniqueKey":"speedup.reason","typeLabel":"string"}},"uniqueKey":"speedup","typeLabel":"object"},"approval":{"type":"object","description":"Present when your approval rules held the transaction for a passkey quorum — on the\n`202` and on every read after it. Absent when it went out without waiting for people.\n","required":["id","status","required","reasons","requested_at","expires_at","decisions"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"approval.id","typeLabel":"string\u003cuuid>"},"status":{"type":"string","enum":["pending","approved","rejected","expired","superseded","cancelled"],"description":"A pending quorum past `expires_at` reads `expired`. `cancelled` — you cancelled the transaction while it waited.","isRequired":true,"uniqueKey":"approval.status","typeLabel":"enum\u003cstring>"},"required":{"type":"integer","description":"Approvals needed.","isRequired":true,"uniqueKey":"approval.required","typeLabel":"integer"},"reasons":{"type":"array","items":{"type":"string","uniqueKey":"approval.reasons.items.[INDEX]","typeLabel":"string"},"description":"Why the rules held it.","isRequired":true,"uniqueKey":"approval.reasons","typeLabel":"string[]"},"requested_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"approval.requested_at","typeLabel":"string\u003cdate-time>"},"expires_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"approval.expires_at","typeLabel":"string\u003cdate-time>"},"decisions":{"type":"array","description":"Each person's passkey decision, oldest first.","items":{"type":"object","required":["decision","at","by"],"properties":{"decision":{"type":"string","enum":["approve","reject"],"isRequired":true,"uniqueKey":"approval.decisions.items.[INDEX].decision","typeLabel":"enum\u003cstring>"},"at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"approval.decisions.items.[INDEX].at","typeLabel":"string\u003cdate-time>"},"by":{"type":"object","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"approval.decisions.items.[INDEX].by.id","typeLabel":"string\u003cuuid>"},"name":{"oneOf":[{"type":"string","uniqueKey":"approval.decisions.items.[INDEX].by.name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"approval.decisions.items.[INDEX].by.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"approval.decisions.items.[INDEX].by.name","typeLabel":"string | null"},"email":{"type":"string","uniqueKey":"approval.decisions.items.[INDEX].by.email","typeLabel":"string"}},"isRequired":true,"uniqueKey":"approval.decisions.items.[INDEX].by","typeLabel":"object"}},"uniqueKey":"approval.decisions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"approval.decisions","typeLabel":"object[]"},"group":{"oneOf":[{"type":"string","description":"The approver group asked.","uniqueKey":"approval.group.oneOf.0","typeLabel":"string"},{"type":"null","description":"The approver group asked.","uniqueKey":"approval.group.oneOf.1","typeLabel":"null"}],"uniqueKey":"approval.group","typeLabel":"string | null"},"rule_version":{"oneOf":[{"type":"integer","description":"The approval rules version that held it.","uniqueKey":"approval.rule_version.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The approval rules version that held it.","uniqueKey":"approval.rule_version.oneOf.1","typeLabel":"null"}],"uniqueKey":"approval.rule_version","typeLabel":"integer | null"},"decided_at":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"approval.decided_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"approval.decided_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"approval.decided_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"approval","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"operation_id":"0199a3c4-8a00-7c22-8d3e-4f5a6b7c8d9e","status":"failed","network":"mainnet","chain":"tron","wallet":{"id":"0199a3b1-5e20-7d41-9c3a-2b4c6d8e0f12","reference":"hot-1","address":"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"},"actions":[{"type":"transfer","to":"TC6A9sQD2tCSaR1wcBXZtrvGkFyoLgRHHF","amount":"50000000000","asset":"USDT","contract":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","decimals":6}],"end_user_ref":"user-4211","tags":[],"idempotency_key":"payout-981","failure":{"stage":"approval","reason":"cancelled","retryable":false,"message":"The payout was cancelled before it was signed. Nothing was signed or moved."},"approval":{"id":"0199a3c4-9b10-7d33-9e4f-5a6b7c8d9e0f","status":"cancelled","required":2,"reasons":["Amount step $10000 and above"],"group":"Treasury","rule_version":3,"requested_at":"2026-10-08T12:00:00Z","expires_at":"2026-10-08T16:00:00Z","decided_at":"2026-10-08T12:03:00Z","decisions":[]},"created_at":"2026-10-08T12:00:00Z","updated_at":"2026-10-08T12:03:00Z"},"examples":{"Example":{"title":"Example","value":{"operation_id":"0199a3c4-8a00-7c22-8d3e-4f5a6b7c8d9e","status":"failed","network":"mainnet","chain":"tron","wallet":{"id":"0199a3b1-5e20-7d41-9c3a-2b4c6d8e0f12","reference":"hot-1","address":"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"},"actions":[{"type":"transfer","to":"TC6A9sQD2tCSaR1wcBXZtrvGkFyoLgRHHF","amount":"50000000000","asset":"USDT","contract":"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t","decimals":6}],"end_user_ref":"user-4211","tags":[],"idempotency_key":"payout-981","failure":{"stage":"approval","reason":"cancelled","retryable":false,"message":"The payout was cancelled before it was signed. Nothing was signed or moved."},"approval":{"id":"0199a3c4-9b10-7d33-9e4f-5a6b7c8d9e0f","status":"cancelled","required":2,"reasons":["Amount step $10000 and above"],"group":"Treasury","rule_version":3,"requested_at":"2026-10-08T12:00:00Z","expires_at":"2026-10-08T16:00:00Z","decided_at":"2026-10-08T12:03:00Z","decisions":[]},"created_at":"2026-10-08T12:00:00Z","updated_at":"2026-10-08T12:03:00Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"5a29bd4c-8d81-4178-8691-af06c5b08dd4":{"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"},"73e180b4-bc8f-452d-b483-5a8e688be47f":{"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"},"e4f5d38f-4b54-441d-a1d4-39023217c225":{"description":"No such resource in your organization, or outside the key's vaults.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable; not stable.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code, where one exists.","uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"operation not found"},"examples":{"Example":{"title":"Example","value":{"error":"operation not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"6269161a-489a-48ea-b275-a293d9c922f0":{"description":"The transaction can no longer be cancelled: it is past approval (on its way to your\nsigner, signed, on chain or ended), its quorum already decided, a workflow's batch carries\nit, or it was not sent through the API. Nothing changed.\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":{"authorized":{"title":"authorized","value":{"error":"the transaction is authorized: it is on its way to signing","code":"not_cancellable"}},"confirmed":{"title":"confirmed","value":{"error":"the transaction is confirmed: it is on chain","code":"not_cancellable"}},"not_from_api":{"title":"not_from_api","value":{"error":"the transaction was not sent through the API: a workflow's transaction stops with its run","code":"not_cancellable"}}},"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":"Cancel a transaction - Citadel API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/transactions/cancel-a-transaction.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=\"Withdraws a transaction while nothing of it is signed yet: - held by your approval rules (status: awaiting_approval): its quorum request closes (approval.status: cancelled), so nobody can approve it any more, and the amounts and the network fee held for it are spendable again; - queued (queue: true) and not yet picked up by a workflow\u0026#x27;s batch: it held nothing. The transaction ends failed with failure.reason: cancelled, and the operation.failed webhook follows. The answer is the transaction, the body GET /transactions/{id} reads. Cancelling it again answers the same 200. Otherwise it is 409 not_cancellable, and nothing changes. From authorized on, the transaction is on its way to your signer, signed, on chain or ended, and the error says which. A quorum that has already decided stands: approved, it is being sent; rejected or expired, it fails on its own. A queued payout a batch already carries goes with the batch. Only what your API keys sent can be cancelled: a transaction a workflow sent stops with its run (POST /runs/{id}/cancel), and the ones Citadel makes for itself cannot be. Takes the operation_id or the idempotency key, like GET /transactions/{id}, and no network. Needs the transactions.write scope. A transaction from a wallet outside the key\u0026#x27;s vaults answers 404.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Citadel API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Cancel a transaction - Citadel API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Withdraws a transaction while nothing of it is signed yet: - held by your approval rules (status: awaiting_approval): its quorum request closes (approval.status: cancelled), so nobody can approve it any more, and the amounts and the network fee held for it are spendable again; - queued (queue: true) and not yet picked up by a workflow\u0026#x27;s batch: it held nothing. The transaction ends failed with failure.reason: cancelled, and the operation.failed webhook follows. The answer is the transaction, the body GET /transactions/{id} reads. Cancelling it again answers the same 200. Otherwise it is 409 not_cancellable, and nothing changes. From authorized on, the transaction is on its way to your signer, signed, on chain or ended, and the error says which. A quorum that has already decided stands: approved, it is being sent; rejected or expired, it fails on its own. A queued payout a batch already carries goes with the batch. Only what your API keys sent can be cancelled: a transaction a workflow sent stops with its run (POST /runs/{id}/cancel), and the ones Citadel makes for itself cannot be. Takes the operation_id or the idempotency key, like GET /transactions/{id}, and no network. Needs the transactions.write scope. A transaction from a wallet outside the key\u0026#x27;s vaults answers 404.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Citadel API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://local./api-reference/transactions/cancel-a-transaction\">\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=\"Cancel a transaction - Citadel API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Withdraws a transaction while nothing of it is signed yet: - held by your approval rules (status: awaiting_approval): its quorum request closes (approval.status: cancelled), so nobody can approve it any more, and the amounts and the network fee held for it are spendable again; - queued (queue: true) and not yet picked up by a workflow\u0026#x27;s batch: it held nothing. The transaction ends failed with failure.reason: cancelled, and the operation.failed webhook follows. The answer is the transaction, the body GET /transactions/{id} reads. Cancelling it again answers the same 200. Otherwise it is 409 not_cancellable, and nothing changes. From authorized on, the transaction is on its way to your signer, signed, on chain or ended, and the error says which. A quorum that has already decided stands: approved, it is being sent; rejected or expired, it fails on its own. A queued payout a batch already carries goes with the batch. Only what your API keys sent can be cancelled: a transaction a workflow sent stops with its run (POST /runs/{id}/cancel), and the ones Citadel makes for itself cannot be. Takes the operation_id or the idempotency key, like GET /transactions/{id}, and no network. Needs the transactions.write scope. A transaction from a wallet outside the key\u0026#x27;s vaults answers 404.\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Citadel API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1F5BD8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://local./api-reference/transactions/cancel-a-transaction\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/transactions/cancel-a-transaction.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","description":"Reads a transaction by its `operation_id` or by the `Idempotency-Key` you sent it\nwith — so a client that lost the response can still find it. It takes no `network`:\nthe id is enough, and the answer carries the `network` the transaction is on.\n\nThe body is everything you need to book it: the wallet it leaves from, its `actions` with\neach recipient, amount and asset (symbol, contract, decimals), your `end_user_ref` and\n`tags`, the network `fee` the landed transaction cost, and its times. One that ended\nwithout moving money carries `failure`; one declared expired that landed after all\ncarries `corrected`, as the `operation.confirmed` webhook did. A transaction your\napproval rules held carries its `approval`: the quorum, its state, and who decided when.\n\nNeeds the `read` scope. A transaction from a wallet outside the key's vaults answers\n`404`.\n","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","description":"Signs an EVM transaction again under the same nonce with higher fees, so the network takes\nit in place of the version that waits: one stuck behind its nonce (the `operation.stuck`\nwebhook, `stuck` on the transaction), or one the nodes hold that no block mines because its\nfee is below what the network asks now.\n\nThe new version moves exactly the same money from the same wallet to the same recipient;\nonly the fees change, each at least 12.5% above the waiting version's, or the network's\ncurrent price when that is higher. Both versions share one nonce, so at most one of them\nis ever mined and the payout cannot be paid twice. Your policy engine signs the new\nversion only on these terms, and does not count it against your limits again. The extra\nnetwork fee the higher cap may cost is held in the wallet's native coin until the\ntransaction settles.\n\nThe answer is `202` with the transaction. Its `speedup` reads `requested` until your\nsigner answers, then:\n\n- `signed`: the new version is sent in place of the old one, and `tx_hash` is its hash.\n If the network mines the old version after all, the transaction confirms under the old\n hash: `tx_hash` and the `operation.confirmed` webhook name the version that landed.\n- `refused`: the new version is not sent, and `speedup.reason` says why: your policy\n engine or signer refused it, every node rejected it, or no answer came within its\n 10-minute signing window. The waiting version, its status and its holds stay as they\n were. You may ask again.\n\nIt is `409 not_speedable`, and nothing changes, when:\n\n- the transaction is not an EVM transfer from a standard account, or it is sponsored.\n TRON, Solana and TON transactions never wait behind a nonce: they expire with their\n validity window, and their funds return;\n- it is not signed yet, or it has ended;\n- its current version has waited less than 5 minutes;\n- a speedup of it is still waiting for your signer;\n- its nonce is already mined, so it settles on its own;\n- the wallet cannot cover the higher network fee.\n\nA higher fee does not help a transaction stuck because the wallet lacks the coin for gas\n(`insufficient funds` in `stuck.error`): top the wallet up instead, and the waiting\nversion goes through as it is.\n\nTakes the `operation_id` or the idempotency key, like `GET /transactions/{id}`, and no\n`network`. Needs the `transactions.write` scope. A transaction from a wallet outside the\nkey's vaults answers `404`.\n","openapi":"/openapi.yaml post /transactions/{id}/speedup","href":"/api-reference/transactions/speed-up-a-stuck-evm-transaction"},{"title":"Validate an address","openapi":"/openapi.yaml get /addresses/validate","href":"/api-reference/transactions/validate-an-address"}]},{"group":"Transfers","pages":[{"title":"List transfers","openapi":"/openapi.yaml get /transfers","href":"/api-reference/transfers/list-transfers"},{"title":"Get a transfer","openapi":"/openapi.yaml get /transfers/{tx_hash}","href":"/api-reference/transfers/get-a-transfer"}]},{"group":"Reference","pages":[{"title":"List networks and chains","openapi":"/openapi.yaml get /networks","href":"/api-reference/reference/list-networks-and-chains"},{"title":"List assets","openapi":"/openapi.yaml get /assets","href":"/api-reference/reference/list-assets"},{"title":"List asset prices","openapi":"/openapi.yaml get /prices","href":"/api-reference/reference/list-asset-prices"},{"title":"Get network status","openapi":"/openapi.yaml get /status","href":"/api-reference/reference/get-network-status"}]},{"group":"Organization","pages":[{"title":"List vaults","openapi":"/openapi.yaml get /vaults","href":"/api-reference/organization/list-vaults"},{"title":"Get organization balances","openapi":"/openapi.yaml get /balances","href":"/api-reference/organization/get-organization-balances"},{"title":"Get the calling key","openapi":"/openapi.yaml get /me","href":"/api-reference/organization/get-the-calling-key"},{"title":"Get the billing balance","openapi":"/openapi.yaml get /billing/balance","href":"/api-reference/organization/get-the-billing-balance"}]},{"group":"Approvals","pages":[{"title":"List approvals","openapi":"/openapi.yaml get /approvals","href":"/api-reference/approvals/list-approvals"}]},{"group":"Policy","pages":[{"title":"Get the policy document","openapi":"/openapi.yaml get /policy","href":"/api-reference/policy/get-the-policy-document"},{"title":"Draft the policy document","openapi":"/openapi.yaml post /policy/drafts","href":"/api-reference/policy/draft-the-policy-document"},{"title":"Get a policy draft","openapi":"/openapi.yaml get /policy/drafts/{version}","href":"/api-reference/policy/get-a-policy-draft"},{"title":"Publish a signed policy draft","openapi":"/openapi.yaml post /policy/publish","href":"/api-reference/policy/publish-a-signed-policy-draft"}]},{"group":"Workflows","pages":[{"title":"Start workflows by event","openapi":"/openapi.yaml post /events/{name}","href":"/api-reference/workflows/start-workflows-by-event"},{"title":"List workflow runs","openapi":"/openapi.yaml get /runs","href":"/api-reference/workflows/list-workflow-runs"},{"title":"Get a workflow run","openapi":"/openapi.yaml get /runs/{id}","href":"/api-reference/workflows/get-a-workflow-run"},{"title":"Cancel a workflow run","openapi":"/openapi.yaml post /runs/{id}/cancel","href":"/api-reference/workflows/cancel-a-workflow-run"},{"title":"List workflows","openapi":"/openapi.yaml get /workflows","href":"/api-reference/workflows/list-workflows"}]},{"group":"Webhook endpoints","pages":[{"title":"List webhook endpoints","openapi":"/openapi.yaml get /webhook_endpoints","href":"/api-reference/webhook-endpoints/list-webhook-endpoints"},{"title":"Add a webhook endpoint","openapi":"/openapi.yaml post /webhook_endpoints","href":"/api-reference/webhook-endpoints/add-a-webhook-endpoint"},{"title":"Get a webhook endpoint","openapi":"/openapi.yaml get /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/get-a-webhook-endpoint"},{"title":"Remove a webhook endpoint","openapi":"/openapi.yaml delete /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/remove-a-webhook-endpoint"},{"title":"Change a webhook endpoint","openapi":"/openapi.yaml patch /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/change-a-webhook-endpoint"},{"title":"Send a test delivery","openapi":"/openapi.yaml post /webhook_endpoints/{id}/test","href":"/api-reference/webhook-endpoints/send-a-test-delivery"},{"title":"Rotate the signing secret","openapi":"/openapi.yaml post /webhook_endpoints/{id}/rotate_secret","href":"/api-reference/webhook-endpoints/rotate-the-signing-secret"}]},{"group":"Webhook deliveries","pages":[{"title":"List webhook deliveries","openapi":"/openapi.yaml get /webhook_deliveries","href":"/api-reference/webhook-deliveries/list-webhook-deliveries"},{"title":"Retry a failed delivery","openapi":"/openapi.yaml post /webhook_deliveries/{id}/retry","href":"/api-reference/webhook-deliveries/retry-a-failed-delivery"},{"title":"Retry the failed deliveries of a period","openapi":"/openapi.yaml post /webhook_deliveries/retry","href":"/api-reference/webhook-deliveries/retry-the-failed-deliveries-of-a-period"}]},{"group":"Reports","pages":[{"title":"Ask for a report","openapi":"/openapi.yaml post /reports","href":"/api-reference/reports/ask-for-a-report"},{"title":"Get a report","openapi":"/openapi.yaml get /reports/{id}","href":"/api-reference/reports/get-a-report"},{"title":"Download a report's file","openapi":"/openapi.yaml get /reports/{id}/file","href":"/api-reference/reports/download-a-reports-file"}]},{"group":"API Reference","pages":[{"title":"Operation*","openapi":"/openapi.yaml webhook operation","href":"/api-reference/operation*"},{"title":"Blockchain event*","openapi":"/openapi.yaml webhook blockchain_event","href":"/api-reference/blockchain_event*"},{"title":"Run*","openapi":"/openapi.yaml webhook run","href":"/api-reference/run*"},{"title":"Wallet*","openapi":"/openapi.yaml webhook wallet","href":"/api-reference/wallet*"}]}]}]},"basePath":"","title":"Cancel a transaction - 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"]}