Quotes again with fresh fees, runs every preflight check and, when they all pass,
stores the transfer as BUILT and returns what to sign. If any check fails,
nothing is stored and the response is 400 with the id CCTP_PREFLIGHT_FAILED.
EVM source, EOA clients: sign transactions in order, waiting for each
to be mined successfully before signing the next; stop if one fails. An
approve comes first when the allowance is too low, then the burn, then one
fee transfer for your custodian fee.
EVM source, Account Abstraction clients: sign userOperation, which already
contains every call in transactions.
Solana source: transactions holds one Solana transaction with
serializedTransaction, already partially signed by Circle’s event account and
with any fee transfers inside. Sign and broadcast it with
sol_signAndSendTransaction. Its blockhash expires after roughly a minute.
Sign and broadcast on the source chain, then call submit with the burn
transaction hash (EOA), the user operation hash (Account Abstraction on an EVM
source) or the Solana signature (Solana source).
With an Idempotency-Key, the same key and body return the same transfer: with
freshly built transactions while it’s BUILT or ABANDONED, or its current
state (without transactions) once it’s submitted. If Portal can’t confirm that
an earlier burn for the transfer never landed, it returns 409 with the id
CCTP_REBUILD_UNAVAILABLE instead of new transactions. The same key with a
different body returns 409 with the id IDEMPOTENCY_KEY_REUSED.
USDC the recipient must receive (exact-out). Portal works out the amount to burn so the recipient gets at least this after fees (exactly this when Circle charges the full maxFee, as it does in practice).
Address to receive the USDC, validated against the destination chain. An EVM address for an EVM destination, or a Solana wallet address (not a token account) for a Solana destination, where Circle mints into the wallet's USDC token account. Defaults to the client's own address on the destination chain. Any other address must be on the environment's destination allowlist.
When ROUTE_SUPPORTED fails, only sourceChain, destinationChain, ready and checks are returned.
Built transfer
Already submitted (idempotent replay)
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Portal","description":"Portal is a key management platform for stablecoin companies. Create wallets, send and receive funds on-chain - all in a day.","colors":{"primary":"#5a86fa","light":"#789CFA","dark":"#3E71F8"},"logo":{"light":"https://mintcdn.com/portal-003221ec/GSEv3FWt9xT6P4p5/logo/light.svg?fit=max\u0026auto=format\u0026n=GSEv3FWt9xT6P4p5\u0026q=85\u0026s=589c25ed9717a63807caa49ef88b9541","dark":"https://mintcdn.com/portal-003221ec/GSEv3FWt9xT6P4p5/logo/dark.svg?fit=max\u0026auto=format\u0026n=GSEv3FWt9xT6P4p5\u0026q=85\u0026s=60a15ea88f068be82954514cc71f558c","href":"https://docs.portalhq.io"},"favicon":"https://mintcdn.com/portal-003221ec/8nhTiKJyGlrD5CbB/favicon.png?fit=max\u0026auto=format\u0026n=8nhTiKJyGlrD5CbB\u0026q=85\u0026s=2bbda68250f65a434b3f9eb0fe709ac1","navbar":{"links":[{"href":"mailto:support@portalhq.io","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.portalhq.io"}},"footer":{"socials":{"x":"https://twitter.com/portal_hq","github":"https://github.com/portal-hq","linkedin":"https://www.linkedin.com/company/portal-labs-inc"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/portal-hq"},{"anchor":"Blog","icon":"newspaper","href":"https://www.portalhq.io/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"portal-003221ec","hasAudioNarration":false,"actualSubdomain":"portal-003221ec","customDomains":["docs.portalhq.io"],"gitSource":{"type":"github","owner":"portal-hq","repo":"documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeb9ffe7d3e0e4d340c6d5c","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Documentation","count":394},{"language":"default","tag":"SDKs","count":294},{"language":"default","tag":"API Reference","count":271},{"language":"default","tag":"Client API","count":209},{"language":"default","tag":"Guide","count":164},{"language":"default","tag":"Reference","count":139},{"language":"default","tag":"Flutter","count":99},{"language":"default","tag":"iOS","count":91},{"language":"default","tag":"Due","count":56},{"language":"default","tag":"Resources","count":47}]},"assistantConfig":{"enableStarterQuestions":false},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/cctp/create-a-cctp-transfer","slug":"/api-reference/cctp/create-a-cctp-transfer","pageMetadata":{"title":"Create a CCTP transfer","description":"Quotes again with fresh fees, runs every preflight check and, when they all pass,\nstores the transfer as `BUILT` and returns what to sign. If any check fails,\nnothing is stored and the response is `400` with the id `CCTP_PREFLIGHT_FAILED`.\n\n- **EVM source, EOA clients**: sign `transactions` in order, waiting for each\n to be mined successfully before signing the next; stop if one fails. An\n `approve` comes first when the allowance is too low, then the `burn`, then one\n `fee` transfer for your custodian fee.\n- **EVM source, Account Abstraction clients**: sign `userOperation`, which already\n contains every call in `transactions`.\n- **Solana source**: `transactions` holds one Solana transaction with\n `serializedTransaction`, already partially signed by Circle's event account and\n with any fee transfers inside. Sign and broadcast it with\n `sol_signAndSendTransaction`. Its blockhash expires after roughly a minute.\n\nSign and broadcast on the source chain, then call `submit` with the burn\ntransaction hash (EOA), the user operation hash (Account Abstraction on an EVM\nsource) or the Solana signature (Solana source).\n\nWith an `Idempotency-Key`, the same key and body return the same transfer: with\nfreshly built `transactions` while it's `BUILT` or `ABANDONED`, or its current\nstate (without `transactions`) once it's submitted. If Portal can't confirm that\nan earlier burn for the transfer never landed, it returns `409` with the id\n`CCTP_REBUILD_UNAVAILABLE` instead of new `transactions`. The same key with a\ndifferent body returns `409` with the id `IDEMPOTENCY_KEY_REUSED`.\n","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/cctp/transfers","href":"/api-reference/cctp/create-a-cctp-transfer","autogeneratedByOpenApi":true},"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 strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Quotes again with fresh fees, runs every preflight check and, when they all pass,\\nstores the transfer as \", _jsx(_components.code, {\n children: \"BUILT\"\n }), \" and returns what to sign. If any check fails,\\nnothing is stored and the response is \", _jsx(_components.code, {\n children: \"400\"\n }), \" with the id \", _jsx(_components.code, {\n children: \"CCTP_PREFLIGHT_FAILED\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"EVM source, EOA clients\"\n }), \": sign \", _jsx(_components.code, {\n children: \"transactions\"\n }), \" in order, waiting for each\\nto be mined successfully before signing the next; stop if one fails. An\\n\", _jsx(_components.code, {\n children: \"approve\"\n }), \" comes first when the allowance is too low, then the \", _jsx(_components.code, {\n children: \"burn\"\n }), \", then one\\n\", _jsx(_components.code, {\n children: \"fee\"\n }), \" transfer for your custodian fee.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"EVM source, Account Abstraction clients\"\n }), \": sign \", _jsx(_components.code, {\n children: \"userOperation\"\n }), \", which already\\ncontains every call in \", _jsx(_components.code, {\n children: \"transactions\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.strong, {\n children: \"Solana source\"\n }), \": \", _jsx(_components.code, {\n children: \"transactions\"\n }), \" holds one Solana transaction with\\n\", _jsx(_components.code, {\n children: \"serializedTransaction\"\n }), \", already partially signed by Circle’s event account and\\nwith any fee transfers inside. Sign and broadcast it with\\n\", _jsx(_components.code, {\n children: \"sol_signAndSendTransaction\"\n }), \". Its blockhash expires after roughly a minute.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Sign and broadcast on the source chain, then call \", _jsx(_components.code, {\n children: \"submit\"\n }), \" with the burn\\ntransaction hash (EOA), the user operation hash (Account Abstraction on an EVM\\nsource) or the Solana signature (Solana source).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"With an \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \", the same key and body return the same transfer: with\\nfreshly built \", _jsx(_components.code, {\n children: \"transactions\"\n }), \" while it’s \", _jsx(_components.code, {\n children: \"BUILT\"\n }), \" or \", _jsx(_components.code, {\n children: \"ABANDONED\"\n }), \", or its current\\nstate (without \", _jsx(_components.code, {\n children: \"transactions\"\n }), \") once it’s submitted. If Portal can’t confirm that\\nan earlier burn for the transfer never landed, it returns \", _jsx(_components.code, {\n children: \"409\"\n }), \" with the id\\n\", _jsx(_components.code, {\n children: \"CCTP_REBUILD_UNAVAILABLE\"\n }), \" instead of new \", _jsx(_components.code, {\n children: \"transactions\"\n }), \". The same key with a\\ndifferent body returns \", _jsx(_components.code, {\n children: \"409\"\n }), \" with the id \", _jsx(_components.code, {\n children: \"IDEMPOTENCY_KEY_REUSED\"\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":{"title":"Create a CCTP transfer","description":"Quotes again with fresh fees, runs every preflight check and, when they all pass,\nstores the transfer as `BUILT` and returns what to sign. If any check fails,\nnothing is stored and the response is `400` with the id `CCTP_PREFLIGHT_FAILED`.\n\n- **EVM source, EOA clients**: sign `transactions` in order, waiting for each\n to be mined successfully before signing the next; stop if one fails. An\n `approve` comes first when the allowance is too low, then the `burn`, then one\n `fee` transfer for your custodian fee.\n- **EVM source, Account Abstraction clients**: sign `userOperation`, which already\n contains every call in `transactions`.\n- **Solana source**: `transactions` holds one Solana transaction with\n `serializedTransaction`, already partially signed by Circle's event account and\n with any fee transfers inside. Sign and broadcast it with\n `sol_signAndSendTransaction`. Its blockhash expires after roughly a minute.\n\nSign and broadcast on the source chain, then call `submit` with the burn\ntransaction hash (EOA), the user operation hash (Account Abstraction on an EVM\nsource) or the Solana signature (Solana source).\n\nWith an `Idempotency-Key`, the same key and body return the same transfer: with\nfreshly built `transactions` while it's `BUILT` or `ABANDONED`, or its current\nstate (without `transactions`) once it's submitted. If Portal can't confirm that\nan earlier burn for the transfer never landed, it returns `409` with the id\n`CCTP_REBUILD_UNAVAILABLE` instead of new `transactions`. The same key with a\ndifferent body returns `409` with the id `IDEMPOTENCY_KEY_REUSED`.\n","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/cctp/transfers","href":"/api-reference/cctp/create-a-cctp-transfer","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createCctpTransfer","summary":"Create a CCTP transfer","description":"Quotes again with fresh fees, runs every preflight check and, when they all pass,\nstores the transfer as `BUILT` and returns what to sign. If any check fails,\nnothing is stored and the response is `400` with the id `CCTP_PREFLIGHT_FAILED`.\n\n- **EVM source, EOA clients**: sign `transactions` in order, waiting for each\n to be mined successfully before signing the next; stop if one fails. An\n `approve` comes first when the allowance is too low, then the `burn`, then one\n `fee` transfer for your custodian fee.\n- **EVM source, Account Abstraction clients**: sign `userOperation`, which already\n contains every call in `transactions`.\n- **Solana source**: `transactions` holds one Solana transaction with\n `serializedTransaction`, already partially signed by Circle's event account and\n with any fee transfers inside. Sign and broadcast it with\n `sol_signAndSendTransaction`. Its blockhash expires after roughly a minute.\n\nSign and broadcast on the source chain, then call `submit` with the burn\ntransaction hash (EOA), the user operation hash (Account Abstraction on an EVM\nsource) or the Solana signature (Solana source).\n\nWith an `Idempotency-Key`, the same key and body return the same transfer: with\nfreshly built `transactions` while it's `BUILT` or `ABANDONED`, or its current\nstate (without `transactions`) once it's submitted. If Portal can't confirm that\nan earlier burn for the transfer never landed, it returns `409` with the id\n`CCTP_REBUILD_UNAVAILABLE` instead of new `transactions`. The same key with a\ndifferent body returns `409` with the id `IDEMPOTENCY_KEY_REUSED`.\n","tags":["CCTP"],"parameters":["7d30d9de-41d1-4889-932b-bbe2d63c1e48"],"requestBody":"cbb012c3-2c75-422a-be5d-418bcc9cdc8e","responses":{"200":"da2f85e1-960a-4f06-9bd3-1ae908cc275e","400":"819e9cbb-5c9d-44c5-8591-32cb51c88d2c","401":"ffc6ac7e-0bd5-4b94-a2fd-584c62e3a6f7","403":"1a648707-bacb-410e-bf96-ebe44caada7b","409":"4b5b6708-3179-4bce-bf0b-6ddc14e6232e","503":"d27cbe6a-e33f-4a8e-9a52-c89a1e8bdd98"},"method":"post","type":"path","servers":["16ba486e-8d7f-4284-af4f-28b7a1896d7d"],"security":["03cc5e6f-0644-4250-905d-bbf631cbf6eb"],"path":"/clients/me/integrations/cctp/transfers","baseUrlOptions":["https://api.portalhq.io/api/v3"],"title":"Create a CCTP transfer","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"7d30d9de-41d1-4889-932b-bbe2d63c1e48":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255,"isRequired":false,"description":"Optional key to deduplicate retries. Scoped to the client. Up to 255 characters from `A-Z`, `a-z`, `0-9`, `-`, `.`, `_` and `~`.","uniqueKey":"","typeLabel":"string"},"description":"Optional key to deduplicate retries. Scoped to the client. Up to 255 characters from `A-Z`, `a-z`, `0-9`, `-`, `.`, `_` and `~`."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Send exactly one of `amount` or `amountOut`. Unknown fields are rejected.","required":["sourceChain","destinationChain","amount"],"properties":{"sourceChain":{"type":"string","pattern":"^(eip155:\\d+|solana:[1-9A-HJ-NP-Za-km-z]{32})$","description":"CAIP-2 id of the chain to send from, an EVM chain or Solana.","example":"eip155:11155111","isRequired":true,"uniqueKey":"oneOf.0.sourceChain","typeLabel":"string"},"destinationChain":{"type":"string","pattern":"^(eip155:\\d+|solana:[1-9A-HJ-NP-Za-km-z]{32})$","description":"CAIP-2 id of the chain to send to, an EVM chain or Solana.","example":"eip155:84532","isRequired":true,"uniqueKey":"oneOf.0.destinationChain","typeLabel":"string"},"amount":{"type":"string","pattern":"^\\d+(\\.\\d{1,6})?$","description":"USDC to burn on the source chain, as a decimal string with up to 6 decimals (not base units).","example":"0.1","isRequired":true,"uniqueKey":"oneOf.0.amount","typeLabel":"string"},"amountOut":{"type":"string","pattern":"^\\d+(\\.\\d{1,6})?$","description":"USDC the recipient must receive (exact-out). Portal works out the `amount` to burn so the recipient gets at least this after fees (exactly this when Circle charges the full `maxFee`, as it does in practice).","example":"0.045735","uniqueKey":"oneOf.0.amountOut","typeLabel":"string"},"speed":{"type":"string","enum":["auto","fast","standard"],"default":"auto","description":"`auto` and `fast` use Fast when the source chain offers it, otherwise Standard. `standard` always uses Standard.","uniqueKey":"oneOf.0.speed","typeLabel":"enum\u003cstring>"},"recipient":{"type":"string","minLength":1,"maxLength":64,"description":"Address to receive the USDC, validated against the destination chain. An EVM address for an EVM destination, or a Solana wallet address (not a token account) for a Solana destination, where Circle mints into the wallet's USDC token account. Defaults to the client's own address on the destination chain. Any other address must be on the environment's destination allowlist.","uniqueKey":"oneOf.0.recipient","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Send exactly one of `amount` or `amountOut`. Unknown fields are rejected.","required":["sourceChain","destinationChain","amountOut"],"properties":{"sourceChain":{"type":"string","pattern":"^(eip155:\\d+|solana:[1-9A-HJ-NP-Za-km-z]{32})$","description":"CAIP-2 id of the chain to send from, an EVM chain or Solana.","example":"eip155:11155111","isRequired":true,"uniqueKey":"oneOf.1.sourceChain","typeLabel":"string"},"destinationChain":{"type":"string","pattern":"^(eip155:\\d+|solana:[1-9A-HJ-NP-Za-km-z]{32})$","description":"CAIP-2 id of the chain to send to, an EVM chain or Solana.","example":"eip155:84532","isRequired":true,"uniqueKey":"oneOf.1.destinationChain","typeLabel":"string"},"amountOut":{"type":"string","pattern":"^\\d+(\\.\\d{1,6})?$","description":"USDC the recipient must receive (exact-out). Portal works out the `amount` to burn so the recipient gets at least this after fees (exactly this when Circle charges the full `maxFee`, as it does in practice).","example":"0.045735","isRequired":true,"uniqueKey":"oneOf.1.amountOut","typeLabel":"string"},"amount":{"type":"string","pattern":"^\\d+(\\.\\d{1,6})?$","description":"USDC to burn on the source chain, as a decimal string with up to 6 decimals (not base units).","example":"0.1","uniqueKey":"oneOf.1.amount","typeLabel":"string"},"speed":{"type":"string","enum":["auto","fast","standard"],"default":"auto","description":"`auto` and `fast` use Fast when the source chain offers it, otherwise Standard. `standard` always uses Standard.","uniqueKey":"oneOf.1.speed","typeLabel":"enum\u003cstring>"},"recipient":{"type":"string","minLength":1,"maxLength":64,"description":"Address to receive the USDC, validated against the destination chain. An EVM address for an EVM destination, or a Solana wallet address (not a token account) for a Solana destination, where Circle mints into the wallet's USDC token account. Defaults to the client's own address on the destination chain. Any other address must be on the environment's destination allowlist.","uniqueKey":"oneOf.1.recipient","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"evm":{"title":"evm","value":{"sourceChain":"eip155:84532","destinationChain":"eip155:43113","amount":"0.09","speed":"auto"}},"solana":{"title":"solana","value":{"sourceChain":"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1","destinationChain":"eip155:84532","amount":"0.09","speed":"auto"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"da2f85e1-960a-4f06-9bd3-1ae908cc275e":{"description":"Transfer built","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","title":"Built transfer","description":"When `ROUTE_SUPPORTED` fails, only `sourceChain`, `destinationChain`, `ready` and `checks` are returned.","required":["sourceChain","destinationChain","ready","checks","transferId"],"properties":{"transferId":{"type":"string","description":"Use it to submit and track the transfer.","isRequired":true,"uniqueKey":"data.oneOf.0.transferId","typeLabel":"string"},"sourceChain":{"type":"string","isRequired":true,"uniqueKey":"data.oneOf.0.sourceChain","typeLabel":"string"},"destinationChain":{"type":"string","isRequired":true,"uniqueKey":"data.oneOf.0.destinationChain","typeLabel":"string"},"ready":{"type":"boolean","description":"`true` when no check has `ok: false`.","isRequired":true,"uniqueKey":"data.oneOf.0.ready","typeLabel":"boolean"},"checks":{"type":"array","items":{"type":"object","required":["id","ok"],"properties":{"id":{"type":"string","enum":["ROUTE_SUPPORTED","AMOUNT_ABOVE_MINIMUM","BALANCE","RECIPIENT_ALLOWED","SOURCE_GAS","SPONSORSHIP"],"description":"`SPONSORSHIP` is only returned for Account Abstraction clients and for Solana sources.","isRequired":true,"uniqueKey":"data.oneOf.0.checks.items.[INDEX].id","typeLabel":"enum\u003cstring>"},"ok":{"oneOf":[{"type":"boolean","description":"`true` passed, `false` failed and blocks the transfer, `null` can't be known at this stage or a check it depends on failed.","isRequired":true,"uniqueKey":"data.oneOf.0.checks.items.[INDEX].ok.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"`true` passed, `false` failed and blocks the transfer, `null` can't be known at this stage or a check it depends on failed.","isRequired":true,"uniqueKey":"data.oneOf.0.checks.items.[INDEX].ok.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.oneOf.0.checks.items.[INDEX].ok","typeLabel":"boolean | null"},"message":{"type":"string","uniqueKey":"data.oneOf.0.checks.items.[INDEX].message","typeLabel":"string"},"fix":{"type":"string","description":"What to do about a failed check.","uniqueKey":"data.oneOf.0.checks.items.[INDEX].fix","typeLabel":"string"}},"uniqueKey":"data.oneOf.0.checks.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.oneOf.0.checks","typeLabel":"object[]"},"amount":{"type":"string","description":"USDC to burn on the source chain.","uniqueKey":"data.oneOf.0.amount","typeLabel":"string"},"amountRaw":{"type":"string","description":"`amount` in base units (6 decimals).","uniqueKey":"data.oneOf.0.amountRaw","typeLabel":"string"},"speed":{"type":"string","enum":["fast","standard"],"description":"The speed Portal picked.","uniqueKey":"data.oneOf.0.speed","typeLabel":"enum\u003cstring>"},"minFinalityThreshold":{"type":"integer","description":"CCTP finality threshold for the speed (`1000` Fast, `2000` Standard).","uniqueKey":"data.oneOf.0.minFinalityThreshold","typeLabel":"integer"},"fees":{"type":"object","description":"Circle's fees (`protocol`, `forwarding`, `maxFee`) come out of `amount`. The `custodian` fee is paid on top of `amount`, in USDC on the source chain.","properties":{"protocol":{"type":"string","description":"Circle's protocol fee in USDC, in basis points of the amount, rounded up to 0.000001.","example":"0.00001","uniqueKey":"data.oneOf.0.fees.protocol","typeLabel":"string"},"forwarding":{"type":"string","description":"Circle's fee in USDC for minting on the destination chain and paying the gas there. Higher into a Solana wallet that has no USDC token account yet.","example":"0.054255","uniqueKey":"data.oneOf.0.fees.forwarding","typeLabel":"string"},"maxFee":{"type":"string","description":"`protocol` plus `forwarding`.","example":"0.054265","uniqueKey":"data.oneOf.0.fees.maxFee","typeLabel":"string"},"custodian":{"type":"string","description":"Your fee in USDC, set on the CCTP card in the Portal Dashboard (a percentage of `amount`, a flat amount, or both). `0` when no fee is set.","example":"0.0005","uniqueKey":"data.oneOf.0.fees.custodian","typeLabel":"string"}},"uniqueKey":"data.oneOf.0.fees","typeLabel":"object"},"totalDebit":{"type":"string","description":"The USDC that leaves the wallet, `amount + fees.custodian`. The `BALANCE` check compares the wallet's balance against it.","example":"0.1005","uniqueKey":"data.oneOf.0.totalDebit","typeLabel":"string"},"amountOut":{"type":"string","description":"What the recipient receives, `amount - fees.maxFee`. Circle can charge less than `maxFee`, so the recipient never gets less; in practice it charges the full `maxFee`.","uniqueKey":"data.oneOf.0.amountOut","typeLabel":"string"},"minAmount":{"type":"string","description":"The smallest `amount` that delivers anything on this route.","uniqueKey":"data.oneOf.0.minAmount","typeLabel":"string"},"sourceGas":{"type":"object","properties":{"payer":{"type":"string","enum":["user","sponsor"],"description":"`sponsor` when the user operation is gas sponsored (Account Abstraction clients on an EVM source, on create), or when the environment's Solana gas sponsor pays the transaction fee and rent (Solana source).","uniqueKey":"data.oneOf.0.sourceGas.payer","typeLabel":"enum\u003cstring>"},"estimatedWei":{"type":"string","description":"EVM source. Estimated source chain gas in wei for all the transactions or the user operation.","uniqueKey":"data.oneOf.0.sourceGas.estimatedWei","typeLabel":"string"},"estimatedLamports":{"type":"string","description":"Solana source. Estimated SOL cost in lamports of the transaction fees and the rent for Circle's event account (and for any fee address token account that doesn't exist yet).","uniqueKey":"data.oneOf.0.sourceGas.estimatedLamports","typeLabel":"string"}},"uniqueKey":"data.oneOf.0.sourceGas","typeLabel":"object"},"estimatedSeconds":{"type":"integer","description":"Estimated transfer time at the picked speed.","uniqueKey":"data.oneOf.0.estimatedSeconds","typeLabel":"integer"},"sender":{"type":"string","description":"The address that signs and sends the burn (the smart account for Account Abstraction clients on an EVM source, the Solana wallet for a Solana source). Use it as `from` when signing on EVM.","uniqueKey":"data.oneOf.0.sender","typeLabel":"string"},"recipient":{"type":"string","description":"The address that receives the USDC on the destination chain. On Solana, the wallet that owns the USDC token account Circle mints into.","uniqueKey":"data.oneOf.0.recipient","typeLabel":"string"},"warnings":{"type":"array","items":{"type":"string","enum":["LONG_FINALITY","EXTERNAL_RECIPIENT","RECIPIENT_ACCOUNT_SETUP"],"uniqueKey":"data.oneOf.0.warnings.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Warnings never block the transfer. `RECIPIENT_ACCOUNT_SETUP` means the Solana recipient has no USDC token account yet, so Circle creates it during the mint and charges a higher forwarding fee.","uniqueKey":"data.oneOf.0.warnings","typeLabel":"enum\u003cstring>[]"},"transactions":{"type":"array","description":"On an EVM source, EOA clients sign these in order. An `approve` comes first when the allowance is too low, then the `burn`, then any `fee` transfers. For Account Abstraction clients, these are the calls inside `userOperation`. On a Solana source, this holds one Solana transaction for every client.","items":{"oneOf":[{"type":"object","title":"EVM transaction","description":"What to sign on the source chain. An EVM transaction for an EVM source, or one Solana transaction for a Solana source.","required":["to","data","value","kind"],"properties":{"to":{"type":"string","description":"The USDC contract for `approve` and `fee`, Circle's TokenMessenger for `burn`.","isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.0.to","typeLabel":"string"},"data":{"type":"string","isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.0.data","typeLabel":"string"},"value":{"type":"string","enum":["0"],"isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.0.value","typeLabel":"enum\u003cstring>"},"kind":{"type":"string","enum":["approve","burn","fee"],"description":"`approve` (only when the allowance is too low), then `burn`, then a USDC `fee` transfer for your fee.","isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.0.kind","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.0","typeLabel":"EVM transaction · object"},{"type":"object","title":"Solana transaction","description":"What to sign on the source chain. An EVM transaction for an EVM source, or one Solana transaction for a Solana source.","required":["kind","namespace","serializedTransaction","lastValidBlockHeight"],"properties":{"kind":{"type":"string","enum":["burn"],"isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.1.kind","typeLabel":"enum\u003cstring>"},"namespace":{"type":"string","enum":["solana"],"isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.1.namespace","typeLabel":"enum\u003cstring>"},"serializedTransaction":{"type":"string","description":"Base64 Solana transaction, already partially signed by the one-time event account Circle's program requires. Sign it as returned; changing it (for example its fee payer) invalidates that signature. When a gas sponsor pays, it's already the fee payer.","isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.1.serializedTransaction","typeLabel":"string"},"lastValidBlockHeight":{"type":"integer","description":"The block height after which the transaction's blockhash expires, roughly a minute after it was built. To get a fresh transaction, call `POST /transfers` again with the same `Idempotency-Key` and body.","isRequired":true,"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.1.lastValidBlockHeight","typeLabel":"integer"}},"uniqueKey":"data.oneOf.0.transactions.items.[INDEX].oneOf.1","typeLabel":"Solana transaction · object"}],"uniqueKey":"data.oneOf.0.transactions.items.[INDEX]","typeLabel":"EVM transaction · object | Solana transaction · object"},"uniqueKey":"data.oneOf.0.transactions","typeLabel":"(EVM transaction · object | Solana transaction · object)[]"},"userOperation":{"type":"object","description":"The user operation to sign and broadcast (Account Abstraction clients).","properties":{"userOperation":{"type":"string","description":"The user operation as a JSON string. Pass it unchanged to `broadcast-user-operation`.","uniqueKey":"data.oneOf.0.userOperation.userOperation","typeLabel":"string"},"userOpHash":{"type":"string","description":"The hash to sign with `POST /v1/raw/sign/SECP256K1` (without `0x`).","uniqueKey":"data.oneOf.0.userOperation.userOpHash","typeLabel":"string"},"sponsored":{"type":"boolean","description":"When `false`, the smart account pays for gas.","uniqueKey":"data.oneOf.0.userOperation.sponsored","typeLabel":"boolean"},"estimatedGasCostWei":{"type":"string","uniqueKey":"data.oneOf.0.userOperation.estimatedGasCostWei","typeLabel":"string"}},"uniqueKey":"data.oneOf.0.userOperation","typeLabel":"object"}},"uniqueKey":"data.oneOf.0","typeLabel":"Built transfer · object"},{"type":"object","title":"Already submitted (idempotent replay)","description":"Returned for a repeated `Idempotency-Key` once the transfer has been submitted.","required":["transferId"],"properties":{"transferId":{"type":"string","isRequired":true,"uniqueKey":"data.oneOf.1.transferId","typeLabel":"string"},"id":{"type":"string","uniqueKey":"data.oneOf.1.id","typeLabel":"string"},"status":{"type":"string","enum":["BUILT","SUBMITTED","PENDING_SOURCE","ATTESTING","DELAYED","FORWARDING","COMPLETED","FAILED","ABANDONED","STALLED"],"description":"`COMPLETED`, `FAILED` and `STALLED` are final. `ABANDONED` means built but not submitted within 1 hour; a late submit is still accepted.","uniqueKey":"data.oneOf.1.status","typeLabel":"enum\u003cstring>"},"failureReason":{"type":"string","enum":["SOURCE_REVERTED","TX_MISMATCH","USER_OP_NOT_FOUND","SOURCE_TX_NOT_FOUND"],"description":"Set when `status` is `FAILED`. `SOURCE_TX_NOT_FOUND` means the submitted Solana signature didn't appear on chain within 30 minutes.","uniqueKey":"data.oneOf.1.failureReason","typeLabel":"enum\u003cstring>"},"delayReason":{"type":"string","description":"Circle's reason while the transfer is `DELAYED`, for example `insufficient_fee`, `amount_above_max` or `insufficient_allowance_available`.","uniqueKey":"data.oneOf.1.delayReason","typeLabel":"string"},"sourceChain":{"type":"string","uniqueKey":"data.oneOf.1.sourceChain","typeLabel":"string"},"destinationChain":{"type":"string","uniqueKey":"data.oneOf.1.destinationChain","typeLabel":"string"},"amount":{"type":"string","uniqueKey":"data.oneOf.1.amount","typeLabel":"string"},"amountOut":{"type":"string","description":"What the recipient receives, `amount - fees.feeExecuted` once known, otherwise `amount - fees.maxFee`. Never less than the quoted `amountOut`, since `feeExecuted` is at most `maxFee`.","uniqueKey":"data.oneOf.1.amountOut","typeLabel":"string"},"sender":{"type":"string","description":"The address that burns the USDC (the smart account for Account Abstraction clients on an EVM source, the Solana wallet for a Solana source).","uniqueKey":"data.oneOf.1.sender","typeLabel":"string"},"recipient":{"type":"string","uniqueKey":"data.oneOf.1.recipient","typeLabel":"string"},"speed":{"type":"string","enum":["fast","standard"],"uniqueKey":"data.oneOf.1.speed","typeLabel":"enum\u003cstring>"},"fees":{"type":"object","properties":{"maxFee":{"type":"string","description":"Circle's protocol and forwarding fees, which come out of `amount`.","uniqueKey":"data.oneOf.1.fees.maxFee","typeLabel":"string"},"custodian":{"type":"string","description":"Your fee in USDC, paid on top of `amount`.","uniqueKey":"data.oneOf.1.fees.custodian","typeLabel":"string"},"feeExecuted":{"type":"string","description":"The fee Circle actually charged, once known.","uniqueKey":"data.oneOf.1.fees.feeExecuted","typeLabel":"string"}},"uniqueKey":"data.oneOf.1.fees","typeLabel":"object"},"totalDebit":{"type":"string","description":"The USDC that leaves the wallet, `amount + fees.custodian`.","uniqueKey":"data.oneOf.1.totalDebit","typeLabel":"string"},"sourceTxHash":{"type":"string","description":"The burn transaction hash, or its base58 signature on Solana. For Account Abstraction clients on an EVM source, present once the user operation is included on chain.","uniqueKey":"data.oneOf.1.sourceTxHash","typeLabel":"string"},"userOpHash":{"type":"string","uniqueKey":"data.oneOf.1.userOpHash","typeLabel":"string"},"destinationTxHash":{"type":"string","description":"The mint transaction on the destination chain, a base58 signature on Solana. Set when `COMPLETED`.","uniqueKey":"data.oneOf.1.destinationTxHash","typeLabel":"string"},"sourceExplorerUrl":{"type":"string","description":"Links to Solscan for a Solana source.","uniqueKey":"data.oneOf.1.sourceExplorerUrl","typeLabel":"string"},"destinationExplorerUrl":{"type":"string","description":"Links to Solscan for a Solana destination.","uniqueKey":"data.oneOf.1.destinationExplorerUrl","typeLabel":"string"},"estimatedCompletionAt":{"type":"string","format":"date-time","description":"Only present until the status is final.","uniqueKey":"data.oneOf.1.estimatedCompletionAt","typeLabel":"string\u003cdate-time>"},"pollAfterMs":{"type":"integer","minimum":2000,"description":"How long to wait before reading again. Only present until the status is final.","uniqueKey":"data.oneOf.1.pollAfterMs","typeLabel":"integer"},"createdAt":{"type":"string","format":"date-time","uniqueKey":"data.oneOf.1.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","uniqueKey":"data.oneOf.1.updatedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"data.oneOf.1","typeLabel":"Already submitted (idempotent replay) · object"}],"uniqueKey":"data","typeLabel":"Built transfer · object | Already submitted (idempotent replay) · object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"evm":{"title":"evm","value":{"data":{"transferId":"cmuzgyc2105hw41rg2h19pomm","sourceChain":"eip155:84532","destinationChain":"eip155:43113","amount":"0.09","amountRaw":"90000","speed":"fast","minFinalityThreshold":1000,"fees":{"protocol":"0.000012","forwarding":"0.054181","maxFee":"0.054193","custodian":"0"},"totalDebit":"0.09","amountOut":"0.035807","minAmount":"0.05419","sourceGas":{"payer":"user","estimatedWei":"1237440000000"},"estimatedSeconds":8,"sender":"0xa7f0c09f250b7f9cc73068c02ceb296a013c0c0c","recipient":"0xa7f0c09f250b7f9cc73068c02ceb296a013c0c0c","warnings":[],"ready":true,"checks":[{"id":"ROUTE_SUPPORTED","ok":true},{"id":"AMOUNT_ABOVE_MINIMUM","ok":true},{"id":"BALANCE","ok":true},{"id":"RECIPIENT_ALLOWED","ok":true},{"id":"SOURCE_GAS","ok":true}],"transactions":[{"to":"0x036CbD53842c5426634e7929541eC2318f3dCF7e","data":"0x095ea7b30000000000000000000000008fe6b999dc680ccfdd5bf7eb0974218be2542daa0000000000000000000000000000000000000000000000000000000000015f90","value":"0","kind":"approve"},{"to":"0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA","data":"0x779b432d0000000000000000000000000000000000000000000000000000000000015f900000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a7f0c09f250b7f9cc73068c02ceb296a013c0c0c000000000000000000000000036cbd53842c5426634e7929541ec2318f3dcf7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3b100000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000020636374702d666f72776172640000000000000000000000000000000000000000","value":"0","kind":"burn"}]}}},"solana":{"title":"solana","value":{"data":{"transferId":"cmuzgzaj405hy41rgx2gai5e2","sourceChain":"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1","destinationChain":"eip155:84532","amount":"0.09","amountRaw":"90000","speed":"standard","minFinalityThreshold":2000,"fees":{"protocol":"0","forwarding":"0.054001","maxFee":"0.054001","custodian":"0"},"totalDebit":"0.09","amountOut":"0.035999","minAmount":"0.054002","sourceGas":{"payer":"sponsor","estimatedLamports":"3002040"},"estimatedSeconds":25,"sender":"CFDVxCGxPsdYFfHCgwgjq9Nv8rQ8X14ZrsLaQmJ6c4AD","recipient":"0xa7f0c09f250b7f9cc73068c02ceb296a013c0c0c","warnings":[],"ready":true,"checks":[{"id":"ROUTE_SUPPORTED","ok":true},{"id":"AMOUNT_ABOVE_MINIMUM","ok":true},{"id":"BALANCE","ok":true},{"id":"RECIPIENT_ALLOWED","ok":true},{"id":"SOURCE_GAS","ok":true},{"id":"SPONSORSHIP","ok":true,"message":"The environment's gas sponsor pays the fees and rent"}],"transactions":[{"kind":"burn","namespace":"solana","serializedTransaction":"AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYsZk5N/Z9giVAiEFxWmbXo5GXC1B1YXo7ACcHRvIhjSqmykJrNHAjnFXnEUIhDcEdh3qLzWbfBU1FqNIacRYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACxL1B4ViaC0+8+Orgnvxi5G+Yg12vwcf8J62bySsUPQV3jWmZCQYU9KocWrA11kLkFrsF1UwKZnmlo204DQg8naRpxTSA7Nqxxk6Cm8Wswm8OpQNHyTuu/5uoEBmTTjLkWozqSA7+ycCsBaj/ewJeZX6GJDDLSOGv59Nu6j1t1KAbTtELLORIVfxOpM9ATQoLQMrX/7NAaLb8bd5BgjfAC6nXoOp1THIOPl15AR6Mo0tOX1cirITMUCr7RyRTqmjTNUHbq7us12Dfla4X7yoM1XeoxQbnP1bkLPoxu58CjSULwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKaiGfuw3xJfThgGzO10dOrBI17FLYOsqlzxXrR5VRQtx71r2jruWGPiFgQi7ixv89aruYChuVkAhwQ4h3atSVEAM/zHgAPw39W+Z1B0m4S59II7nMg7bLVPGtsM7iBujmtqMVIduprQivBrbYzpqqz6gh6ncSy7S5JpSm8DNvuinDqDdYX+UHhjHQQ4hkY+XjXzhkrbn9qjCfID1GW9SKZfyBzhntzS0sNAsC+mG+HVut3hWSgz3fkgCdjPaFRVpl/IHQ/vqIYMs7g/CJsCJL6KZoe3rkn1lMC5tNfpOJPBTtP+v/MbiUnJ1BEgKbxdPv9Q2rMvQWSL1hOTczPhv873EbHc1dbneQ8vj1ZRMy4+fZWZriOO1hKhu462jjTsBt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKmqPIJ0AVPI7M9VKLu/2p/MUafbk2Qk8H8KN6F2H9f6VgEOFAIACQMQBgsMDwUEAQ0OEQcKDggNhAFv9T6DzGzfm5BfAQAAAAAABgAAAAAAAAAAAAAAAAAAAKfwwJ8lC3+cxzBowCzrKWoBPAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx0gAAAAAAANAHAAAgAAAAY2N0cC1mb3J3YXJkAAAAAAAAAAAAAAAAAAAAAAAAAAA=","lastValidBlockHeight":496041811}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"819e9cbb-5c9d-44c5-8591-32cb51c88d2c":{"description":"Bad request. Common causes:\n- A preflight check failed (`CCTP_PREFLIGHT_FAILED`); `details.failed` lists every failed check\n- The body is malformed, has unknown fields, or has an invalid `Idempotency-Key` (no `id`)\n- The body has both or neither of `amount` and `amountOut` (`INVALID_AMOUNT`)\n- The integration isn't enabled (`CCTP_NOT_ENABLED`)\n","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error","details","id"],"properties":{"error":{"type":"string","example":"CCTP transfer can't be built: BALANCE","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"details":{"type":"object","required":["failed","checks"],"properties":{"failed":{"type":"array","description":"The id of every failed check.","items":{"type":"string","uniqueKey":"oneOf.0.details.failed.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.0.details.failed","typeLabel":"string[]"},"checks":{"type":"array","items":{"type":"object","required":["id","ok"],"properties":{"id":{"type":"string","enum":["ROUTE_SUPPORTED","AMOUNT_ABOVE_MINIMUM","BALANCE","RECIPIENT_ALLOWED","SOURCE_GAS","SPONSORSHIP"],"description":"`SPONSORSHIP` is only returned for Account Abstraction clients and for Solana sources.","isRequired":true,"uniqueKey":"oneOf.0.details.checks.items.[INDEX].id","typeLabel":"enum\u003cstring>"},"ok":{"oneOf":[{"type":"boolean","description":"`true` passed, `false` failed and blocks the transfer, `null` can't be known at this stage or a check it depends on failed.","isRequired":true,"uniqueKey":"oneOf.0.details.checks.items.[INDEX].ok.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"`true` passed, `false` failed and blocks the transfer, `null` can't be known at this stage or a check it depends on failed.","isRequired":true,"uniqueKey":"oneOf.0.details.checks.items.[INDEX].ok.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.details.checks.items.[INDEX].ok","typeLabel":"boolean | null"},"message":{"type":"string","uniqueKey":"oneOf.0.details.checks.items.[INDEX].message","typeLabel":"string"},"fix":{"type":"string","description":"What to do about a failed check.","uniqueKey":"oneOf.0.details.checks.items.[INDEX].fix","typeLabel":"string"}},"uniqueKey":"oneOf.0.details.checks.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.0.details.checks","typeLabel":"object[]"},"minAmount":{"type":"string","description":"The smallest amount that works. Only present when `AMOUNT_ABOVE_MINIMUM` failed.","uniqueKey":"oneOf.0.details.minAmount","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.0.details","typeLabel":"object"},"id":{"type":"string","enum":["CCTP_PREFLIGHT_FAILED"],"isRequired":true,"uniqueKey":"oneOf.0.id","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error"],"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"id":{"type":"string","enum":["CCTP_NOT_ENABLED","INVALID_AMOUNT","IDEMPOTENCY_KEY_REUSED","CCTP_REBUILD_UNAVAILABLE","CCTP_REBUILD_TOO_SOON","ALREADY_SUBMITTED"],"description":"Stable error id. Absent on malformed request errors.","uniqueKey":"oneOf.1.id","typeLabel":"enum\u003cstring>"},"details":{"type":"object","additionalProperties":true,"uniqueKey":"oneOf.1.details","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"error":"CCTP transfer can't be built: SOURCE_GAS","details":{"failed":["SOURCE_GAS"],"checks":[{"id":"ROUTE_SUPPORTED","ok":true},{"id":"AMOUNT_ABOVE_MINIMUM","ok":true},{"id":"BALANCE","ok":true},{"id":"RECIPIENT_ALLOWED","ok":true},{"id":"SOURCE_GAS","ok":false,"message":"Native balance 0 wei is below the ~1237440000000 wei needed for gas","fix":"Fund the wallet with native gas on eip155:84532"}]},"id":"CCTP_PREFLIGHT_FAILED"},"examples":{"Example":{"title":"Example","value":{"error":"CCTP transfer can't be built: SOURCE_GAS","details":{"failed":["SOURCE_GAS"],"checks":[{"id":"ROUTE_SUPPORTED","ok":true},{"id":"AMOUNT_ABOVE_MINIMUM","ok":true},{"id":"BALANCE","ok":true},{"id":"RECIPIENT_ALLOWED","ok":true},{"id":"SOURCE_GAS","ok":false,"message":"Native balance 0 wei is below the ~1237440000000 wei needed for gas","fix":"Fund the wallet with native gas on eip155:84532"}]},"id":"CCTP_PREFLIGHT_FAILED"}}},"exampleType":"examples"}},"exampleType":"examples"},"ffc6ac7e-0bd5-4b94-a2fd-584c62e3a6f7":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message describing what went wrong","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"1a648707-bacb-410e-bf96-ebe44caada7b":{"description":"A transaction policy (`POLICY_VIOLATION`) or the security firewall (`ADDRESS_BLOCKED`) blocked the user operation (Account Abstraction clients).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error","id","details"],"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"details":{"type":"object","properties":{"policyViolation":{"type":"object","properties":{"policyId":{"type":"string","uniqueKey":"oneOf.0.details.policyViolation.policyId","typeLabel":"string"},"policyName":{"type":"string","uniqueKey":"oneOf.0.details.policyViolation.policyName","typeLabel":"string"},"reason":{"type":"string","uniqueKey":"oneOf.0.details.policyViolation.reason","typeLabel":"string"},"ruleId":{"type":"string","uniqueKey":"oneOf.0.details.policyViolation.ruleId","typeLabel":"string"}},"uniqueKey":"oneOf.0.details.policyViolation","typeLabel":"object"}},"isRequired":true,"uniqueKey":"oneOf.0.details","typeLabel":"object"},"id":{"type":"string","enum":["POLICY_VIOLATION"],"isRequired":true,"uniqueKey":"oneOf.0.id","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error","id","details"],"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"details":{"type":"object","properties":{"firewallViolation":{"type":"object","properties":{"blockedAddress":{"type":"string","uniqueKey":"oneOf.1.details.firewallViolation.blockedAddress","typeLabel":"string"},"code":{"type":"integer","description":"`212` when the address is on one of Portal's blocklists, `213` when the environment blocked it.","uniqueKey":"oneOf.1.details.firewallViolation.code","typeLabel":"integer"}},"uniqueKey":"oneOf.1.details.firewallViolation","typeLabel":"object"}},"isRequired":true,"uniqueKey":"oneOf.1.details","typeLabel":"object"},"id":{"type":"string","enum":["ADDRESS_BLOCKED"],"isRequired":true,"uniqueKey":"oneOf.1.id","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"policy":{"title":"policy","value":{"error":"Policy violation: amount exceeds limit (Max transfer)","details":{"policyViolation":{"policyId":"policyId","policyName":"Max transfer","reason":"amount exceeds limit (Max transfer)","ruleId":"ruleId"}},"id":"POLICY_VIOLATION"}},"firewall":{"title":"firewall","value":{"error":"Firewall: 0x1234567890abcdef1234567890abcdef12345678 blocked","details":{"firewallViolation":{"blockedAddress":"0x1234567890abcdef1234567890abcdef12345678","code":213}},"id":"ADDRESS_BLOCKED"}}},"exampleType":"examples"}},"exampleType":"examples"},"4b5b6708-3179-4bce-bf0b-6ddc14e6232e":{"description":"The `Idempotency-Key` was already used with a different body (`IDEMPOTENCY_KEY_REUSED`), Portal can't confirm the transfer's earlier burn didn't land (`CCTP_REBUILD_UNAVAILABLE`), or the transfer was built less than 2 minutes ago and its burn may still be pending (`CCTP_REBUILD_TOO_SOON`, retry after `details.retryAfterSeconds`).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"id":{"type":"string","enum":["CCTP_NOT_ENABLED","INVALID_AMOUNT","IDEMPOTENCY_KEY_REUSED","CCTP_REBUILD_UNAVAILABLE","CCTP_REBUILD_TOO_SOON","ALREADY_SUBMITTED"],"description":"Stable error id. Absent on malformed request errors.","uniqueKey":"id","typeLabel":"enum\u003cstring>"},"details":{"type":"object","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"Idempotency-Key was already used for a different CCTP transfer request","id":"IDEMPOTENCY_KEY_REUSED"},"examples":{"Example":{"title":"Example","value":{"error":"Idempotency-Key was already used for a different CCTP transfer request","id":"IDEMPOTENCY_KEY_REUSED"}}},"exampleType":"examples"}},"exampleType":"examples"},"d27cbe6a-e33f-4a8e-9a52-c89a1e8bdd98":{"description":"Circle's API is temporarily unavailable. Retry after `details.retryAfterSeconds`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"details":{"type":"object","properties":{"retryAfterSeconds":{"type":"integer","description":"Seconds to wait before retrying.","uniqueKey":"details.retryAfterSeconds","typeLabel":"integer"}},"uniqueKey":"details","typeLabel":"object"},"id":{"type":"string","enum":["CCTP_UPSTREAM_UNAVAILABLE"],"uniqueKey":"id","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"Circle Iris is temporarily unavailable; retry later","details":{"retryAfterSeconds":30},"id":"CCTP_UPSTREAM_UNAVAILABLE"},"examples":{"Example":{"title":"Example","value":{"error":"Circle Iris is temporarily unavailable; retry later","details":{"retryAfterSeconds":30},"id":"CCTP_UPSTREAM_UNAVAILABLE"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"03cc5e6f-0644-4250-905d-bbf631cbf6eb":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Client API Key or Client Session Token (CST). Pass as a Bearer token in the\nAuthorization header.\n","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"16ba486e-8d7f-4284-af4f-28b7a1896d7d":{"url":"https://api.portalhq.io/api/v3","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Client API Key or Client Session Token (CST). Pass as a Bearer token in the\nAuthorization header.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Client API Key or Client Session Token (CST). Pass as a Bearer token in the\nAuthorization header.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi/client-api.yaml"},"subdomain":"portal-003221ec","siteName":"Portal","title":"Create a CCTP transfer - Portal","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T15:17:20.686Z","originalFileLocation":"api-reference/cctp/create-a-cctp-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=\"Quotes again with fresh fees, runs every preflight check and, when they all pass, stores the transfer as BUILT and returns what to sign. If any check fails, nothing is stored and the response is 400 with the id CCTP_PREFLIGHT_FAILED. - EVM source, EOA clients: sign transactions in order, waiting for each to be mined successfully before signing the next; stop if one fails. An approve comes first when the allowance is too low, then the burn, then one fee transfer for your custodian fee. - EVM source, Account Abstraction clients: sign userOperation, which already contains every call in transactions. - Solana source: transactions holds one Solana transaction with serializedTransaction, already partially signed by Circle\u0026#x27;s event account and with any fee transfers inside. Sign and broadcast it with sol_signAndSendTransaction. Its blockhash expires after roughly a minute. Sign and broadcast on the source chain, then call submit with the burn transaction hash (EOA), the user operation hash (Account Abstraction on an EVM source) or the Solana signature (Solana source). With an Idempotency-Key, the same key and body return the same transfer: with freshly built transactions while it\u0026#x27;s BUILT or ABANDONED, or its current state (without transactions) once it\u0026#x27;s submitted. If Portal can\u0026#x27;t confirm that an earlier burn for the transfer never landed, it returns 409 with the id CCTP_REBUILD_UNAVAILABLE instead of new transactions. The same key with a different body returns 409 with the id IDEMPOTENCY_KEY_REUSED.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Portal\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a CCTP transfer - Portal\">\u003cmeta data-mint-head property=\"og:description\" content=\"Quotes again with fresh fees, runs every preflight check and, when they all pass, stores the transfer as BUILT and returns what to sign. If any check fails, nothing is stored and the response is 400 with the id CCTP_PREFLIGHT_FAILED. - EVM source, EOA clients: sign transactions in order, waiting for each to be mined successfully before signing the next; stop if one fails. An approve comes first when the allowance is too low, then the burn, then one fee transfer for your custodian fee. - EVM source, Account Abstraction clients: sign userOperation, which already contains every call in transactions. - Solana source: transactions holds one Solana transaction with serializedTransaction, already partially signed by Circle\u0026#x27;s event account and with any fee transfers inside. Sign and broadcast it with sol_signAndSendTransaction. Its blockhash expires after roughly a minute. Sign and broadcast on the source chain, then call submit with the burn transaction hash (EOA), the user operation hash (Account Abstraction on an EVM source) or the Solana signature (Solana source). With an Idempotency-Key, the same key and body return the same transfer: with freshly built transactions while it\u0026#x27;s BUILT or ABANDONED, or its current state (without transactions) once it\u0026#x27;s submitted. If Portal can\u0026#x27;t confirm that an earlier burn for the transfer never landed, it returns 409 with the id CCTP_REBUILD_UNAVAILABLE instead of new transactions. The same key with a different body returns 409 with the id IDEMPOTENCY_KEY_REUSED.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Portal\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://portal-003221ec.mintlify.site/_mintlify/api/og/v2?division=CCTP\u0026amp;title=Create+a+CCTP+transfer\u0026amp;description=Quotes+again+with+fresh+fees%2C+runs+every+preflight+check+and%2C+when+they+all+pass%2C%0Astores+the+transfer+as+%60BUILT%60+and+returns+what+to+sign.+If+any+check+fails%2C%0An\u0026amp;theme=e1b378a47070082a94077904\u0026amp;signature=4bef61a5597d3b21759f32f56967200b88ce08fa404c40074051cf9fc2de1470\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a CCTP transfer - Portal\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Quotes again with fresh fees, runs every preflight check and, when they all pass, stores the transfer as BUILT and returns what to sign. If any check fails, nothing is stored and the response is 400 with the id CCTP_PREFLIGHT_FAILED. - EVM source, EOA clients: sign transactions in order, waiting for each to be mined successfully before signing the next; stop if one fails. An approve comes first when the allowance is too low, then the burn, then one fee transfer for your custodian fee. - EVM source, Account Abstraction clients: sign userOperation, which already contains every call in transactions. - Solana source: transactions holds one Solana transaction with serializedTransaction, already partially signed by Circle\u0026#x27;s event account and with any fee transfers inside. Sign and broadcast it with sol_signAndSendTransaction. Its blockhash expires after roughly a minute. Sign and broadcast on the source chain, then call submit with the burn transaction hash (EOA), the user operation hash (Account Abstraction on an EVM source) or the Solana signature (Solana source). With an Idempotency-Key, the same key and body return the same transfer: with freshly built transactions while it\u0026#x27;s BUILT or ABANDONED, or its current state (without transactions) once it\u0026#x27;s submitted. If Portal can\u0026#x27;t confirm that an earlier burn for the transfer never landed, it returns 409 with the id CCTP_REBUILD_UNAVAILABLE instead of new transactions. The same key with a different body returns 409 with the id IDEMPOTENCY_KEY_REUSED.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://portal-003221ec.mintlify.site/_mintlify/api/og/v2?division=CCTP\u0026amp;title=Create+a+CCTP+transfer\u0026amp;description=Quotes+again+with+fresh+fees%2C+runs+every+preflight+check+and%2C+when+they+all+pass%2C%0Astores+the+transfer+as+%60BUILT%60+and+returns+what+to+sign.+If+any+check+fails%2C%0An\u0026amp;theme=e1b378a47070082a94077904\u0026amp;signature=4bef61a5597d3b21759f32f56967200b88ce08fa404c40074051cf9fc2de1470\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/portal-003221ec/V8g2PPGq3WmDlhV8/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Portal\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5a86fa\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-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/cctp/create-a-cctp-transfer.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.portalhq.io/#organization\",\"name\":\"Portal\",\"url\":\"https://docs.portalhq.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/portal-003221ec/GSEv3FWt9xT6P4p5/logo/light.svg?fit=max\u0026auto=format\u0026n=GSEv3FWt9xT6P4p5\u0026q=85\u0026s=589c25ed9717a63807caa49ef88b9541\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.portalhq.io#website\",\"name\":\"Portal\",\"url\":\"https://docs.portalhq.io\",\"publisher\":{\"@id\":\"https://docs.portalhq.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer#webpage\",\"url\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer\",\"name\":\"Create a CCTP transfer\",\"description\":\"Quotes again with fresh fees, runs every preflight check and, when they all pass, stores the transfer as BUILT and returns what to sign. If any check fails, nothing is stored and the response is 400 with the id CCTP_PREFLIGHT_FAILED. - EVM source, EOA clients: sign transactions in order, waiting for each to be mined successfully before signing the next; stop if one fails. An approve comes first when the allowance is too low, then the burn, then one fee transfer for your custodian fee. - EVM source, Account Abstraction clients: sign userOperation, which already contains every call in transactions. - Solana source: transactions holds one Solana transaction with serializedTransaction, already partially signed by Circle's event account and with any fee transfers inside. Sign and broadcast it with sol_signAndSendTransaction. Its blockhash expires after roughly a minute. Sign and broadcast on the source chain, then call submit with the burn transaction hash (EOA), the user operation hash (Account Abstraction on an EVM source) or the Solana signature (Solana source). With an Idempotency-Key, the same key and body return the same transfer: with freshly built transactions while it's BUILT or ABANDONED, or its current state (without transactions) once it's submitted. If Portal can't confirm that an earlier burn for the transfer never landed, it returns 409 with the id CCTP_REBUILD_UNAVAILABLE instead of new transactions. The same key with a different body returns 409 with the id IDEMPOTENCY_KEY_REUSED.\",\"dateModified\":\"2026-11-02T15:17:20.686Z\",\"isPartOf\":{\"@id\":\"https://docs.portalhq.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Client API\",\"item\":\"https://docs.portalhq.io/api-reference/clients/get-the-clients-details\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CCTP\",\"item\":\"https://docs.portalhq.io/api-reference/cctp/list-cctp-routes\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create a CCTP transfer\",\"item\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer#apireference\",\"headline\":\"Create a CCTP transfer\",\"name\":\"Create a CCTP transfer\",\"description\":\"Quotes again with fresh fees, runs every preflight check and, when they all pass, stores the transfer as BUILT and returns what to sign. If any check fails, nothing is stored and the response is 400 with the id CCTP_PREFLIGHT_FAILED. - EVM source, EOA clients: sign transactions in order, waiting for each to be mined successfully before signing the next; stop if one fails. An approve comes first when the allowance is too low, then the burn, then one fee transfer for your custodian fee. - EVM source, Account Abstraction clients: sign userOperation, which already contains every call in transactions. - Solana source: transactions holds one Solana transaction with serializedTransaction, already partially signed by Circle's event account and with any fee transfers inside. Sign and broadcast it with sol_signAndSendTransaction. Its blockhash expires after roughly a minute. Sign and broadcast on the source chain, then call submit with the burn transaction hash (EOA), the user operation hash (Account Abstraction on an EVM source) or the Solana signature (Solana source). With an Idempotency-Key, the same key and body return the same transfer: with freshly built transactions while it's BUILT or ABANDONED, or its current state (without transactions) once it's submitted. If Portal can't confirm that an earlier burn for the transfer never landed, it returns 409 with the id CCTP_REBUILD_UNAVAILABLE instead of new transactions. The same key with a different body returns 409 with the id IDEMPOTENCY_KEY_REUSED.\",\"url\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer\",\"mainEntityOfPage\":{\"@id\":\"https://docs.portalhq.io/api-reference/cctp/create-a-cctp-transfer#webpage\"},\"dateModified\":\"2026-11-02T15:17:20.686Z\",\"publisher\":{\"@id\":\"https://docs.portalhq.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.portalhq.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Portal\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Portal","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/portal-hq"},{"anchor":"Blog","icon":"newspaper","href":"https://www.portalhq.io/blog"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/apis/api-reference-overview"}]},{"group":"Enclave MPC API","pages":[{"group":"Wallet Management","pages":[{"title":"Create the client's wallet","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml post /v1/generate","href":"/api-reference/mpc-operations/create-the-clients-wallet"},{"title":"Back up the client's wallet","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml post /v1/backup","href":"/api-reference/mpc-operations/back-up-the-clients-wallet"},{"title":"Recover the client's wallet","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml post /v1/recover","href":"/api-reference/mpc-operations/recover-the-clients-wallet"}]},{"group":"Signing","pages":[{"title":"Send the client's assets","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml post /v1/assets/send","href":"/api-reference/mpc-operations/send-the-clients-assets"},{"title":"Sign a transaction or message by chain","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml post /v1/sign","href":"/api-reference/mpc-operations/sign-a-transaction-or-message-by-chain"},{"title":"Sign a transaction or message by curve","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml post /v1/raw/sign/{curve}","href":"/api-reference/mpc-operations/sign-a-transaction-or-message-by-curve"}]},{"group":"Presignatures","pages":[{"title":"Create a presignature","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml post /v1/presign/{curve}","href":"/api-reference/mpc-operations/create-a-presignature"},{"title":"List active presignatures","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml get /v1/presignatures","href":"/api-reference/mpc-operations/list-active-presignatures"},{"title":"Delete a presignature","deprecated":null,"version":null,"openapi":"/openapi/enclave-mpc-api.yaml delete /v1/presignatures/{id}","href":"/api-reference/mpc-operations/delete-a-presignature"}]}]},{"group":"Client API","pages":[{"group":"Clients","pages":[{"title":"Get the client's details","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me","href":"/api-reference/clients/get-the-clients-details"}]},{"group":"Wallet","pages":[{"title":"Get wallet balances","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/chains/{chain}/assets","href":"/api-reference/wallet/get-wallet-balances"},{"title":"Get wallet NFTs","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/chains/{chain}/assets/nfts","href":"/api-reference/wallet/get-wallet-nfts"},{"title":"Get wallet transactions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/chains/{chain}/transactions","href":"/api-reference/wallet/get-wallet-transactions"},{"title":"Get transaction details by signature","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/chains/{chain}/transactions/{signature}","href":"/api-reference/wallet/get-transaction-details-by-signature"},{"title":"Get wallet capabilities","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/wallet_getCapabilities","href":"/api-reference/wallet/get-wallet-capabilities"}]},{"group":"Transactions","pages":[{"title":"Build a transaction","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/clients/{clientId}/chains/{chain}/assets/send/build-transaction","href":"/api-reference/transactions/build-a-transaction"},{"title":"Broadcast a signed transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/assets/send/broadcast-transaction","href":"/api-reference/transactions/broadcast-a-signed-transaction"},{"title":"Build a user operation","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/assets/send/build-user-operation","href":"/api-reference/transactions/build-a-user-operation"},{"title":"Broadcast a user operation","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/assets/send/broadcast-user-operation","href":"/api-reference/transactions/broadcast-a-user-operation"},{"title":"Evaluate a transaction for risks","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/evaluate-transaction","href":"/api-reference/transactions/evaluate-a-transaction-for-risks"}]},{"group":"Funding","pages":[{"title":"Get the testnet funding configuration","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/fund/config","href":"/api-reference/funding/get-the-testnet-funding-configuration"},{"title":"Fund the client's wallet with testnet tokens","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/fund","href":"/api-reference/funding/fund-the-clients-wallet-with-testnet-tokens"}]},{"group":"Wallet Shares","pages":[{"title":"Update signing share pair statuses","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml patch /clients/me/signing-share-pairs","href":"/api-reference/wallet-shares/update-signing-share-pair-statuses"},{"title":"Update backup share pair statuses","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml patch /clients/me/backup-share-pairs","href":"/api-reference/wallet-shares/update-backup-share-pair-statuses"},{"title":"Get ejectable backup shares for a wallet","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/wallets/{walletId}/ejectable-backup-shares","href":"/api-reference/wallet-shares/get-ejectable-backup-shares-for-a-wallet"},{"title":"Delete a signing share pair","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml delete /clients/me/wallets/{walletId}/signing-share-pairs/{signingSharePairId}","href":"/api-reference/wallet-shares/delete-a-signing-share-pair"},{"title":"Get backup share pairs","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/wallets/{walletId}/backup-share-pairs","href":"/api-reference/wallet-shares/get-backup-share-pairs"},{"title":"Get signing share pairs","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/wallets/{walletId}/signing-share-pairs","href":"/api-reference/wallet-shares/get-signing-share-pairs"},{"title":"Complete wallet ejection","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml patch /clients/me/wallets/{walletId}/complete-eject","href":"/api-reference/wallet-shares/complete-wallet-ejection"},{"title":"Mark client as ejected","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/eject","href":"/api-reference/clients/mark-client-as-ejected"}]},{"group":"Delegations","pages":[{"title":"Approve a token delegation","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/assets/{token}/approvals","href":"/api-reference/delegations/approve-a-token-delegation"},{"title":"Revoke a token delegation","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/assets/{token}/revocations","href":"/api-reference/delegations/revoke-a-token-delegation"},{"title":"Get delegation status for a token","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}/chains/{chain}/assets/{token}/delegations","href":"/api-reference/delegations/get-delegation-status-for-a-token"},{"title":"Transfer tokens as a delegate","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/assets/{token}/delegations/transfers","href":"/api-reference/delegations/transfer-tokens-as-a-delegate"},{"title":"Initialize a delegation system account","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/delegation/init-system-account","href":"/api-reference/delegations/initialize-a-delegation-system-account"},{"title":"Initialize a delegation token account","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/delegation/init-token-account","href":"/api-reference/delegations/initialize-a-delegation-token-account"},{"title":"Approve a Solana delegation","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/delegation/approve","href":"/api-reference/delegations/approve-a-solana-delegation"},{"title":"Transfer as a Solana delegate","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/delegation/transfer","href":"/api-reference/delegations/transfer-as-a-solana-delegate"},{"title":"Get Solana delegation status","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}/chains/{chain}/delegation/status","href":"/api-reference/delegations/get-solana-delegation-status"},{"title":"Revoke a Solana delegation","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/delegation/revoke","href":"/api-reference/delegations/revoke-a-solana-delegation"}]},{"group":"EIP-7702","pages":[{"title":"Get account type","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/chains/{chain}/wallet/account-type","href":"/api-reference/eip-7702/get-account-type"},{"title":"Build an EIP-7702 authorization","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/wallet/build-authorization-list","href":"/api-reference/eip-7702/build-an-eip-7702-authorization"},{"title":"Build an EIP-7702 authorization transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/chains/{chain}/wallet/build-authorization-transaction","href":"/api-reference/eip-7702/build-an-eip-7702-authorization-transaction"}]},{"group":"Li.Fi","pages":[{"title":"Get a Li.Fi swap/bridge quote","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/lifi/quote","href":"/api-reference/lifi/get-a-lifi-swapbridge-quote"},{"title":"Get Li.Fi swap/bridge routes","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/lifi/routes","href":"/api-reference/lifi/get-lifi-swapbridge-routes"},{"title":"Get details for a route step","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/lifi/route-step-details","href":"/api-reference/lifi/get-details-for-a-route-step"},{"title":"Get Li.Fi transaction status","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/lifi/status","href":"/api-reference/lifi/get-lifi-transaction-status"},{"title":"Get Li.Fi supported tokens","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/lifi/tokens","href":"/api-reference/lifi/get-lifi-supported-tokens"}]},{"group":"CCTP","pages":[{"title":"List CCTP routes","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/cctp/routes","href":"/api-reference/cctp/list-cctp-routes"},{"title":"Quote a CCTP transfer","description":"Returns Circle's fees, your custodian fee, the exact amount the\nrecipient receives, the total that leaves the wallet (`totalDebit`) and the\npreflight checks for a transfer. Nothing is stored. A quote that can't go ahead\nstill returns `200`, with `ready: false` and a `message` and `fix` on each failed\ncheck.\n\nFor Account Abstraction clients on an EVM source, the `SOURCE_GAS` and\n`SPONSORSHIP` checks are `null` on a quote, because the user operation is only\nbuilt when you create the transfer. For a Solana source, both are known on the\nquote.\n","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/cctp/quote","href":"/api-reference/cctp/quote-a-cctp-transfer"},{"title":"Create a CCTP transfer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/cctp/transfers","href":"/api-reference/cctp/create-a-cctp-transfer"},{"title":"Submit a CCTP transfer","description":"Tells Portal which transaction to track. Send exactly one of:\n\n- `txHash`: the burn transaction hash (`0x`), for EOA clients on an EVM source.\n For a Solana source, the base58 signature of the burn transaction, for every\n client including Account Abstraction clients.\n- `userOpHash`: the user operation hash, for Account Abstraction clients on an\n EVM source.\n\nSubmitting the approve or a fee transfer hash instead of the burn hash ends the\ntransfer as `FAILED` with `failureReason` `TX_MISMATCH`. A Solana signature that\ndoesn't appear on chain within 30 minutes ends it as `FAILED` with\n`SOURCE_TX_NOT_FOUND`.\n\nSafe to retry: the same hash again returns the transfer. A different hash, or a\nhash already submitted for another transfer, returns `409` with the id\n`ALREADY_SUBMITTED`. A transfer marked `ABANDONED` still accepts a late submit.\nWorks even if the integration was disabled after the transfer was created.\n","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/cctp/transfers/{id}/submit","href":"/api-reference/cctp/submit-a-cctp-transfer"},{"title":"Get a CCTP transfer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/cctp/transfers/{id}","href":"/api-reference/cctp/get-a-cctp-transfer"},{"title":"List CCTP transfers","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/cctp/transfers","href":"/api-reference/cctp/list-cctp-transfers"}]},{"group":"0x","pages":[{"title":"Get available swap sources","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/0x/swap/sources","href":"/api-reference/0x/get-available-swap-sources"},{"title":"Get a swap quote","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/0x/swap/quote","href":"/api-reference/0x/get-a-swap-quote"},{"title":"Get a swap price estimate","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/0x/swap/price","href":"/api-reference/0x/get-a-swap-price-estimate"},{"title":"Get cross-chain swap quotes","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/0x/cross-chain/quotes","href":"/api-reference/0x/get-cross-chain-swap-quotes"},{"title":"Get cross-chain transaction status","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/0x/cross-chain/status","href":"/api-reference/0x/get-cross-chain-transaction-status"},{"title":"List cross-chain bridge and swap sources","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/0x/cross-chain/sources","href":"/api-reference/0x/list-cross-chain-bridge-and-swap-sources"},{"title":"Get cross-chain transaction history","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/0x/cross-chain/tx-history","href":"/api-reference/0x/get-cross-chain-transaction-history"}]},{"group":"Yield","pages":[{"title":"Get yield opportunities","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz/yields","href":"/api-reference/yieldxyz/get-yield-opportunities"},{"title":"Get default yield opportunities","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz/yields/defaults","href":"/api-reference/yieldxyz/get-default-yield-opportunities"},{"title":"Get yield validators","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz/yields/{yieldId}/validators","href":"/api-reference/yieldxyz/get-yield-validators"},{"title":"Get yield balances","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz/yields/balances","href":"/api-reference/yieldxyz/get-yield-balances"},{"title":"Enter a yield position","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz/actions/enter","href":"/api-reference/yieldxyz/enter-a-yield-position"},{"title":"Exit a yield position","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz/actions/exit","href":"/api-reference/yieldxyz/exit-a-yield-position"},{"title":"Manage a yield position","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz/actions/manage","href":"/api-reference/yieldxyz/manage-a-yield-position"},{"title":"Submit a transaction hash","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml put /clients/me/integrations/yield-xyz/transactions/{transactionId}/submit-hash","href":"/api-reference/yieldxyz/submit-a-transaction-hash"},{"title":"Get a yield transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz/transactions/{transactionId}","href":"/api-reference/yieldxyz/get-a-yield-transaction"},{"title":"Get yield action history","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz/actions","href":"/api-reference/yieldxyz/get-yield-action-history"}]},{"group":"Yield.xyz Borrow","pages":[{"title":"Get positions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/positions","href":"/api-reference/yieldxyz-borrow/get-positions"},{"title":"Get liquidation history","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/positions/liquidations","href":"/api-reference/yieldxyz-borrow/get-liquidation-history"},{"title":"Execute a borrow action","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-borrow/actions","href":"/api-reference/yieldxyz-borrow/execute-a-borrow-action"},{"title":"List actions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/actions","href":"/api-reference/yieldxyz-borrow/list-actions"},{"title":"Get action by ID","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/actions/{id}","href":"/api-reference/yieldxyz-borrow/get-action-by-id"},{"title":"Get next step transactions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-borrow/actions/{id}/step","href":"/api-reference/yieldxyz-borrow/get-next-step-transactions"},{"title":"Submit signed transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-borrow/transactions/{transactionId}/submit","href":"/api-reference/yieldxyz-borrow/submit-signed-transaction"},{"title":"List integrations","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/integrations","href":"/api-reference/yieldxyz-borrow/list-integrations"},{"title":"Get integration details","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/integrations/{integrationId}","href":"/api-reference/yieldxyz-borrow/get-integration-details"},{"title":"List lending markets","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/markets","href":"/api-reference/yieldxyz-borrow/list-lending-markets"},{"title":"Get market by ID","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/markets/{marketId}","href":"/api-reference/yieldxyz-borrow/get-market-by-id"},{"title":"Health check","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-borrow/health","href":"/api-reference/yieldxyz-borrow/health-check"}]},{"group":"Agg","pages":[{"title":"Start an Agg link","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/link/challenge","href":"/api-reference/agg/start-an-agg-link"},{"title":"Complete an Agg link","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/link","href":"/api-reference/agg/complete-an-agg-link"},{"title":"Get the Agg link","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/link","href":"/api-reference/agg/get-the-agg-link"},{"title":"Remove the Agg link","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml delete /clients/me/integrations/agg/link","href":"/api-reference/agg/remove-the-agg-link"},{"title":"List events","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/events","href":"/api-reference/agg/list-events"},{"title":"Get an event","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/events/{eventId}","href":"/api-reference/agg/get-an-event"},{"title":"Get an event page","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/events/{eventId}/bootstrap","href":"/api-reference/agg/get-an-event-page"},{"title":"List markets","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/markets","href":"/api-reference/agg/list-markets"},{"title":"Search events or markets","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/search","href":"/api-reference/agg/search-events-or-markets"},{"title":"List categories","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/categories","href":"/api-reference/agg/list-categories"},{"title":"Get venue geo restrictions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/venue-geo-policy","href":"/api-reference/agg/get-venue-geo-restrictions"},{"title":"Get the Agg app config","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/app-config","href":"/api-reference/agg/get-the-agg-app-config"},{"title":"Get midpoints","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/midpoints","href":"/api-reference/agg/get-midpoints"},{"title":"Get order books","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/orderbooks","href":"/api-reference/agg/get-order-books"},{"title":"Get an outcome's order book","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/orderbooks/outcome/{outcomeId}","href":"/api-reference/agg/get-an-outcomes-order-book"},{"title":"Get chart bars","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/charts/bars","href":"/api-reference/agg/get-chart-bars"},{"title":"Get chart history","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/charts/history/manifest","href":"/api-reference/agg/get-chart-history"},{"title":"Get the Agg user","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/me","href":"/api-reference/agg/get-the-agg-user"},{"title":"Get deposit addresses","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/deposit-addresses","href":"/api-reference/agg/get-deposit-addresses"},{"title":"Get balances","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/balances","href":"/api-reference/agg/get-balances"},{"title":"List positions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/positions","href":"/api-reference/agg/list-positions"},{"title":"List orders","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/orders","href":"/api-reference/agg/list-orders"},{"title":"Fill a quote","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/orders","href":"/api-reference/agg/fill-a-quote"},{"title":"List activity","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/activity","href":"/api-reference/agg/list-activity"},{"title":"Redeem winnings","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/redemptions","href":"/api-reference/agg/redeem-winnings"},{"title":"Preview a withdrawal","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/withdrawals/preview","href":"/api-reference/agg/preview-a-withdrawal"},{"title":"Get the withdrawable amount","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/withdrawals/quote","href":"/api-reference/agg/get-the-withdrawable-amount"},{"title":"Withdraw","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/withdrawals","href":"/api-reference/agg/withdraw"},{"title":"Get a withdrawal","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/withdrawals/{withdrawalId}","href":"/api-reference/agg/get-a-withdrawal"},{"title":"Get a quote","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/quotes","href":"/api-reference/agg/get-a-quote"},{"title":"Place a market order on one venue","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/orders/direct","href":"/api-reference/agg/place-a-market-order-on-one-venue"},{"title":"Place a limit order","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/orders/limit","href":"/api-reference/agg/place-a-limit-order"},{"title":"Cancel a limit order","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/orders/cancel","href":"/api-reference/agg/cancel-a-limit-order"},{"title":"Answer self-custody signature requests","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/agg/orders/{quoteId}/signatures","href":"/api-reference/agg/answer-self-custody-signature-requests"},{"title":"Get fill progress","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/agg/orders/{quoteId}","href":"/api-reference/agg/get-fill-progress"}]},{"group":"Yield.xyz Perps","pages":[{"title":"List trading venues","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/providers","href":"/api-reference/yieldxyz-perps/list-trading-venues"},{"title":"Get a trading venue","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/providers/{providerId}","href":"/api-reference/yieldxyz-perps/get-a-trading-venue"},{"title":"List markets","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/markets","href":"/api-reference/yieldxyz-perps/list-markets"},{"title":"Get a market","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/markets/{marketId}","href":"/api-reference/yieldxyz-perps/get-a-market"},{"title":"Get market candles","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/markets/{marketId}/candles","href":"/api-reference/yieldxyz-perps/get-market-candles"},{"title":"Get positions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-perps/positions","href":"/api-reference/yieldxyz-perps/get-positions"},{"title":"Get orders","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-perps/orders","href":"/api-reference/yieldxyz-perps/get-orders"},{"title":"Get account balances","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-perps/balances","href":"/api-reference/yieldxyz-perps/get-account-balances"},{"title":"Execute a perps action","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-perps/actions","href":"/api-reference/yieldxyz-perps/execute-a-perps-action"},{"title":"List actions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/actions","href":"/api-reference/yieldxyz-perps/list-actions"},{"title":"Get an action","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/actions/{id}","href":"/api-reference/yieldxyz-perps/get-an-action"},{"title":"Get activity feed","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/activity","href":"/api-reference/yieldxyz-perps/get-activity-feed"},{"title":"List events","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/events","href":"/api-reference/yieldxyz-perps/list-events"},{"title":"Get an event","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/events/{id}","href":"/api-reference/yieldxyz-perps/get-an-event"},{"title":"Submit a signed transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/yield-xyz-perps/transactions/{transactionId}/submit","href":"/api-reference/yieldxyz-perps/submit-a-signed-transaction"},{"title":"Health check","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/health","href":"/api-reference/yieldxyz-perps/health-check"},{"title":"Per-venue health","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/yield-xyz-perps/health/providers","href":"/api-reference/yieldxyz-perps/per-venue-health"}]},{"group":"Blockaid","pages":[{"title":"Scan an EVM transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/blockaid/evm/scan","href":"/api-reference/blockaid/scan-an-evm-transaction"},{"title":"Scan Solana transactions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/blockaid/solana/scan","href":"/api-reference/blockaid/scan-solana-transactions"},{"title":"Scan a TRON transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/blockaid/tron/scan","href":"/api-reference/blockaid/scan-a-tron-transaction"},{"title":"Scan an address","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/blockaid/address/scan","href":"/api-reference/blockaid/scan-an-address"},{"title":"Scan tokens","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/blockaid/tokens/scan","href":"/api-reference/blockaid/scan-tokens"},{"title":"Scan a URL","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/blockaid/url/scan","href":"/api-reference/blockaid/scan-a-url"}]},{"group":"Hypernative","pages":[{"title":"Scan addresses","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/hypernative/addresses/scan","href":"/api-reference/hypernative/scan-addresses"},{"title":"Scan an EVM transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/hypernative/evm/scan","href":"/api-reference/hypernative/scan-an-evm-transaction"},{"title":"Scan an EIP-712 message","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/hypernative/eip-712/scan","href":"/api-reference/hypernative/scan-an-eip-712-message"},{"title":"Scan a Solana transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/hypernative/solana/scan","href":"/api-reference/hypernative/scan-a-solana-transaction"},{"title":"Scan NFTs","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/hypernative/nfts/scan","href":"/api-reference/hypernative/scan-nfts"},{"title":"Scan tokens","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/hypernative/tokens/scan","href":"/api-reference/hypernative/scan-tokens"},{"title":"Scan a URL","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/hypernative/url/scan","href":"/api-reference/hypernative/scan-a-url"}]},{"group":"Noah","pages":[{"title":"Initiate KYC onboarding","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/noah/customers/kyc","href":"/api-reference/noah/initiate-kyc-onboarding"},{"title":"Initiate payin","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/noah/payins","href":"/api-reference/noah/initiate-payin"},{"title":"Simulate fiat deposit","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/noah/payins/simulate","href":"/api-reference/noah/simulate-fiat-deposit"},{"title":"Get payout countries","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/noah/payouts/countries","href":"/api-reference/noah/get-payout-countries"},{"title":"Get payout channels","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/noah/payouts/channels","href":"/api-reference/noah/get-payout-channels"},{"title":"Get payout channel form","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/noah/payouts/channels/{channelId}/form","href":"/api-reference/noah/get-payout-channel-form"},{"title":"Quote payout","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/noah/payouts/quote","href":"/api-reference/noah/quote-payout"},{"title":"Initiate payout","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/noah/payouts","href":"/api-reference/noah/initiate-payout"},{"title":"List payment methods","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/noah/payouts/payment-methods","href":"/api-reference/noah/list-payment-methods"}]},{"group":"Meld","pages":[{"title":"List service providers","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/service-providers","href":"/api-reference/meld/list-service-providers"},{"title":"List countries","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/countries","href":"/api-reference/meld/list-countries"},{"title":"List fiat currencies","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/fiat-currencies","href":"/api-reference/meld/list-fiat-currencies"},{"title":"List crypto currencies","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/crypto-currencies","href":"/api-reference/meld/list-crypto-currencies"},{"title":"List payment methods","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/payment-methods","href":"/api-reference/meld/list-payment-methods"},{"title":"List country defaults","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/defaults","href":"/api-reference/meld/list-country-defaults"},{"title":"List buy limits","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/buy-limits","href":"/api-reference/meld/list-buy-limits"},{"title":"List sell limits","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/sell-limits","href":"/api-reference/meld/list-sell-limits"},{"title":"List KYC limits","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/discovery/kyc-limits","href":"/api-reference/meld/list-kyc-limits"},{"title":"Create Meld customer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/meld/customers","href":"/api-reference/meld/create-meld-customer"},{"title":"Get Meld customer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/customers","href":"/api-reference/meld/get-meld-customer"},{"title":"Get quote","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/meld/retail/quote","href":"/api-reference/meld/get-quote"},{"title":"Create widget session","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/meld/retail/widget","href":"/api-reference/meld/create-widget-session"},{"title":"List transactions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/retail/transactions","href":"/api-reference/meld/list-transactions"},{"title":"Get transaction","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/retail/transactions/{id}","href":"/api-reference/meld/get-transaction"},{"title":"Get transaction by session","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/meld/retail/transactions/sessions/{sessionId}","href":"/api-reference/meld/get-transaction-by-session"}]},{"group":"Due","pages":[{"title":"Provision Due customer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/customers","href":"/api-reference/due/provision-due-customer"},{"title":"Get Due customer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/customers","href":"/api-reference/due/get-due-customer"},{"title":"List channels","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/channels","href":"/api-reference/due/list-channels"},{"title":"List financial institutions","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/financial-institutions/{country2}/{schema}","href":"/api-reference/due/list-financial-institutions"},{"title":"Get financial institution","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/financial-institutions/{financialInstitutionId}","href":"/api-reference/due/get-financial-institution"},{"title":"Start KYC submission","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/kyc","href":"/api-reference/due/start-kyc-submission"},{"title":"Get KYC status","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/kyc","href":"/api-reference/due/get-kyc-status"},{"title":"Start hosted KYC session","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/kyc/session","href":"/api-reference/due/start-hosted-kyc-session"},{"title":"Get KYC submission","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/kyc/submissions/{id}","href":"/api-reference/due/get-kyc-submission"},{"title":"Submit KYC information","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/kyc/submissions/{id}/info","href":"/api-reference/due/submit-kyc-information"},{"title":"Create KYC document","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/kyc/submissions/{id}/documents","href":"/api-reference/due/create-kyc-document"},{"title":"Upload KYC document","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/kyc/submissions/documents/{token}","href":"/api-reference/due/upload-kyc-document"},{"title":"Complete KYC submission","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/kyc/submissions/{id}/complete","href":"/api-reference/due/complete-kyc-submission"},{"title":"List endorsements","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/kyc/endorsements","href":"/api-reference/due/list-endorsements"},{"title":"Request endorsement","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/kyc/endorsements/{code}","href":"/api-reference/due/request-endorsement"},{"title":"Get endorsement","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/kyc/endorsements/{code}","href":"/api-reference/due/get-endorsement"},{"title":"Get terms of service","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/tos/{token}","href":"/api-reference/due/get-terms-of-service"},{"title":"Accept terms of service","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/tos/{token}","href":"/api-reference/due/accept-terms-of-service"},{"title":"Get usage","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/usage","href":"/api-reference/due/get-usage"},{"title":"Create transfer quote","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/transfers/quote","href":"/api-reference/due/create-transfer-quote"},{"title":"Estimate transfer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/transfers/estimate","href":"/api-reference/due/estimate-transfer"},{"title":"List transfers","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/transfers","href":"/api-reference/due/list-transfers"},{"title":"Create transfer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/transfers","href":"/api-reference/due/create-transfer"},{"title":"Get transfer","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/transfers/{id}","href":"/api-reference/due/get-transfer"},{"title":"Create transfer intent","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/transfers/{id}/transfer-intent","href":"/api-reference/due/create-transfer-intent"},{"title":"Create funding address","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/transfers/{id}/funding-address","href":"/api-reference/due/create-funding-address"},{"title":"Create FX quote","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/fx/quote","href":"/api-reference/due/create-fx-quote"},{"title":"List FX markets","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/fx/markets","href":"/api-reference/due/list-fx-markets"},{"title":"Get FX market","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/fx/markets/{base}/{quote}","href":"/api-reference/due/get-fx-market"},{"title":"Get FX market history","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/fx/markets/{base}/{quote}/history","href":"/api-reference/due/get-fx-market-history"},{"title":"List recipients","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/recipients","href":"/api-reference/due/list-recipients"},{"title":"Create recipient","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/recipients","href":"/api-reference/due/create-recipient"},{"title":"Get recipient","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/recipients/{id}","href":"/api-reference/due/get-recipient"},{"title":"Delete recipient","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml delete /clients/me/integrations/due/recipients/{id}","href":"/api-reference/due/delete-recipient"},{"title":"Register wallet","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/wallets","href":"/api-reference/due/register-wallet"},{"title":"List wallets","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/wallets","href":"/api-reference/due/list-wallets"},{"title":"Get wallet balance","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/wallets/{walletId}/balance","href":"/api-reference/due/get-wallet-balance"},{"title":"Create virtual account","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/virtual-accounts","href":"/api-reference/due/create-virtual-account"},{"title":"Get virtual account by query","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/virtual-accounts","href":"/api-reference/due/get-virtual-account-by-query"},{"title":"List virtual accounts","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/virtual-accounts/list","href":"/api-reference/due/list-virtual-accounts"},{"title":"Get virtual account","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/integrations/due/virtual-accounts/key/{key}","href":"/api-reference/due/get-virtual-account"},{"title":"Update virtual account","deprecated":null,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/integrations/due/virtual-accounts/key/{key}","href":"/api-reference/due/update-virtual-account"}]},{"group":"Deprecated","pages":[{"title":"Simulate a transaction","deprecated":true,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/simulate-transaction","href":"/api-reference/deprecated/simulate-a-transaction"},{"title":"Prepare wallet ejection (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/client-api.yaml post /clients/me/wallets/{walletId}/prepare-eject","href":"/api-reference/wallet-shares/prepare-wallet-ejection-deprecated"},{"title":"Get transactions (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/transactions","href":"/api-reference/deprecated/get-transactions-deprecated"},{"title":"Get NFTs (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/nfts","href":"/api-reference/deprecated/get-nfts-deprecated"},{"title":"Get balances (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/client-api.yaml get /clients/me/balances","href":"/api-reference/deprecated/get-balances-deprecated"}]}]},{"group":"Authentication API","pages":[{"group":"Auth Methods","pages":[{"title":"Get the enabled auth methods","deprecated":null,"version":null,"openapi":"/openapi/authentication-api.yaml get /methods","href":"/api-reference/auth-methods/get-the-enabled-auth-methods"}]},{"group":"Magic Links","pages":[{"title":"Send a magic link","deprecated":null,"version":null,"openapi":"/openapi/authentication-api.yaml post /magic-links","href":"/api-reference/magic-links/send-a-magic-link"},{"title":"Validate a magic link token","deprecated":null,"version":null,"openapi":"/openapi/authentication-api.yaml post /magic-links/validations","href":"/api-reference/magic-links/validate-a-magic-link-token"}]},{"group":"OAuth","pages":[{"title":"Get the OAuth authorize URLs","deprecated":null,"version":null,"openapi":"/openapi/authentication-api.yaml get /oauth/urls","href":"/api-reference/oauth/get-the-oauth-authorize-urls"},{"title":"Validate an OAuth token","deprecated":null,"version":null,"openapi":"/openapi/authentication-api.yaml post /oauth/tokens","href":"/api-reference/oauth/validate-an-oauth-token"}]},{"group":"Two-Factor Authentication","pages":[{"title":"Validate a TOTP code","deprecated":null,"version":null,"openapi":"/openapi/authentication-api.yaml post /totps/validations","href":"/api-reference/two-factor-authentication/validate-a-totp-code"}]}]},{"group":"Custodian API","pages":[{"group":"Clients","pages":[{"title":"Create a client","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/clients","href":"/api-reference/clients/create-a-client"},{"title":"List clients","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients","href":"/api-reference/clients/list-clients"},{"title":"Get a client","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}","href":"/api-reference/clients/get-a-client"},{"title":"Disable or enable a client capability","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml patch /custodians/me/clients/{clientId}/capabilities","href":"/api-reference/clients/disable-or-enable-a-client-capability"},{"title":"Create a client session token","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/clients/{clientId}/sessions","href":"/api-reference/clients/create-a-client-session-token"},{"title":"Create a web OTP","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/clients/{clientId}/web-otps","href":"/api-reference/clients/create-a-web-otp"}]},{"group":"Transactions","pages":[{"title":"Build a transaction","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/clients/{clientId}/chains/{chain}/assets/send/build-transaction","href":"/api-reference/transactions/build-a-transaction"}]},{"group":"Wallet Metadata","pages":[{"title":"Get asset balances","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}/chains/{chain}/assets","href":"/api-reference/wallet-metadata/get-asset-balances"},{"title":"Get NFTs","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}/chains/{chain}/assets/nfts","href":"/api-reference/wallet-metadata/get-nfts"}]},{"group":"Wallet Shares","pages":[{"title":"Enable wallet ejection","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml patch /custodians/me/clients/{clientId}/enable-eject","href":"/api-reference/wallet-shares/enable-wallet-ejection"},{"title":"Get ejectable backup shares","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}/wallets/{walletId}/ejectable-backup-shares","href":"/api-reference/wallet-shares/get-ejectable-backup-shares"},{"title":"Prepare a client for eject (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/clients/{clientId}/prepare-eject","href":"/api-reference/wallet-shares/prepare-a-client-for-eject-deprecated"}]},{"group":"Delegations","pages":[{"title":"Get Solana delegation status","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}/chains/{chain}/delegation/status","href":"/api-reference/delegations/get-solana-delegation-status"},{"title":"Get delegation status for a token","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/clients/{clientId}/chains/{chain}/assets/{token}/delegations","href":"/api-reference/delegations/get-delegation-status-for-a-token"},{"title":"Transfer as a delegate","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/clients/{clientId}/chains/{chain}/assets/{token}/delegations/transfers","href":"/api-reference/delegations/transfer-as-a-delegate"}]},{"group":"Informational Webhooks","pages":[{"title":"List informational webhooks","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/alerts/webhooks","href":"/api-reference/informational-webhooks/list-informational-webhooks"},{"title":"List informational webhook delivery events","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events","href":"/api-reference/informational-webhooks/list-informational-webhook-delivery-events"},{"title":"Retry an informational webhook delivery event","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events/{deliveryEventId}/retries","href":"/api-reference/informational-webhooks/retry-an-informational-webhook-delivery-event"},{"title":"List informational webhook events","deprecated":true,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/alerts/webhooks/{alertWebhookId}/events","href":"/api-reference/informational-webhooks/list-informational-webhook-events"},{"title":"Replay failed informational webhook events","deprecated":true,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/alerts/webhooks/{alertWebhookId}/events/failed/replay","href":"/api-reference/informational-webhooks/replay-failed-informational-webhook-events"},{"title":"Format a raw informational webhook event (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/alerts/wallets/format","href":"/api-reference/informational-webhooks/format-a-raw-informational-webhook-event-deprecated"},{"title":"Format raw informational webhook events (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/alerts/format","href":"/api-reference/informational-webhooks/format-raw-informational-webhook-events-deprecated"},{"title":"Replay events by block number (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/alerts/retry-by-block-number","href":"/api-reference/informational-webhooks/replay-events-by-block-number-deprecated"},{"title":"List external addresses","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/alerts/webhooks/external-addresses","href":"/api-reference/informational-webhooks/list-external-addresses"},{"title":"Create an external address","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/alerts/webhooks/external-addresses","href":"/api-reference/informational-webhooks/create-an-external-address"},{"title":"Delete an external address","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml delete /custodians/me/alerts/webhooks/external-addresses/{externalAddressId}","href":"/api-reference/informational-webhooks/delete-an-external-address"}]},{"group":"Gas Sponsorship","pages":[{"title":"Get gas sponsors","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/gas-sponsorship/chains","href":"/api-reference/gas-sponsorship/get-gas-sponsors"},{"title":"Update gas sponsorship for a chain","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml patch /custodians/me/gas-sponsorship/chains/{chainId}","href":"/api-reference/gas-sponsorship/update-gas-sponsorship-for-a-chain"},{"title":"Get historical gas sponsorship usage (deprecated)","deprecated":true,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/gas-sponsors/chains/{chainId}/usage","href":"/api-reference/gas-sponsorship/get-historical-gas-sponsorship-usage-deprecated"}]},{"group":"Due","pages":[{"title":"List webhook event types","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/integrations/due/webhooks/events","href":"/api-reference/due/list-webhook-event-types"},{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/integrations/due/webhooks","href":"/api-reference/due/list-webhook-endpoints"},{"title":"Create webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/integrations/due/webhooks","href":"/api-reference/due/create-webhook-endpoint"},{"title":"List webhook deliveries","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/integrations/due/webhooks/{webhookId}/events","href":"/api-reference/due/list-webhook-deliveries"},{"title":"Retry webhook delivery","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/integrations/due/webhooks/{webhookId}/events/{eventId}/retry","href":"/api-reference/due/retry-webhook-delivery"},{"title":"Update webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml post /custodians/me/integrations/due/webhooks/{webhookId}","href":"/api-reference/due/update-webhook-endpoint"},{"title":"Delete webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml delete /custodians/me/integrations/due/webhooks/{webhookId}","href":"/api-reference/due/delete-webhook-endpoint"}]},{"group":"Audit Events","pages":[{"title":"List audit events","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/audit-events","href":"/api-reference/audit-events/list-audit-events"},{"title":"List audit event types","deprecated":null,"version":null,"openapi":"/openapi/custodian-api.yaml get /custodians/me/audit-events/types","href":"/api-reference/audit-events/list-audit-event-types"}]}]},{"group":"Reseller API","pages":[{"group":"Reseller Statistics","pages":[{"title":"Get reseller statistics","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml get /resellers/stats","href":"/api-reference/reseller-statistics/get-reseller-statistics"}]},{"group":"Sub-Custodians","pages":[{"title":"Create a sub-custodian","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml post /resellers/custodians","href":"/api-reference/sub-custodians/create-a-sub-custodian"},{"title":"List sub-custodians","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml get /resellers/custodians","href":"/api-reference/sub-custodians/list-sub-custodians"},{"title":"Suspend a sub-custodian","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml put /resellers/custodians/{custodianId}/suspend","href":"/api-reference/sub-custodians/suspend-a-sub-custodian"},{"title":"Activate a sub-custodian","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml put /resellers/custodians/{custodianId}/activate","href":"/api-reference/sub-custodians/activate-a-sub-custodian"},{"title":"Disable or enable signing for a sub-custodian","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml patch /resellers/custodians/{custodianId}/capabilities","href":"/api-reference/sub-custodians/disable-or-enable-signing-for-a-sub-custodian"}]},{"group":"Sub-Custodian Environments","pages":[{"title":"List sub-custodian environments","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml get /resellers/custodians/{custodianId}/environments","href":"/api-reference/sub-custodian-environments/list-sub-custodian-environments"}]},{"group":"Sub-Custodian API Keys","pages":[{"title":"Create a sub-custodian API key","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml post /resellers/custodians/{custodianId}/environments/{environmentId}/api-keys","href":"/api-reference/sub-custodian-api-keys/create-a-sub-custodian-api-key"},{"title":"Delete a sub-custodian API key","deprecated":null,"version":null,"openapi":"/openapi/reseller-api.yaml delete /resellers/custodians/{custodianId}/environments/{environmentId}/api-keys/{apiKeyId}","href":"/api-reference/sub-custodian-api-keys/delete-a-sub-custodian-api-key"}]}]}]}]},"basePath":"","title":"Create a CCTP transfer - Portal","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}