Takes the body of POST /transactions and answers what sending it now would do, without
sending anything: the network fee Citadel would hold next to the amounts, and whether your
approval rules would hold it for a passkey quorum — how many approvals, from which group,
why, and for how long. Nothing is created, reserved or signed, and no webhook follows.
It refuses what a send refuses, with the same status and code: an unknown wallet, a bad
amount or address, a wallet outside the key’s vaults (403 vault_limited), a wallet id
from another network (422 network_mismatch). network is required. queue, tags and
the idempotency key are not read: an estimate is for sending now.
network_fee is the most the network may charge the sending wallet, in its native coin —
what a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For
every other wallet (TRON, TON, Solana, EVM smart accounts) it is null: a send holds
nothing for the fee, and Citadel does not price it.
What it does not promise. Your policy engine decides only when the transaction is signed,
so an estimate never asks it. It does not check the balance: the send may still be refused
for insufficient funds. And by the time you send, the balance, the fee and the windows of
your velocity rules may have moved — the send is judged afresh.
Needs the transactions.write scope. Your approval rules judge the calling key (its age,
what it sent recently), so estimate with the key that will send.
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.
Wallet id, reference, or address on network; a wallet id must live on network. A signed request (X-Citadel-Request-Signature) names it by id or address only.
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.
true records the payout for a workflow to send later in a batch, instead of
sending it now. Exactly one transfer action.
At the door nothing is reserved, no network fee is estimated, and your approval
rules are not asked. The funds stay spendable until a workflow's batch payout picks
the payout up by its tags and reserves them for the batch. The answer is 202 with
status: created and queued: true.
Once a batch carries it, the transaction reads final when the batch landed and
failed when it did not. It has no tx_hash of its own, and these changes come
without operation.* webhooks: read them with GET /transactions/{id}. Until a batch
carries it, POST /transactions/{id}/cancel withdraws it, with operation.failed.
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 most the network may charge the sending wallet, in the chain's native coin — what a
send holds next to the amounts. null: Citadel prices no fee for this wallet and a send
holds none (every wallet but an EVM one paying its own gas).
The quorum your approval rules would hold the send for — the strictest rule that
matches, every match listed in reasons. null: it would go 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/estimate-a-transaction","slug":"/api-reference/transactions/estimate-a-transaction","pageMetadata":{"openapi":"/openapi.yaml post /transactions/estimate","description":"Takes the body of `POST /transactions` and answers what sending it now would do, without\nsending anything: the network fee Citadel would hold next to the amounts, and whether your\napproval rules would hold it for a passkey quorum — how many approvals, from which group,\nwhy, and for how long. Nothing is created, reserved or signed, and no webhook follows.\n\nIt refuses what a send refuses, with the same status and `code`: an unknown wallet, a bad\namount or address, a wallet outside the key's vaults (`403 vault_limited`), a wallet id\nfrom another network (`422 network_mismatch`). `network` is required. `queue`, `tags` and\nthe idempotency key are not read: an estimate is for sending now.\n\n`network_fee` is the most the network may charge the sending wallet, in its native coin —\nwhat a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For\nevery other wallet (TRON, TON, Solana, EVM smart accounts) it is `null`: a send holds\nnothing for the fee, and Citadel does not price it.\n\nWhat it does not promise. Your policy engine decides only when the transaction is signed,\nso an estimate never asks it. It does not check the balance: the send may still be refused\nfor insufficient funds. And by the time you send, the balance, the fee and the windows of\nyour velocity rules may have moved — the send is judged afresh.\n\nNeeds the `transactions.write` scope. Your approval rules judge the calling key (its age,\nwhat it sent recently), so estimate with the key that will send.\n","href":"/api-reference/transactions/estimate-a-transaction","title":"Estimate 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 p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Takes the body of \", _jsx(_components.code, {\n children: \"POST /transactions\"\n }), \" and answers what sending it now would do, without\\nsending anything: the network fee Citadel would hold next to the amounts, and whether your\\napproval rules would hold it for a passkey quorum — how many approvals, from which group,\\nwhy, and for how long. Nothing is created, reserved or signed, and no webhook follows.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"It refuses what a send refuses, with the same status and \", _jsx(_components.code, {\n children: \"code\"\n }), \": an unknown wallet, a bad\\namount or address, a wallet outside the key’s vaults (\", _jsx(_components.code, {\n children: \"403 vault_limited\"\n }), \"), a wallet id\\nfrom another network (\", _jsx(_components.code, {\n children: \"422 network_mismatch\"\n }), \"). \", _jsx(_components.code, {\n children: \"network\"\n }), \" is required. \", _jsx(_components.code, {\n children: \"queue\"\n }), \", \", _jsx(_components.code, {\n children: \"tags\"\n }), \" and\\nthe idempotency key are not read: an estimate is for sending now.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"network_fee\"\n }), \" is the most the network may charge the sending wallet, in its native coin —\\nwhat a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For\\nevery other wallet (TRON, TON, Solana, EVM smart accounts) it is \", _jsx(_components.code, {\n children: \"null\"\n }), \": a send holds\\nnothing for the fee, and Citadel does not price it.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"What it does not promise. Your policy engine decides only when the transaction is signed,\\nso an estimate never asks it. It does not check the balance: the send may still be refused\\nfor insufficient funds. And by the time you send, the balance, the fee and the windows of\\nyour velocity rules may have moved — the send is judged afresh.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Needs the \", _jsx(_components.code, {\n children: \"transactions.write\"\n }), \" scope. Your approval rules judge the calling key (its age,\\nwhat it sent recently), so estimate with the key that will send.\"]\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/estimate","description":"Takes the body of `POST /transactions` and answers what sending it now would do, without\nsending anything: the network fee Citadel would hold next to the amounts, and whether your\napproval rules would hold it for a passkey quorum — how many approvals, from which group,\nwhy, and for how long. Nothing is created, reserved or signed, and no webhook follows.\n\nIt refuses what a send refuses, with the same status and `code`: an unknown wallet, a bad\namount or address, a wallet outside the key's vaults (`403 vault_limited`), a wallet id\nfrom another network (`422 network_mismatch`). `network` is required. `queue`, `tags` and\nthe idempotency key are not read: an estimate is for sending now.\n\n`network_fee` is the most the network may charge the sending wallet, in its native coin —\nwhat a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For\nevery other wallet (TRON, TON, Solana, EVM smart accounts) it is `null`: a send holds\nnothing for the fee, and Citadel does not price it.\n\nWhat it does not promise. Your policy engine decides only when the transaction is signed,\nso an estimate never asks it. It does not check the balance: the send may still be refused\nfor insufficient funds. And by the time you send, the balance, the fee and the windows of\nyour velocity rules may have moved — the send is judged afresh.\n\nNeeds the `transactions.write` scope. Your approval rules judge the calling key (its age,\nwhat it sent recently), so estimate with the key that will send.\n","href":"/api-reference/transactions/estimate-a-transaction","title":"Estimate a transaction"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Transactions"],"operationId":"estimateTransaction","summary":"Estimate a transaction","description":"Takes the body of `POST /transactions` and answers what sending it now would do, without\nsending anything: the network fee Citadel would hold next to the amounts, and whether your\napproval rules would hold it for a passkey quorum — how many approvals, from which group,\nwhy, and for how long. Nothing is created, reserved or signed, and no webhook follows.\n\nIt refuses what a send refuses, with the same status and `code`: an unknown wallet, a bad\namount or address, a wallet outside the key's vaults (`403 vault_limited`), a wallet id\nfrom another network (`422 network_mismatch`). `network` is required. `queue`, `tags` and\nthe idempotency key are not read: an estimate is for sending now.\n\n`network_fee` is the most the network may charge the sending wallet, in its native coin —\nwhat a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For\nevery other wallet (TRON, TON, Solana, EVM smart accounts) it is `null`: a send holds\nnothing for the fee, and Citadel does not price it.\n\nWhat it does not promise. Your policy engine decides only when the transaction is signed,\nso an estimate never asks it. It does not check the balance: the send may still be refused\nfor insufficient funds. And by the time you send, the balance, the fee and the windows of\nyour velocity rules may have moved — the send is judged afresh.\n\nNeeds the `transactions.write` scope. Your approval rules judge the calling key (its age,\nwhat it sent recently), so estimate with the key that will send.\n","requestBody":"5bd321e0-c9d3-4199-a7cb-e49bd7e339bb","responses":{"200":"b924fc0d-1e7b-4a7f-a322-1245af544961","401":"4567b451-56ad-4d2a-9487-cb1d1fd87593","403":"844fcc81-fc6b-4456-9048-cc40106821f2","422":"b3133b42-bb71-49be-b1d5-a0f47586c7c1","503":"156be531-1b08-40a8-b0f5-d3dc36ae93ac"},"method":"post","type":"path","servers":["825d9789-7332-4a65-b039-b330384d4003"],"security":["24aebd70-fdbd-4dae-a4a9-d627e2d2711f"],"path":"/transactions/estimate","baseUrlOptions":["https://api.citadel.example/api/v1"],"title":"Estimate a transaction","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["wallet","network","actions"],"properties":{"wallet":{"type":"string","description":"Wallet id, reference, or address on `network`; a wallet id must live on `network`. A signed request (X-Citadel-Request-Signature) names it by id or address only.","isRequired":true,"uniqueKey":"wallet","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>"},"actions":{"type":"array","minItems":1,"items":{"oneOf":[{"type":"object","title":"transfer","required":["type","to","amount"],"properties":{"type":{"const":"transfer","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.0.type","typeLabel":"any"},"to":{"type":"string","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.0.to","typeLabel":"string"},"amount":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.0.amount","typeLabel":"string"},"asset":{"type":"string","description":"Symbol, contract, or `native` (default).","uniqueKey":"actions.items.[INDEX].oneOf.0.asset","typeLabel":"string"}},"uniqueKey":"actions.items.[INDEX].oneOf.0","typeLabel":"transfer · object"},{"type":"object","title":"approve","required":["type","to","amount","asset"],"properties":{"type":{"const":"approve","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.1.type","typeLabel":"any"},"to":{"type":"string","description":"The spender.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.1.to","typeLabel":"string"},"amount":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.1.amount","typeLabel":"string"},"asset":{"type":"string","description":"A token symbol or contract.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.1.asset","typeLabel":"string"}},"uniqueKey":"actions.items.[INDEX].oneOf.1","typeLabel":"approve · object"},{"type":"object","title":"swap","required":["type","to","amount","asset","token_out","min_amount_out"],"properties":{"type":{"const":"swap","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.2.type","typeLabel":"any"},"to":{"type":"string","description":"The router.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.2.to","typeLabel":"string"},"amount":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.2.amount","typeLabel":"string"},"asset":{"type":"string","description":"Token in.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.2.asset","typeLabel":"string"},"token_out":{"type":"string","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.2.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.","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.2.min_amount_out","typeLabel":"string"}},"uniqueKey":"actions.items.[INDEX].oneOf.2","typeLabel":"swap · object"},{"type":"object","title":"call","required":["type","method"],"properties":{"type":{"const":"call","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.3.type","typeLabel":"any"},"method":{"type":"string","isRequired":true,"uniqueKey":"actions.items.[INDEX].oneOf.3.method","typeLabel":"string"},"contract":{"type":"string","description":"A registered contract; absent for a chain-native system call.","uniqueKey":"actions.items.[INDEX].oneOf.3.contract","typeLabel":"string"},"args":{"type":"object","additionalProperties":true,"uniqueKey":"actions.items.[INDEX].oneOf.3.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].oneOf.3.value","typeLabel":"string"}},"uniqueKey":"actions.items.[INDEX].oneOf.3","typeLabel":"call · object"}],"uniqueKey":"actions.items.[INDEX]","typeLabel":"transfer · object | approve · object | swap · object | call · object"},"isRequired":true,"uniqueKey":"actions","typeLabel":"(transfer · object | approve · object | swap · object | call · object)[]"},"end_user_ref":{"type":"string","description":"The user the payout is for; policy limits count per user.","uniqueKey":"end_user_ref","typeLabel":"string"},"idempotency_key":{"type":"string","description":"Same as the `Idempotency-Key` header.","uniqueKey":"idempotency_key","typeLabel":"string"},"queue":{"type":"boolean","default":false,"description":"`true` records the payout for a workflow to send later in a batch, instead of\nsending it now. Exactly one `transfer` action.\n\nAt the door nothing is reserved, no network fee is estimated, and your approval\nrules are not asked. The funds stay spendable until a workflow's batch payout picks\nthe payout up by its `tags` and reserves them for the batch. The answer is `202` with\n`status: created` and `queued: true`.\n\nOnce a batch carries it, the transaction reads `final` when the batch landed and\n`failed` when it did not. It has no `tx_hash` of its own, and these changes come\nwithout `operation.*` webhooks: read them with `GET /transactions/{id}`. Until a batch\ncarries it, `POST /transactions/{id}/cancel` withdraws it, with `operation.failed`.\n","uniqueKey":"queue","typeLabel":"boolean"},"tags":{"type":"array","items":{"type":"string","uniqueKey":"tags.items.[INDEX]","typeLabel":"string"},"description":"Selects a queued payout in a workflow.","uniqueKey":"tags","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"wallet":"hot-1","network":"mainnet","end_user_ref":"user-4211","actions":[{"type":"transfer","asset":"USDC","to":"0x9a41c7e2b8d05f3a6e1c4b7d2f8a0e3c5b6d7e8f","amount":"25000000000"}]},"examples":{"Example":{"title":"Example","value":{"wallet":"hot-1","network":"mainnet","end_user_ref":"user-4211","actions":[{"type":"transfer","asset":"USDC","to":"0x9a41c7e2b8d05f3a6e1c4b7d2f8a0e3c5b6d7e8f","amount":"25000000000"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"b924fc0d-1e7b-4a7f-a322-1245af544961":{"description":"What a send would hold and whether it would wait for people.","content":{"application/json":{"schema":{"type":"object","required":["network","chain","wallet","network_fee","approval"],"description":"What sending the request now would do. `network_fee` and `approval` are always present; `null` is an answer.","properties":{"network":{"type":"string","enum":["mainnet","testnet"],"description":"The network the data lives on. Required wherever it appears in a request — there is no\ndefault network. One your installation does not serve: `422 network_not_served`.\n","isRequired":true,"uniqueKey":"network","typeLabel":"enum\u003cstring>"},"chain":{"type":"string","enum":["tron","evm","solana","ton"],"isRequired":true,"uniqueKey":"chain","typeLabel":"enum\u003cstring>"},"wallet":{"type":"object","description":"The wallet it would leave 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"}},"isRequired":true,"uniqueKey":"wallet","typeLabel":"object"},"network_fee":{"oneOf":[{"type":"object","description":"The most the network may charge the sending wallet, in the chain's native coin — what a\nsend holds next to the amounts. `null`: Citadel prices no fee for this wallet and a send\nholds none (every wallet but an EVM one paying its own gas).\n","required":["amount","asset","decimals"],"properties":{"amount":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string.","isRequired":true,"uniqueKey":"network_fee.oneOf.0.amount","typeLabel":"string"},"asset":{"type":"string","description":"The native coin's symbol.","isRequired":true,"uniqueKey":"network_fee.oneOf.0.asset","typeLabel":"string"},"decimals":{"type":"integer","isRequired":true,"uniqueKey":"network_fee.oneOf.0.decimals","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"network_fee.oneOf.0","typeLabel":"object"},{"type":"null","description":"The most the network may charge the sending wallet, in the chain's native coin — what a\nsend holds next to the amounts. `null`: Citadel prices no fee for this wallet and a send\nholds none (every wallet but an EVM one paying its own gas).\n","required":["amount","asset","decimals"],"properties":{"amount":{"type":"string","pattern":"^[0-9]+$","description":"An integer amount in the asset's smallest unit, as a string."},"asset":{"type":"string","description":"The native coin's symbol."},"decimals":{"type":"integer"}},"isRequired":true,"uniqueKey":"network_fee.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"network_fee","typeLabel":"object | null"},"approval":{"oneOf":[{"type":"object","description":"The quorum your approval rules would hold the send for — the strictest rule that\nmatches, every match listed in `reasons`. `null`: it would go out without waiting for\npeople.\n","required":["required","reasons","expires_in"],"properties":{"required":{"type":"integer","description":"Approvals needed.","isRequired":true,"uniqueKey":"approval.oneOf.0.required","typeLabel":"integer"},"reasons":{"type":"array","items":{"type":"string","uniqueKey":"approval.oneOf.0.reasons.items.[INDEX]","typeLabel":"string"},"description":"Why the rules would hold it.","isRequired":true,"uniqueKey":"approval.oneOf.0.reasons","typeLabel":"string[]"},"expires_in":{"type":"integer","description":"Seconds the quorum would have before the send fails `approval_expired`.","isRequired":true,"uniqueKey":"approval.oneOf.0.expires_in","typeLabel":"integer"},"group":{"type":"string","description":"The approver group that would be asked.","uniqueKey":"approval.oneOf.0.group","typeLabel":"string"},"rule_version":{"type":"integer","description":"The approval rules version that judged it.","uniqueKey":"approval.oneOf.0.rule_version","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"approval.oneOf.0","typeLabel":"object"},{"type":"null","description":"The quorum your approval rules would hold the send for — the strictest rule that\nmatches, every match listed in `reasons`. `null`: it would go out without waiting for\npeople.\n","required":["required","reasons","expires_in"],"properties":{"required":{"type":"integer","description":"Approvals needed."},"group":{"type":"string","description":"The approver group that would be asked."},"reasons":{"type":"array","items":{"type":"string"},"description":"Why the rules would hold it."},"expires_in":{"type":"integer","description":"Seconds the quorum would have before the send fails `approval_expired`."},"rule_version":{"type":"integer","description":"The approval rules version that judged it."}},"isRequired":true,"uniqueKey":"approval.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"approval","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"held":{"title":"held","value":{"network":"mainnet","chain":"evm","wallet":{"id":"0199a3b1-7a42-7f63-9e5c-4d6e8f0a2b34","reference":"hot-1","address":"0x5f2d8e1a3c4b6d7e9f0a1b2c3d4e5f6a7b8c9d0e"},"network_fee":{"amount":"1260000000000000","asset":"ETH","decimals":18},"approval":{"required":2,"group":"Treasury","reasons":["Amount step $10000 and above"],"expires_in":14400,"rule_version":3}}},"at_once":{"title":"at_once","value":{"network":"mainnet","chain":"tron","wallet":{"id":"0199a3b1-5e20-7d41-9c3a-2b4c6d8e0f12","reference":"hot-1","address":"TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"},"network_fee":null,"approval":null}}},"exampleType":"examples"}},"exampleType":"examples"},"4567b451-56ad-4d2a-9487-cb1d1fd87593":{"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"},"844fcc81-fc6b-4456-9048-cc40106821f2":{"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"},"b3133b42-bb71-49be-b1d5-a0f47586c7c1":{"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"},"156be531-1b08-40a8-b0f5-d3dc36ae93ac":{"description":"A chain node stayed down through retries. Nothing was created or reserved; send the\nsame request with the same idempotency key after `Retry-After` seconds.\n","headers":{"Retry-After":{"schema":{"type":"integer"}}},"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":"tron node unavailable","code":"rpc_unavailable","retryable":true},"examples":{"Example":{"title":"Example","value":{"error":"tron node unavailable","code":"rpc_unavailable","retryable":true}}},"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":"Estimate a transaction - Citadel API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/transactions/estimate-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=\"Takes the body of POST /transactions and answers what sending it now would do, without sending anything: the network fee Citadel would hold next to the amounts, and whether your approval rules would hold it for a passkey quorum — how many approvals, from which group, why, and for how long. Nothing is created, reserved or signed, and no webhook follows. It refuses what a send refuses, with the same status and code: an unknown wallet, a bad amount or address, a wallet outside the key\u0026#x27;s vaults (403 vault_limited), a wallet id from another network (422 network_mismatch). network is required. queue, tags and the idempotency key are not read: an estimate is for sending now. network_fee is the most the network may charge the sending wallet, in its native coin — what a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For every other wallet (TRON, TON, Solana, EVM smart accounts) it is null: a send holds nothing for the fee, and Citadel does not price it. What it does not promise. Your policy engine decides only when the transaction is signed, so an estimate never asks it. It does not check the balance: the send may still be refused for insufficient funds. And by the time you send, the balance, the fee and the windows of your velocity rules may have moved — the send is judged afresh. Needs the transactions.write scope. Your approval rules judge the calling key (its age, what it sent recently), so estimate with the key that will send.\">\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=\"Estimate a transaction - Citadel API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Takes the body of POST /transactions and answers what sending it now would do, without sending anything: the network fee Citadel would hold next to the amounts, and whether your approval rules would hold it for a passkey quorum — how many approvals, from which group, why, and for how long. Nothing is created, reserved or signed, and no webhook follows. It refuses what a send refuses, with the same status and code: an unknown wallet, a bad amount or address, a wallet outside the key\u0026#x27;s vaults (403 vault_limited), a wallet id from another network (422 network_mismatch). network is required. queue, tags and the idempotency key are not read: an estimate is for sending now. network_fee is the most the network may charge the sending wallet, in its native coin — what a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For every other wallet (TRON, TON, Solana, EVM smart accounts) it is null: a send holds nothing for the fee, and Citadel does not price it. What it does not promise. Your policy engine decides only when the transaction is signed, so an estimate never asks it. It does not check the balance: the send may still be refused for insufficient funds. And by the time you send, the balance, the fee and the windows of your velocity rules may have moved — the send is judged afresh. Needs the transactions.write scope. Your approval rules judge the calling key (its age, what it sent recently), so estimate with the key that will send.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Citadel API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://local./api-reference/transactions/estimate-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=\"Estimate a transaction - Citadel API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Takes the body of POST /transactions and answers what sending it now would do, without sending anything: the network fee Citadel would hold next to the amounts, and whether your approval rules would hold it for a passkey quorum — how many approvals, from which group, why, and for how long. Nothing is created, reserved or signed, and no webhook follows. It refuses what a send refuses, with the same status and code: an unknown wallet, a bad amount or address, a wallet outside the key\u0026#x27;s vaults (403 vault_limited), a wallet id from another network (422 network_mismatch). network is required. queue, tags and the idempotency key are not read: an estimate is for sending now. network_fee is the most the network may charge the sending wallet, in its native coin — what a send holds for it. Citadel prices it for EVM wallets that pay their own gas. For every other wallet (TRON, TON, Solana, EVM smart accounts) it is null: a send holds nothing for the fee, and Citadel does not price it. What it does not promise. Your policy engine decides only when the transaction is signed, so an estimate never asks it. It does not check the balance: the send may still be refused for insufficient funds. And by the time you send, the balance, the fee and the windows of your velocity rules may have moved — the send is judged afresh. Needs the transactions.write scope. Your approval rules judge the calling key (its age, what it sent recently), so estimate with the key that will send.\">\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/estimate-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/estimate-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","description":"Submits one on-chain transaction from a wallet as generic `actions[]`: a native\ntransfer, a token transfer, an approve, a swap, a call to a registered contract.\nThe answer is `202` with the transaction — the body `GET /transactions/{id}` reads; the\noutcome is asynchronous — poll `GET /transactions/{id}` or take the `operation.*` webhooks.\n\n`network` is required: there is no default network. A `wallet` named by reference or\naddress is looked up on it; a wallet named by its id must live on it, else\n`422 network_mismatch`. The network is checked before anything is reserved.\n\nFunds are reserved at the door: the amounts and the network fee stop being spendable\nbefore the answer. Your approval rules may hold the transaction for a passkey quorum:\nstill `202`, with `status: awaiting_approval` and an `approval` block.\n\n`queue: true` is different: nothing is reserved and nothing is sent. The payout waits\nfor a workflow to send it in a batch (see `queue`).\n\nNeeds the `transactions.write` scope. From a wallet outside the key's vaults:\n`403 vault_limited`.\n\n`POST /intents` is the same endpoint under its older name.\n","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","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":"Estimate 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"]}