One transfer by its transaction hash, on network — the answer to “I sent it, where is
it?”. 404 until it is confirmed: Citadel reports a transaction once it is final. The body
is a row of the list: the blockchain_event.confirmed webhook’s, plus aml. Read it again
after a screening workflow ran to see the provider’s reply.
Needs the read scope. A transfer that touches no wallet in the key’s vaults answers 404.
An API key minted in the console (ctd_…). Authenticates; never authorizes funds. A key
carries scopes (read, wallets.write, transactions.write, events.write,
webhooks.write, policy.write) and may be limited to vaults, to IP addresses, and in
lifetime — see Authentication.
The network the data lives on. Required — there is no default network: without it,
422 network_required. A wallet named by its id on another network: 422 network_mismatch.
The network the data lives on. Required wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
The network the data lives on. Required wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
API only: the compliance screenings your workflows ran for this transfer — the
workflows it started, and the ones they called. Empty when none ran. The webhook body
has none: it leaves before any screening.
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/transfers/get-a-transfer","slug":"/api-reference/transfers/get-a-transfer","pageMetadata":{"openapi":"/openapi.yaml get /transfers/{tx_hash}","description":"One transfer by its transaction hash, on `network` — the answer to \"I sent it, where is\nit?\". `404` until it is confirmed: Citadel reports a transaction once it is final. The body\nis a row of the list: the `blockchain_event.confirmed` webhook's, plus `aml`. Read it again\nafter a screening workflow ran to see the provider's reply.\n\nNeeds the `read` scope. A transfer that touches no wallet in the key's vaults answers `404`.\n","href":"/api-reference/transfers/get-a-transfer","title":"Get a transfer"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"One transfer by its transaction hash, on \", _jsx(_components.code, {\n children: \"network\"\n }), \" — the answer to “I sent it, where is\\nit?”. \", _jsx(_components.code, {\n children: \"404\"\n }), \" until it is confirmed: Citadel reports a transaction once it is final. The body\\nis a row of the list: the \", _jsx(_components.code, {\n children: \"blockchain_event.confirmed\"\n }), \" webhook’s, plus \", _jsx(_components.code, {\n children: \"aml\"\n }), \". Read it again\\nafter a screening workflow ran to see the provider’s reply.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Needs the \", _jsx(_components.code, {\n children: \"read\"\n }), \" scope. A transfer that touches no wallet in the key’s vaults answers \", _jsx(_components.code, {\n children: \"404\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"/openapi.yaml get /transfers/{tx_hash}","description":"One transfer by its transaction hash, on `network` — the answer to \"I sent it, where is\nit?\". `404` until it is confirmed: Citadel reports a transaction once it is final. The body\nis a row of the list: the `blockchain_event.confirmed` webhook's, plus `aml`. Read it again\nafter a screening workflow ran to see the provider's reply.\n\nNeeds the `read` scope. A transfer that touches no wallet in the key's vaults answers `404`.\n","href":"/api-reference/transfers/get-a-transfer","title":"Get a transfer"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Transfers"],"operationId":"getTransfer","summary":"Get a transfer","description":"One transfer by its transaction hash, on `network` — the answer to \"I sent it, where is\nit?\". `404` until it is confirmed: Citadel reports a transaction once it is final. The body\nis a row of the list: the `blockchain_event.confirmed` webhook's, plus `aml`. Read it again\nafter a screening workflow ran to see the provider's reply.\n\nNeeds the `read` scope. A transfer that touches no wallet in the key's vaults answers `404`.\n","parameters":["71e60a25-9099-475d-bb7f-517a4d2c2ed4","def9ff6f-7a51-4048-9b74-2e18b6e9dd83"],"responses":{"200":"13e0cbea-5698-4c8f-9908-8cfd03c80875","401":"00e81319-3da9-4bdf-bb27-0f588a68b3ff","403":"ff863155-85f1-40d8-96d1-2b375a363c4d","404":"3afc5ad1-2004-4198-a84e-a1664a12e351","422":"e7842d1b-7349-40c3-aa27-8640fd4edf1e"},"method":"get","type":"path","servers":["825d9789-7332-4a65-b039-b330384d4003"],"security":["24aebd70-fdbd-4dae-a4a9-d627e2d2711f"],"path":"/transfers/{tx_hash}","baseUrlOptions":["https://api.citadel.example/api/v1"],"title":"Get a transfer","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"71e60a25-9099-475d-bb7f-517a4d2c2ed4":{"name":"tx_hash","in":"path","required":true,"description":"The transaction hash, as the chain's explorers show it.","schema":{"type":"string","isRequired":true,"description":"The transaction hash, as the chain's explorers show it.","uniqueKey":"","typeLabel":"string"}},"def9ff6f-7a51-4048-9b74-2e18b6e9dd83":{"name":"network","in":"query","required":true,"description":"The network the data lives on. Required — there is no default network: without it,\n`422 network_required`. A wallet named by its id on another network: `422 network_mismatch`.\n","schema":{"type":"string","enum":["mainnet","testnet"],"description":"The network the data lives on. Required — there is no default network: without it,\n`422 network_required`. A wallet named by its id on another network: `422 network_mismatch`.\n\nThe network the data lives on. Required wherever it appears in a request — there is no\ndefault network. One your installation does not serve: `422 network_not_served`.\n","isRequired":true,"uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"responses":{"13e0cbea-5698-4c8f-9908-8cfd03c80875":{"description":"The transfer.","content":{"application/json":{"schema":{"type":"object","required":["tx_hash","chain","instance","network","direction","status","legs"],"properties":{"tx_hash":{"type":"string","isRequired":true,"uniqueKey":"tx_hash","typeLabel":"string"},"chain":{"type":"string","enum":["tron","evm","solana","ton"],"isRequired":true,"uniqueKey":"chain","typeLabel":"enum\u003cstring>"},"instance":{"type":"string","description":"The chain instance it landed on, as `GET /networks` names it: for EVM, which L1/L2.","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"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>"},"direction":{"type":"string","enum":["in","out","internal"],"description":"`in` arrived from outside (a deposit), `out` left your wallets, `internal` moved between two of them.","isRequired":true,"uniqueKey":"direction","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["confirmed"],"description":"Always `confirmed`. Citadel reports a transaction only once it is final.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"legs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","uniqueKey":"legs.items.[INDEX].index","typeLabel":"integer"},"asset":{"type":"string","description":"The token's symbol, as `GET /assets` names it; `native` for the chain's own coin. A token outside the catalog (not credited) has no symbol and reads its contract. A `resource` leg reads `\u003cop>:\u003cresource>`: `stake`, `unstake`, `delegate` or `undelegate`, then `energy` or `bandwidth` (`delegate:energy`).","uniqueKey":"legs.items.[INDEX].asset","typeLabel":"string"},"contract":{"oneOf":[{"type":"string","description":"The token's contract, spelled as `GET /assets` spells it: its identity, and what the `asset` filter matches. `null` for the chain's own coin and for a `resource` leg. Match a token on it, never on the symbol.","uniqueKey":"legs.items.[INDEX].contract.oneOf.0","typeLabel":"string"},{"type":"null","description":"The token's contract, spelled as `GET /assets` spells it: its identity, and what the `asset` filter matches. `null` for the chain's own coin and for a `resource` leg. Match a token on it, never on the symbol.","uniqueKey":"legs.items.[INDEX].contract.oneOf.1","typeLabel":"null"}],"uniqueKey":"legs.items.[INDEX].contract","typeLabel":"string | null"},"kind":{"type":"string","description":"`native` the chain's own coin, `token` a token transfer, `resource` TRON energy or bandwidth staked or delegated.","uniqueKey":"legs.items.[INDEX].kind","typeLabel":"string"},"from":{"oneOf":[{"type":"string","description":"The sender the chain states. `null` when nobody sent it: tokens minted straight to the recipient, or the balance a self-destructing EVM contract leaves to it, have no sender, so there is nowhere to return them.","uniqueKey":"legs.items.[INDEX].from.oneOf.0","typeLabel":"string"},{"type":"null","description":"The sender the chain states. `null` when nobody sent it: tokens minted straight to the recipient, or the balance a self-destructing EVM contract leaves to it, have no sender, so there is nowhere to return them.","uniqueKey":"legs.items.[INDEX].from.oneOf.1","typeLabel":"null"}],"uniqueKey":"legs.items.[INDEX].from","typeLabel":"string | null"},"from_basis":{"oneOf":[{"type":"string","enum":["owner","pass_through","program","none",null],"description":"Whether `from` owned the money. Only `owner` is somebody to send it back to.\n- `owner`: its own balance paid this amount. A smart account, a Safe or an EIP-7702 account counts as an owner when it spends what it holds.\n- `pass_through`: a contract passed on money it received earlier in the same transaction (a forwarder, a pooled disperse, a router). The money was somebody else's.\n- `program`: an account a program controls, such as a Solana PDA paying out of a vault. It is not anybody's wallet.\n- `none`: nobody sent it. The tokens were minted, or a self-destructing EVM contract left its balance.\n\n`null` on a transfer recorded before Citadel assessed senders. Do not read it as `owner`.\n","uniqueKey":"legs.items.[INDEX].from_basis.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["owner","pass_through","program","none",null],"description":"Whether `from` owned the money. Only `owner` is somebody to send it back to.\n- `owner`: its own balance paid this amount. A smart account, a Safe or an EIP-7702 account counts as an owner when it spends what it holds.\n- `pass_through`: a contract passed on money it received earlier in the same transaction (a forwarder, a pooled disperse, a router). The money was somebody else's.\n- `program`: an account a program controls, such as a Solana PDA paying out of a vault. It is not anybody's wallet.\n- `none`: nobody sent it. The tokens were minted, or a self-destructing EVM contract left its balance.\n\n`null` on a transfer recorded before Citadel assessed senders. Do not read it as `owner`.\n","uniqueKey":"legs.items.[INDEX].from_basis.oneOf.1","typeLabel":"null"}],"uniqueKey":"legs.items.[INDEX].from_basis","typeLabel":"enum\u003cstring> | null"},"origin":{"oneOf":[{"type":"string","description":"The best address behind the money, and the one to screen. For `owner` it is `from` itself. For `pass_through` it is whoever funded the contract, or the transaction's signer when several did. For `program` it is the signer, and for `none` the minter (the transaction's signer). A workflow's screening of the source asks about this address. It is never a refund destination unless it is also an `owner` sender.\n","uniqueKey":"legs.items.[INDEX].origin.oneOf.0","typeLabel":"string"},{"type":"null","description":"The best address behind the money, and the one to screen. For `owner` it is `from` itself. For `pass_through` it is whoever funded the contract, or the transaction's signer when several did. For `program` it is the signer, and for `none` the minter (the transaction's signer). A workflow's screening of the source asks about this address. It is never a refund destination unless it is also an `owner` sender.\n","uniqueKey":"legs.items.[INDEX].origin.oneOf.1","typeLabel":"null"}],"uniqueKey":"legs.items.[INDEX].origin","typeLabel":"string | null"},"to":{"type":"string","uniqueKey":"legs.items.[INDEX].to","typeLabel":"string"},"amount_base_units":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","uniqueKey":"legs.items.[INDEX].amount_base_units","typeLabel":"string"},"wallet":{"oneOf":[{"type":"string","description":"Your wallet reference, when the leg touches one (null when it is outside the key's vaults).","uniqueKey":"legs.items.[INDEX].wallet.oneOf.0","typeLabel":"string"},{"type":"null","description":"Your wallet reference, when the leg touches one (null when it is outside the key's vaults).","uniqueKey":"legs.items.[INDEX].wallet.oneOf.1","typeLabel":"null"}],"uniqueKey":"legs.items.[INDEX].wallet","typeLabel":"string | null"}},"uniqueKey":"legs.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"legs","typeLabel":"object[]"},"block_number":{"oneOf":[{"type":"integer","uniqueKey":"block_number.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"block_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"block_number","typeLabel":"integer | null"},"block_time":{"oneOf":[{"type":"string","format":"date-time","description":"The block's time, as the chain states it.","uniqueKey":"block_time.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The block's time, as the chain states it.","uniqueKey":"block_time.oneOf.1","typeLabel":"null"}],"uniqueKey":"block_time","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","format":"date-time","description":"When Citadel recorded it — what `from` and `to` filter on.","uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"aml":{"type":"array","items":{"type":"object","required":["provider","run_id","checked_at","response"],"description":"One compliance screening, with the provider's reply exactly as it sent it. Citadel adds no\nverdict of its own: what the reply means, and whether to credit the deposit, is your call. A\nscreening still waiting for its provider, or that no provider answered, is not listed.\n","properties":{"provider":{"type":"string","description":"The compliance provider that answered.","isRequired":true,"uniqueKey":"aml.items.[INDEX].provider","typeLabel":"string"},"run_id":{"type":"string","format":"uuid","description":"The workflow run that screened (`GET /runs/{id}`).","isRequired":true,"uniqueKey":"aml.items.[INDEX].run_id","typeLabel":"string\u003cuuid>"},"checked_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"aml.items.[INDEX].checked_at","typeLabel":"string\u003cdate-time>"},"response":{"oneOf":[{"type":"object","additionalProperties":true,"description":"The provider's reply. Its shape is the provider's.","isRequired":true,"uniqueKey":"aml.items.[INDEX].response.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"The provider's reply. Its shape is the provider's.","isRequired":true,"uniqueKey":"aml.items.[INDEX].response.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"aml.items.[INDEX].response","typeLabel":"object | null"}},"uniqueKey":"aml.items.[INDEX]","typeLabel":"object"},"description":"API only: the compliance screenings your workflows ran for this transfer — the\nworkflows it started, and the ones they called. Empty when none ran. The webhook body\nhas none: it leaves before any screening.\n","uniqueKey":"aml","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"tx_hash":"\u003cstring>","chain":"tron","instance":"\u003cstring>","network":"mainnet","direction":"in","status":"confirmed","legs":[{"index":123,"asset":"\u003cstring>","contract":"\u003cstring>","kind":"\u003cstring>","from":"\u003cstring>","from_basis":"owner","origin":"\u003cstring>","to":"\u003cstring>","amount_base_units":"\u003cstring>","wallet":"\u003cstring>"}],"block_number":123,"block_time":"2023-11-07T05:31:56Z","created_at":"2023-11-07T05:31:56Z","aml":[{"provider":"\u003cstring>","run_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","checked_at":"2023-11-07T05:31:56Z","response":{}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"00e81319-3da9-4bdf-bb27-0f588a68b3ff":{"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"},"ff863155-85f1-40d8-96d1-2b375a363c4d":{"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"},"3afc5ad1-2004-4198-a84e-a1664a12e351":{"description":"No confirmed transfer with this hash on `network` touches your wallets.","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":"transfer not found"},"examples":{"Example":{"title":"Example","value":{"error":"transfer not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"e7842d1b-7349-40c3-aa27-8640fd4edf1e":{"description":"The request was understood and refused. Nothing was created or reserved. A request\nwithout `network` is refused with `network_required`, a network your installation does\nnot serve with `network_not_served`, a wallet id from another network with\n`network_mismatch`. A list refuses a cursor it did not issue with `invalid_cursor`, and an\nunknown filter value, a filter sent as a list or an object instead of one string, or a\n`limit` out of range without a `code`; so does a webhook retry of a period without `from`.\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable; not stable.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine code, where one exists.","uniqueKey":"code","typeLabel":"string"},"retryable":{"type":"boolean","uniqueKey":"retryable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"refused":{"title":"refused","value":{"error":"wallet has no address yet"}},"network_required":{"title":"network_required","value":{"error":"network is required (mainnet, testnet)","code":"network_required"}},"network_not_served":{"title":"network_not_served","value":{"error":"network \"devnet\" is not served here (mainnet, testnet)","code":"network_not_served"}},"network_mismatch":{"title":"network_mismatch","value":{"error":"wallet 0199a3c4-7f1e-7b11-9c2e-3f4a5b6c7d8e lives on testnet, not mainnet","code":"network_mismatch"}},"invalid_cursor":{"title":"invalid_cursor","value":{"error":"cursor is not one this API issued","code":"invalid_cursor"}},"invalid_filter":{"title":"invalid_filter","value":{"error":"unknown status settled (created, aml_pending, awaiting_approval, …)"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"24aebd70-fdbd-4dae-a4a9-d627e2d2711f":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key minted in the console (`ctd_…`). Authenticates; never authorizes funds. A key\ncarries scopes (`read`, `wallets.write`, `transactions.write`, `events.write`,\n`webhooks.write`, `policy.write`) and may be limited to vaults, to IP addresses, and in\nlifetime — see Authentication.\n","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"825d9789-7332-4a65-b039-b330384d4003":{"url":"https://api.citadel.example/api/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An API key minted in the console (`ctd_…`). Authenticates; never authorizes funds. A key\ncarries scopes (`read`, `wallets.write`, `transactions.write`, `events.write`,\n`webhooks.write`, `policy.write`) and may be limited to vaults, to IP addresses, and in\nlifetime — see Authentication.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An API key minted in the console (`ctd_…`). Authenticates; never authorizes funds. A key\ncarries scopes (`read`, `wallets.write`, `transactions.write`, `events.write`,\n`webhooks.write`, `policy.write`) and may be limited to vaults, to IP addresses, and in\nlifetime — see Authentication.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"localhost","siteName":"Citadel API","title":"Get a transfer - Citadel API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/transfers/get-a-transfer.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=\"One transfer by its transaction hash, on network — the answer to \u0026quot;I sent it, where is it?\u0026quot;. 404 until it is confirmed: Citadel reports a transaction once it is final. The body is a row of the list: the blockchain_event.confirmed webhook\u0026#x27;s, plus aml. Read it again after a screening workflow ran to see the provider\u0026#x27;s reply. Needs the read scope. A transfer that touches no wallet in the key\u0026#x27;s vaults answers 404.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Citadel API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/local/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get a transfer - Citadel API\">\u003cmeta data-mint-head property=\"og:description\" content=\"One transfer by its transaction hash, on network — the answer to \u0026quot;I sent it, where is it?\u0026quot;. 404 until it is confirmed: Citadel reports a transaction once it is final. The body is a row of the list: the blockchain_event.confirmed webhook\u0026#x27;s, plus aml. Read it again after a screening workflow ran to see the provider\u0026#x27;s reply. Needs the read scope. A transfer that touches no wallet in 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/transfers/get-a-transfer\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get a transfer - Citadel API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"One transfer by its transaction hash, on network — the answer to \u0026quot;I sent it, where is it?\u0026quot;. 404 until it is confirmed: Citadel reports a transaction once it is final. The body is a row of the list: the blockchain_event.confirmed webhook\u0026#x27;s, plus aml. Read it again after a screening workflow ran to see the provider\u0026#x27;s reply. Needs the read scope. A transfer that touches no wallet in 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/transfers/get-a-transfer\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/transfers/get-a-transfer.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","description":"What moved on chain through your wallets on one network, newest first: deposits\n(`direction: in`), payouts (`out`), and moves between your own wallets (`internal`). Each\nrow is the body of the `blockchain_event.confirmed` webhook, so you credit a deposit the\nsame way from either, plus `aml`: the compliance screenings your workflows ran for it since.\nUse it to catch up on deposits whose webhook you missed.\n\nOnly confirmed transactions are listed: Citadel reports one once a reorganization can no\nlonger undo it. A transaction that moved no value (an approve, a plain contract call) is\nnot a transfer; read it with `GET /transactions/{id}`.\n\n`network` is required. Paged with a cursor — see Lists and pagination. Needs the `read`\nscope. A key limited to vaults lists the transfers that touch a wallet in them, and a leg\nof a wallet outside them reads `wallet: null`.\n","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","description":"The networks your installation serves and, on each, the chains it indexes — the values\n`network` and `chain` take everywhere else. EVM has one instance per L1/L2, and a transfer\nnames the `instance` it landed on.\n\n`enabled` is your organization's own switch for a chain: off refuses new wallets there,\nwhile wallets already issued keep being indexed. Takes no `network`. Needs the `read` scope.\n","openapi":"/openapi.yaml get /networks","href":"/api-reference/reference/list-networks-and-chains"},{"title":"List assets","openapi":"/openapi.yaml get /assets","href":"/api-reference/reference/list-assets"},{"title":"List asset prices","openapi":"/openapi.yaml get /prices","href":"/api-reference/reference/list-asset-prices"},{"title":"Get network status","openapi":"/openapi.yaml get /status","href":"/api-reference/reference/get-network-status"}]},{"group":"Organization","pages":[{"title":"List vaults","openapi":"/openapi.yaml get /vaults","href":"/api-reference/organization/list-vaults"},{"title":"Get organization balances","openapi":"/openapi.yaml get /balances","href":"/api-reference/organization/get-organization-balances"},{"title":"Get the calling key","openapi":"/openapi.yaml get /me","href":"/api-reference/organization/get-the-calling-key"},{"title":"Get the billing balance","openapi":"/openapi.yaml get /billing/balance","href":"/api-reference/organization/get-the-billing-balance"}]},{"group":"Approvals","pages":[{"title":"List approvals","openapi":"/openapi.yaml get /approvals","href":"/api-reference/approvals/list-approvals"}]},{"group":"Policy","pages":[{"title":"Get the policy document","openapi":"/openapi.yaml get /policy","href":"/api-reference/policy/get-the-policy-document"},{"title":"Draft the policy document","openapi":"/openapi.yaml post /policy/drafts","href":"/api-reference/policy/draft-the-policy-document"},{"title":"Get a policy draft","openapi":"/openapi.yaml get /policy/drafts/{version}","href":"/api-reference/policy/get-a-policy-draft"},{"title":"Publish a signed policy draft","openapi":"/openapi.yaml post /policy/publish","href":"/api-reference/policy/publish-a-signed-policy-draft"}]},{"group":"Workflows","pages":[{"title":"Start workflows by event","openapi":"/openapi.yaml post /events/{name}","href":"/api-reference/workflows/start-workflows-by-event"},{"title":"List workflow runs","openapi":"/openapi.yaml get /runs","href":"/api-reference/workflows/list-workflow-runs"},{"title":"Get a workflow run","openapi":"/openapi.yaml get /runs/{id}","href":"/api-reference/workflows/get-a-workflow-run"},{"title":"Cancel a workflow run","openapi":"/openapi.yaml post /runs/{id}/cancel","href":"/api-reference/workflows/cancel-a-workflow-run"},{"title":"List workflows","openapi":"/openapi.yaml get /workflows","href":"/api-reference/workflows/list-workflows"}]},{"group":"Webhook endpoints","pages":[{"title":"List webhook endpoints","openapi":"/openapi.yaml get /webhook_endpoints","href":"/api-reference/webhook-endpoints/list-webhook-endpoints"},{"title":"Add a webhook endpoint","openapi":"/openapi.yaml post /webhook_endpoints","href":"/api-reference/webhook-endpoints/add-a-webhook-endpoint"},{"title":"Get a webhook endpoint","openapi":"/openapi.yaml get /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/get-a-webhook-endpoint"},{"title":"Remove a webhook endpoint","openapi":"/openapi.yaml delete /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/remove-a-webhook-endpoint"},{"title":"Change a webhook endpoint","openapi":"/openapi.yaml patch /webhook_endpoints/{id}","href":"/api-reference/webhook-endpoints/change-a-webhook-endpoint"},{"title":"Send a test delivery","openapi":"/openapi.yaml post /webhook_endpoints/{id}/test","href":"/api-reference/webhook-endpoints/send-a-test-delivery"},{"title":"Rotate the signing secret","openapi":"/openapi.yaml post /webhook_endpoints/{id}/rotate_secret","href":"/api-reference/webhook-endpoints/rotate-the-signing-secret"}]},{"group":"Webhook deliveries","pages":[{"title":"List webhook deliveries","openapi":"/openapi.yaml get /webhook_deliveries","href":"/api-reference/webhook-deliveries/list-webhook-deliveries"},{"title":"Retry a failed delivery","openapi":"/openapi.yaml post /webhook_deliveries/{id}/retry","href":"/api-reference/webhook-deliveries/retry-a-failed-delivery"},{"title":"Retry the failed deliveries of a period","openapi":"/openapi.yaml post /webhook_deliveries/retry","href":"/api-reference/webhook-deliveries/retry-the-failed-deliveries-of-a-period"}]},{"group":"Reports","pages":[{"title":"Ask for a report","openapi":"/openapi.yaml post /reports","href":"/api-reference/reports/ask-for-a-report"},{"title":"Get a report","openapi":"/openapi.yaml get /reports/{id}","href":"/api-reference/reports/get-a-report"},{"title":"Download a report's file","openapi":"/openapi.yaml get /reports/{id}/file","href":"/api-reference/reports/download-a-reports-file"}]},{"group":"API Reference","pages":[{"title":"Operation*","openapi":"/openapi.yaml webhook operation","href":"/api-reference/operation*"},{"title":"Blockchain event*","openapi":"/openapi.yaml webhook blockchain_event","href":"/api-reference/blockchain_event*"},{"title":"Run*","openapi":"/openapi.yaml webhook run","href":"/api-reference/run*"},{"title":"Wallet*","openapi":"/openapi.yaml webhook wallet","href":"/api-reference/wallet*"}]}]}]},"basePath":"","title":"Get a transfer - 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"]}