A JWT signed using the developer's own JWT private key (in the case of JWT authentication), or an end user JWT signed by CDP, encoded in base64. This is used for End User Account APIs.
A JWT signed using your Wallet Secret, encoded in base64. Refer to the
Generate Wallet Token
section of our Authentication docs for more details on how to generate your Wallet Token.
An optional string request header for making requests safely retryable.
When included, duplicate requests with the same key will return identical responses.
Refer to our Idempotency docs for more information on using idempotency keys.
A JWT signed using your Wallet Secret, encoded in base64. Refer to the
Generate Wallet Token
section of our Authentication docs for more details on how to generate your Wallet Token.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Coinbase Developer Documentation","colors":{"primary":"#004cec","light":"#578BFA","dark":"#0052FF"},"logo":{"light":"https://mintcdn.com/coinbase-prod/B68gj-lD9xkJGij4/logos/wordmark-light.svg?fit=max\u0026auto=format\u0026n=B68gj-lD9xkJGij4\u0026q=85\u0026s=0eb5640aeec58541851e1cba9c6ccc8b","dark":"https://mintcdn.com/coinbase-prod/B68gj-lD9xkJGij4/logos/wordmark-dark.svg?fit=max\u0026auto=format\u0026n=B68gj-lD9xkJGij4\u0026q=85\u0026s=53721303b967eaae0304eee4d72b76a4"},"favicon":"https://mintcdn.com/coinbase-prod/kTyZlKSi8mNup8M7/favicon.png?fit=max\u0026auto=format\u0026n=kTyZlKSi8mNup8M7\u0026q=85\u0026s=e20bf52c43e47cfc76215fb56ff3bc09","appearance":{"default":"light"},"navbar":{"links":[{"icon":"discord","href":"https://discord.com/invite/cdp","label":"Get help"}],"primary":{"type":"button","label":"Dev portal","href":"https://portal.cdp.coinbase.com/"}},"footer":{"socials":{"x":"https://x.com/coinbasedev","github":"https://github.com/coinbase","linkedin":"https://www.linkedin.com/company/coinbasedeveloperplatform"},"links":[{"items":[{"label":"Join CDP Discord","href":"https://discord.com/invite/cdp"},{"label":"Status","href":"https://cdpstatus.coinbase.com/"},{"label":"Privacy Policy","href":"https://www.coinbase.com/legal/privacy"}]}]},"seo":{"indexing":"all"},"fonts":{"heading":{"family":"CoinbaseSans","source":"https://mintlify-assets.b-cdn.net/fonts/CoinbaseSans-Regular.woff2","format":"woff2"},"body":{"family":"CoinbaseSans","source":"https://mintlify-assets.b-cdn.net/fonts/CoinbaseSans-Regular.woff2","format":"woff2"}},"integrations":{"amplitude":{"apiKey":"6cf69a22c0014f7608dd967f605ba0e7"},"ga4":{"measurementId":"G-1X60WF4D7F"},"customScripts":[{"src":"https://static-assets.coinbase.com/js/ucpm/v1.0.0.js","strategy":"beforeInteractive"}]},"contextual":{"options":["copy","view","mcp","cursor","vscode","chatgpt","claude","perplexity"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"coinbase-prod","hasAudioNarration":false,"actualSubdomain":"coinbase-prod","customDomains":["docs.cdp.coinbase.com"],"gitSource":{"type":"github","owner":"c3","repo":"cdp-docs","deployBranch":"master","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae22fc056bf94b721c3818c","collectionId":"028c31c4-7d6d-4924-a004-f4111cfb32b3","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae22fc056bf94b721c3818c"},"feedback":{"thumbs":true,"edits":true,"issues":true,"contextualFeedback":{"allowEmail":true}},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae22fc056bf94b721c3818c","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"SDKs","count":1524},{"language":"default","tag":"CRYPTO INFRASTRUCTURE","count":1429},{"language":"default","tag":"CDP SDKs","count":1427},{"language":"default","tag":"API Reference","count":954},{"language":"default","tag":"Frontend","count":795},{"language":"default","tag":"Typescript","count":793},{"language":"default","tag":"Backend","count":632},{"language":"default","tag":"Java","count":599},{"language":"default","tag":"REST API","count":590},{"language":"default","tag":"Docs","count":518}]},"assistantConfig":{"enableAskAiButton":false},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"dropdowns.css","content":".nav-dropdown-content{width:var(--radix-dropdown-menu-trigger-width)}"},{"filePath":"style.css","content":"@font-face{font-family:\"Coinbase Text Medium\";src:url(https://mintlify-assets.b-cdn.net/fonts/coinbase/Coinbase_Text-Medium-web-1.32.woff2) format(\"woff2\");font-weight:500;font-style:normal}.dark li[id=topbar-cta-button]>a>span{background-color:#578bf9!important}.dark li[id=topbar-cta-button]>a>div>span,.dark li[id=topbar-cta-button]>a>div>svg{color:#101521!important}div[data-callout-type=info]{background-color:#f5f8fe!important;color:#0052fe!important;border-color:#ccdcfe!important}div[data-callout-type=info]>div>svg,div[data-callout-type=note]>div>svg{color:#fff!important}div[data-callout-type=info]>div>svg>path,div[data-callout-type=note]>div>svg>path{fill:#0052fe!important}.dark div[data-callout-type=info]{background-color:#013!important;color:#578bf9!important;border-color:#2c406c!important}.dark div[data-callout-type=info]>div>svg>path,.dark div[data-callout-type=note]>div>svg>path{fill:#578bf9!important}div[data-callout-type=note]{background-color:rgba(250,250,250,.5)!important;color:#578bf9!important;border-color:rgba(113,113,122,.2)!important}div[data-callout-type=note]>div>p,div[data-callout-type=note]>div>ul>li{color:#18181b!important}.dark div[data-callout-type=note]>div>p,.dark div[data-callout-type=note]>div>ul>li{color:#e4e4e7!important}.dark div[data-callout-type=note]{background-color:rgba(113,113,122,.1)!important;color:#578bf9!important;border-color:rgba(113,113,122,.3)!important}#\\/{display:none}h1,h2,span{letter-spacing:.02em!important}h5:not(#sidebar-title),h6{font-weight:600!important;margin-top:1rem!important;margin-bottom:.5rem!important}.nav-section-header{font-size:.7rem!important;font-weight:600!important;text-transform:uppercase!important;letter-spacing:.05em!important;color:#6b7280!important;padding:12px 8px 4px!important;margin-bottom:4px!important}.nav-section-header.with-divider{border-top:1px solid #e5e7eb!important;margin-top:8px!important}.dark .nav-section-header{color:#9ca3af!important}.dark .nav-section-header.with-divider{border-top-color:rgba(255,255,255,.1)!important}.version-option:hover{background-color:#f1f5f9!important}.dark .version-option:hover{background-color:#4b5563!important}li[data-group-tag=v1][data-title=\"Server Wallet\"]{display:none!important}body.url-contains-v1 li[data-group-tag=v1][data-title=\"Server Wallet\"],li[data-group-tag=v2][data-title=\"Server Wallet\"]{display:block!important}body.url-contains-v1 li[data-group-tag=v2][data-title=\"Server Wallet\"]{display:none!important}.nav-tag-pill-text[data-nav-tag=v1],.nav-tag-pill-text[data-nav-tag=v2]{cursor:pointer!important;user-select:none!important;display:flex!important;align-items:center!important;padding:2px 8px!important}.nav-tag-pill-text[data-nav-tag=v1]::after,.nav-tag-pill-text[data-nav-tag=v2]::after{color:#004cec!important;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23004cec' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E\");margin-left:4px;padding-top:4px;opacity:.6}#footer>div{padding-top:5rem!important;padding-bottom:4rem!important}.tab-container>ul{margin-bottom:1rem!important}.code-block{margin-top:0!important}button[data-component-part=tab-button]{font-size:1rem!important}@media (min-width:1024px){div[id=content-container]{padding-left:4rem!important;padding-right:1rem!important}#navbar .hidden.lg\\:flex,#sidebar-content{display:flex!important}}#sidebar-title,.dark #sidebar-title{font-family:\"Coinbase Text Medium\",sans-serif!important;color:#111827!important;font-size:.8rem!important;font-weight:500!important}.dark #sidebar-title{color:#e5e7eb!important}img[data-component-part=card-image]{height:12rem;object-fit:cover}.home-demo-cards img[data-component-part=card-image],.learn-demo-cards img[data-component-part=card-image]{height:8rem}.frame img,[class*=Frame] img{border-radius:8px;overflow:hidden}.custom-card-group h1,.custom-card-group h2,.custom-card-group h3,.custom-card-group h4,.custom-card-group h5,.custom-card-group h6{margin-top:0!important;margin-bottom:0!important;font-size:inherit!important;font-weight:inherit!important;line-height:inherit!important}.custom-card-group a,.custom-card-group a:active,.custom-card-group a:hover,.custom-card-group a:visited{text-decoration:none!important;text-decoration-line:none!important}.custom-card-group img{margin-top:0!important;margin-bottom:0!important}.fix-table table{table-layout:fixed!important;width:100%!important}.fix-table table td:first-child,.fix-table table th:first-child{width:60px!important;white-space:nowrap!important}.fix-table table td:nth-child(3),.fix-table table th:nth-child(3){width:130px!important;white-space:nowrap!important}.fix-table table td:nth-child(4),.fix-table table th:nth-child(4){width:50px!important;white-space:nowrap!important}ul.contains-task-list{list-style:none!important;padding-left:1.5rem!important}li.task-list-item{list-style:none!important;padding-left:0!important}li.task-list-item::marker{content:none!important}li.task-list-item input[type=checkbox]{margin-right:.5em!important}li.task-list-item::before{content:none!important;display:none!important}li.task-list-item ul{padding-left:2.5rem!important}"},{"filePath":"supported-networks.css","content":".network-support-table{width:100%;max-width:100%;overflow-x:auto;margin-bottom:1.5rem;-webkit-overflow-scrolling:touch}.network-support-table table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;border-radius:8px;border:1px solid #e5e7eb}.dark .network-support-table table,[data-theme=dark] .network-support-table table{border:1px solid #374151}.evm-table table td:nth-child(1),.evm-table table th:nth-child(1){width:35%}.evm-table table td:nth-child(2),.evm-table table td:nth-child(3),.evm-table table td:nth-child(4),.evm-table table td:nth-child(5),.evm-table table th:nth-child(2),.evm-table table th:nth-child(3),.evm-table table th:nth-child(4),.evm-table table th:nth-child(5){width:9%}.evm-table table td:last-child,.evm-table table th:last-child{width:29%}.non-evm-table table td:nth-child(1),.non-evm-table table th:nth-child(1){width:57.5%}.non-evm-table table td:nth-child(2),.non-evm-table table td:nth-child(3),.non-evm-table table th:nth-child(2),.non-evm-table table th:nth-child(3){width:6.75%}.non-evm-table table td:last-child,.non-evm-table table th:last-child{width:29%}.network-support-table table td:nth-child(n+2):not(:last-child){text-align:center}.network-support-table table tbody tr:has(.category-header){background-color:#f3f4f6!important;border-top:2px solid #e5e7eb!important}.network-support-table table tbody tr:has(.category-header) td{padding:2px 12px!important;font-weight:600!important;border:0!important;color:#111827!important;line-height:20px!important;height:24px!important}.network-support-table table tbody tr:has(.category-header) td:empty{visibility:hidden}.dark .network-support-table table tbody tr:has(.category-header),[data-theme=dark] .network-support-table table tbody tr:has(.category-header){background-color:#374151!important;border-top:2px solid #374151!important}.dark .network-support-table table tbody tr:has(.category-header) td,[data-theme=dark] .network-support-table table tbody tr:has(.category-header) td{color:#f3f4f6!important}.network-support-table table tbody tr:has(.category-header)+tr td{padding-top:4px}.network-support-table table tbody tr:has(.category-header)+tr{border-top:none}.network-support-table table tbody tr:has(.category-header):not(:first-child){border-top:3px solid #e5e7eb}.dark .network-support-table table tbody tr:has(.category-header):not(:first-child),[data-theme=dark] .network-support-table table tbody tr:has(.category-header):not(:first-child){border-top:3px solid #374151}.network-support-table table tbody tr:not(:has(.category-header)):hover{background-color:rgba(0,0,0,.02)}.dark .network-support-table table tbody tr:not(:has(.category-header)):hover,[data-theme=dark] .network-support-table table tbody tr:not(:has(.category-header)):hover{background-color:rgba(255,255,255,.05)}.network-support-table table thead th{font-weight:600;background-color:#f9fafb;border-bottom:2px solid #e5e7eb;text-align:left!important}.network-support-table table thead th:first-child{border-top-left-radius:8px}.network-support-table table thead th:last-child{border-top-right-radius:8px}.network-support-table table tbody tr:last-child td:first-child{border-bottom-left-radius:8px}.network-support-table table tbody tr:last-child td:last-child{border-bottom-right-radius:8px}.dark .network-support-table table thead th,[data-theme=dark] .network-support-table table thead th{background-color:#1f2937;border-bottom:2px solid #374151;text-align:left!important}.network-support-table table td,.network-support-table table th{padding:8px 12px}.network-support-table tbody tr:has(td:first-child img) td,.network-support-table tbody tr:has(td:first-child>img+strong) td{padding-top:0!important;padding-bottom:0!important;height:24px!important;max-height:24px!important;overflow:hidden!important;vertical-align:middle!important;display:table-cell!important}.network-support-table table tbody tr:has(.category-header) td:first-child{text-align:center;font-size:14px;letter-spacing:.5px;text-transform:uppercase}.category-header{display:block;width:100%}.network-support-table td:first-child strong:only-child{display:block;text-transform:uppercase;letter-spacing:.5px;font-weight:700}.network-support-table tr:has(td:first-child img),.network-support-table tr:has(td:first-child svg),.network-support-table tr:has(td:first-child>img+strong),.network-support-table tr:has(td:first-child>strong:only-child),.network-support-table tr:has(td:first-child>svg+strong){background-color:#e5e7eb!important;border-top:2px solid #e5e7eb!important;height:24px!important;max-height:24px!important}.network-support-table tr:has(td:first-child img) td,.network-support-table tr:has(td:first-child svg) td,.network-support-table tr:has(td:first-child>img+strong) td,.network-support-table tr:has(td:first-child>strong:only-child) td,.network-support-table tr:has(td:first-child>svg+strong) td{padding:2px 12px!important;color:#374151!important;font-size:12px!important;line-height:20px!important;height:24px!important}.network-support-table tr:has(td:first-child img) td:first-child,.network-support-table tr:has(td:first-child svg) td:first-child,.network-support-table tr:has(td:first-child>img+strong) td:first-child,.network-support-table tr:has(td:first-child>strong:only-child) td:first-child,.network-support-table tr:has(td:first-child>svg+strong) td:first-child{font-size:12px!important;color:#374151!important;text-transform:uppercase!important;letter-spacing:.8px!important;font-weight:600!important}.dark .network-support-table tr:has(td:first-child img),.dark .network-support-table tr:has(td:first-child svg),.dark .network-support-table tr:has(td:first-child>img+strong),.dark .network-support-table tr:has(td:first-child>strong:only-child),.dark .network-support-table tr:has(td:first-child>svg+strong),[data-theme=dark] .network-support-table tr:has(td:first-child img),[data-theme=dark] .network-support-table tr:has(td:first-child svg),[data-theme=dark] .network-support-table tr:has(td:first-child>img+strong),[data-theme=dark] .network-support-table tr:has(td:first-child>strong:only-child),[data-theme=dark] .network-support-table tr:has(td:first-child>svg+strong){background-color:#1f2937!important;border-top:2px solid #374151!important}.dark .network-support-table tr:has(td:first-child svg) td:first-child,.dark .network-support-table tr:has(td:first-child>strong:only-child) td:first-child,.dark .network-support-table tr:has(td:first-child>svg+strong) td:first-child,[data-theme=dark] .network-support-table tr:has(td:first-child svg) td:first-child,[data-theme=dark] .network-support-table tr:has(td:first-child>strong:only-child) td:first-child,[data-theme=dark] .network-support-table tr:has(td:first-child>svg+strong) td:first-child{color:#e5e7eb!important}.network-support-table tbody tr:first-child:has(td:first-child svg),.network-support-table tbody tr:first-child:has(td:first-child>strong:only-child),.network-support-table tbody tr:first-child:has(td:first-child>svg+strong){border-top:none!important}.network-support-table tr:has(td:first-child a){background-color:transparent!important}.network-support-table tr:has(td:first-child img) img,.network-support-table tr:has(td:first-child>img+strong) img{width:14px!important;height:14px!important;vertical-align:middle!important;margin-right:4px!important;margin-top:0!important;margin-bottom:0!important}.network-support-table tbody tr:has(td:first-child img){height:24px!important;max-height:24px!important;line-height:24px!important}.network-support-table.evm-table tbody tr:nth-child(1):has(td:first-child:has(strong)),.network-support-table.evm-table tbody tr:nth-child(10):has(td:first-child:has(strong)),.network-support-table.evm-table tbody tr:nth-child(14):has(td:first-child:has(strong)),.network-support-table.evm-table tbody tr:nth-child(20):has(td:first-child:has(strong)),.network-support-table.evm-table tbody tr:nth-child(22):has(td:first-child:has(strong)),.network-support-table.evm-table tbody tr:nth-child(24):has(td:first-child:has(strong)),.network-support-table.evm-table tbody tr:nth-child(4):has(td:first-child:has(strong)),.network-support-table.evm-table tbody tr:nth-child(8):has(td:first-child:has(strong)){background-color:#e5e7eb!important}"}],"page":{"pagePath":"api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account","slug":"/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account","pageMetadata":{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/sign/typed-data","title":"Sign EIP-712 typed data via end user EVM account","description":"Signs [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data with the given end user EVM account.","href":"/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Signs \", _jsx(_components.a, {\n href: \"https://eips.ethereum.org/EIPS/eip-712\",\n children: \"EIP-712\"\n }), \" typed data with the given end user EVM account.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/sign/typed-data","title":"Sign EIP-712 typed data via end user EVM account","description":"Signs [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data with the given end user EVM account.","href":"/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/coinbase-prod/6d906736c36798d6/add-scroll-gradient.js","/_mintlify/custom/coinbase-prod/e7f7008f5db24529/ai-assistant-message.js","/_mintlify/custom/coinbase-prod/af45c7ea51975839/dropdowns.js","/_mintlify/custom/coinbase-prod/06f253dee5fa900c/lint-staged.config.js","/_mintlify/custom/coinbase-prod/bef3f7e8e501ccfe/sprig.js"],"openApiReferenceData":{"operation":{"x-audience":"public","summary":"Sign EIP-712 typed data via end user EVM account","description":"Signs [EIP-712](https://eips.ethereum.org/EIPS/eip-712) typed data with the given end user EVM account.","operationId":"signEvmTypedDataWithEndUserAccount","tags":["End User Accounts"],"security":["2f13f596-c63e-4b19-b916-cbb3726cb059","70aba8c3-32db-4b2d-9dad-2904723ae2a3"],"parameters":["ba823253-ef72-44ba-8a38-f870f31e9738","2e6748a9-6017-45f3-ad8a-81a9304a445a","daeda951-ea96-4f85-8294-139c8a0564b4","9cd12e3b-43a3-4c4e-8efe-b49145115dbf","56c20751-14c6-4de1-8f49-906e4c7a000f"],"requestBody":"eda440d3-6ab4-4d3b-a819-1debcc762788","responses":{"200":"0c632ddd-d6f8-43f1-b1a4-a3715fde5caf","400":"ff3102c7-7efa-4d5d-abf2-faba02ea34d0","401":"b4e6ff33-a07e-4d93-8dbc-dda5e1c54ba7","402":"556879e8-4811-42ec-adae-84a15c76e1f4","403":"761b9de1-a339-418a-b5da-7a3807dbde81","404":"d066fc76-5894-4e83-896d-a822a6b30c1e","422":"8a8b8bee-6cf3-4e3e-914f-7d5d9c3c3f4c","500":"f5f3d34a-ced0-4fa6-b7e7-ed55ab9d3c8d","502":"efcfe77a-703c-45b9-a8e8-dfd69d14afa2","503":"8d6dd00f-828c-485f-b3ef-e46d43dce12a"},"method":"post","type":"path","servers":["da928323-701e-4f73-896a-d2ec334766cc"],"path":"/v2/embedded-wallet-api/end-users/{userId}/evm/sign/typed-data","baseUrlOptions":["https://api.cdp.coinbase.com/platform"],"title":"Sign EIP-712 typed data via end user EVM account","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ba823253-ef72-44ba-8a38-f870f31e9738":{"name":"X-Wallet-Auth","in":"header","required":false,"description":"A JWT signed using your Wallet Secret, encoded in base64. Refer to the\n[Generate Wallet Token](https://docs.cdp.coinbase.com/api-reference/v2/authentication#2-generate-wallet-token)\nsection of our Authentication docs for more details on how to generate your Wallet Token.\n","schema":{"type":"string","isRequired":false,"description":"A JWT signed using your Wallet Secret, encoded in base64. Refer to the\n[Generate Wallet Token](https://docs.cdp.coinbase.com/api-reference/v2/authentication#2-generate-wallet-token)\nsection of our Authentication docs for more details on how to generate your Wallet Token.\n","uniqueKey":"","typeLabel":"string"},"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIiwiZXhwIjoxNzAxOTgwMDAwfQ.HWvMTKmCCTxHaxjvZyLaC6UQ6TV3ErTDWBf7zmdH0Lw"},"2e6748a9-6017-45f3-ad8a-81a9304a445a":{"name":"X-Idempotency-Key","in":"header","required":false,"description":"An optional string request header for making requests safely retryable.\nWhen included, duplicate requests with the same key will return identical responses.\nRefer to our [Idempotency docs](https://docs.cdp.coinbase.com/api-reference/v2/idempotency) for more information on using idempotency keys.\n","schema":{"type":"string","maxLength":128,"minLength":1,"isRequired":false,"description":"An optional string request header for making requests safely retryable.\nWhen included, duplicate requests with the same key will return identical responses.\nRefer to our [Idempotency docs](https://docs.cdp.coinbase.com/api-reference/v2/idempotency) for more information on using idempotency keys.\n","uniqueKey":"","typeLabel":"string"},"example":"8e03978e-40d5-43e8-bc93-6894a57f9324"},"daeda951-ea96-4f85-8294-139c8a0564b4":{"name":"userId","description":"The ID of the end user.","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9-]{1,100}$","example":"e051beeb-7163-4527-a5b6-35e301529ff2","isRequired":true,"description":"The ID of the end user.","uniqueKey":"","typeLabel":"string"}},"9cd12e3b-43a3-4c4e-8efe-b49145115dbf":{"name":"X-Developer-Auth","in":"header","required":false,"description":"A JWT signed using your Wallet Secret, encoded in base64. Refer to the\n[Generate Wallet Token](https://docs.cdp.coinbase.com/api-reference/v2/authentication#2-generate-wallet-token)\nsection of our Authentication docs for more details on how to generate your Wallet Token.\n","schema":{"type":"string","isRequired":false,"description":"A JWT signed using your Wallet Secret, encoded in base64. Refer to the\n[Generate Wallet Token](https://docs.cdp.coinbase.com/api-reference/v2/authentication#2-generate-wallet-token)\nsection of our Authentication docs for more details on how to generate your Wallet Token.\n","uniqueKey":"","typeLabel":"string"},"example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIiwiZXhwIjoxNzAxOTgwMDAwfQ.HWvMTKmCCTxHaxjvZyLaC6UQ6TV3ErTDWBf7zmdH0Lw"},"56c20751-14c6-4de1-8f49-906e4c7a000f":{"name":"projectID","in":"query","required":false,"description":"The ID of the CDP Project. Required for end users authenticated using custom auth (i.e. a non-CDP JWT provider).","schema":{"type":"string","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","example":"8e03978e-40d5-43e8-bc93-6894a57f9324","isRequired":false,"description":"The ID of the CDP Project. Required for end users authenticated using custom auth (i.e. a non-CDP JWT provider).","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The 0x-prefixed address of the EVM account belonging to the end user.","example":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","pattern":"^0x[0-9a-fA-F]{40}$","isRequired":true,"uniqueKey":"address","typeLabel":"string"},"typedData":{"type":"object","description":"The message to sign using EIP-712.","properties":{"domain":{"type":"object","description":"The domain of the EIP-712 typed data.","properties":{"name":{"type":"string","description":"The name of the DApp or protocol.","example":"Permit2","uniqueKey":"typedData.domain.name","typeLabel":"string"},"version":{"type":"string","description":"The version of the DApp or protocol.","example":"1","uniqueKey":"typedData.domain.version","typeLabel":"string"},"chainId":{"type":"integer","format":"int64","description":"The chain ID of the EVM network.","example":1,"uniqueKey":"typedData.domain.chainId","typeLabel":"integer\u003cint64>"},"verifyingContract":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The 0x-prefixed EVM address of the verifying smart contract.","example":"0x000000000022D473030F116dDEE9F6B43aC78BA3","uniqueKey":"typedData.domain.verifyingContract","typeLabel":"string"},"salt":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"The optional 32-byte 0x-prefixed hex salt for domain separation.","example":"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef","uniqueKey":"typedData.domain.salt","typeLabel":"string"}},"example":{"name":"Permit2","chainId":1,"verifyingContract":"0x000000000022D473030F116dDEE9F6B43aC78BA3"},"isRequired":true,"uniqueKey":"typedData.domain","typeLabel":"object"},"types":{"type":"object","description":"A mapping of struct names to an array of type objects (name + type).\nEach key corresponds to a type name (e.g., \"`EIP712Domain`\", \"`PermitTransferFrom`\").\n","example":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"PermitTransferFrom":[{"name":"permitted","type":"TokenPermissions"},{"name":"spender","type":"address"},{"name":"nonce","type":"uint256"},{"name":"deadline","type":"uint256"}],"TokenPermissions":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}]},"isRequired":true,"uniqueKey":"typedData.types","typeLabel":"object"},"primaryType":{"type":"string","description":"The primary type of the message. This is the name of the struct in the `types` object that is the root of the message.","example":"PermitTransferFrom","isRequired":true,"uniqueKey":"typedData.primaryType","typeLabel":"string"},"message":{"type":"object","description":"The message to sign. The structure of this message must match the `primaryType` struct in the `types` object.","example":{"permitted":{"token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1000000"},"spender":"0x1111111254EEB25477B68fb85Ed929f73A960582","nonce":"0","deadline":"1716239020"},"isRequired":true,"uniqueKey":"typedData.message","typeLabel":"object"}},"required":["domain","types","primaryType","message"],"example":{"domain":{"name":"Permit2","chainId":1,"verifyingContract":"0x000000000022D473030F116dDEE9F6B43aC78BA3"},"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"PermitTransferFrom":[{"name":"permitted","type":"TokenPermissions"},{"name":"spender","type":"address"},{"name":"nonce","type":"uint256"},{"name":"deadline","type":"uint256"}],"TokenPermissions":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}]},"primaryType":"PermitTransferFrom","message":{"permitted":{"token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1000000"},"spender":"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf","nonce":"123456","deadline":"1717123200"}},"isRequired":true,"uniqueKey":"typedData","typeLabel":"object"},"walletSecretId":{"description":"Required when not using delegated signing. The ID of the Temporary Wallet Secret that was used to sign the X-Wallet-Auth Header.","type":"string","pattern":"^[a-zA-Z0-9-]{1,100}$","example":"e051beeb-7163-4527-a5b6-35e301529ff2","uniqueKey":"walletSecretId","typeLabel":"string"}},"required":["address","typedData"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"address":"0x742d35Cc6634C0532925a3b844Bc454e4438f44e","typedData":{"domain":{"name":"Permit2","chainId":1,"verifyingContract":"0x000000000022D473030F116dDEE9F6B43aC78BA3"},"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"PermitTransferFrom":[{"name":"permitted","type":"TokenPermissions"},{"name":"spender","type":"address"},{"name":"nonce","type":"uint256"},{"name":"deadline","type":"uint256"}],"TokenPermissions":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}]},"primaryType":"PermitTransferFrom","message":{"permitted":{"token":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","amount":"1000000"},"spender":"0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf","nonce":"123456","deadline":"1717123200"}},"walletSecretId":"e051beeb-7163-4527-a5b6-35e301529ff2"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"0c632ddd-d6f8-43f1-b1a4-a3715fde5caf":{"description":"Successfully signed typed data.","content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","description":"The signature of the typed data, as a 0x-prefixed hex string.","example":"0x1b0c9cf8cd4554c6c6d9e7311e88f1be075d7f25b418a044f4bf2c0a42a93e212ad0a8b54de9e0b5f7e3812de3f2c6cc79aa8c3e1c02e7ad14b4a8f42012c2c01b","isRequired":true,"uniqueKey":"signature","typeLabel":"string"}},"required":["signature"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"signature":"0x1b0c9cf8cd4554c6c6d9e7311e88f1be075d7f25b418a044f4bf2c0a42a93e212ad0a8b54de9e0b5f7e3812de3f2c6cc79aa8c3e1c02e7ad14b4a8f42012c2c01b"}}},"exampleType":"generated"}},"exampleType":"generated"},"ff3102c7-7efa-4d5d-abf2-faba02ea34d0":{"description":"Invalid request.","content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"invalid_request":{"title":"invalid_request","value":{"errorType":"invalid_request","errorMessage":"Invalid request. Please check the request body and parameters."}}},"exampleType":"examples"}},"exampleType":"examples"},"b4e6ff33-a07e-4d93-8dbc-dda5e1c54ba7":{"description":"Unauthorized.","x-error-types":["unauthorized"],"content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"unauthorized":{"title":"unauthorized","value":{"errorType":"unauthorized","errorMessage":"The request is not properly authenticated."}}},"exampleType":"examples"}},"exampleType":"examples"},"556879e8-4811-42ec-adae-84a15c76e1f4":{"description":"A payment method is required to complete this operation.","x-error-types":["payment_method_required"],"content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"payment_method_required":{"title":"payment_method_required","value":{"errorType":"payment_method_required","errorMessage":"A valid payment method is required to complete this operation. Please add a payment method to your account at https://portal.cdp.coinbase.com."}}},"exampleType":"examples"}},"exampleType":"examples"},"761b9de1-a339-418a-b5da-7a3807dbde81":{"description":"The request was rejected due to a delegation issue. The errorType field indicates the specific reason.","x-error-types":["forbidden","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled"],"content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"forbidden":{"title":"forbidden","value":{"errorType":"forbidden","errorMessage":"Unable to complete the requested signing or sending operation for this address."}},"delegation_not_found":{"title":"delegation_not_found","value":{"errorType":"delegation_not_found","errorMessage":"Unable to complete this operation. No active delegation grant was found. Create a delegation for this operation and try again."}},"delegation_expired":{"title":"delegation_expired","value":{"errorType":"delegation_expired","errorMessage":"The delegation grant has expired. Create a new delegation grant and retry the request."}},"delegation_revoked":{"title":"delegation_revoked","value":{"errorType":"delegation_revoked","errorMessage":"The delegation grant has been revoked. Please create a new delegation."}},"delegation_not_authorized":{"title":"delegation_not_authorized","value":{"errorType":"delegation_not_authorized","errorMessage":"The delegation grant does not authorize this operation."}},"delegation_not_enabled":{"title":"delegation_not_enabled","value":{"errorType":"delegation_not_enabled","errorMessage":"Delegated signing is not enabled for this project."}}},"exampleType":"examples"}},"exampleType":"examples"},"d066fc76-5894-4e83-896d-a822a6b30c1e":{"description":"Not found.","content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"not_found":{"title":"not_found","value":{"errorType":"not_found","errorMessage":"EVM account with the given address not found."}}},"exampleType":"examples"}},"exampleType":"examples"},"8a8b8bee-6cf3-4e3e-914f-7d5d9c3c3f4c":{"description":"Idempotency key conflict.","x-error-types":["idempotency_error"],"content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"idempotency_error":{"title":"idempotency_error","value":{"errorType":"idempotency_error","errorMessage":"Idempotency key '8e03978e-40d5-43e8-bc93-6894a57f9324' was already used with a different request payload. Please try again with a new idempotency key."}}},"exampleType":"examples"}},"exampleType":"examples"},"f5f3d34a-ced0-4fa6-b7e7-ed55ab9d3c8d":{"description":"Internal server error.","x-error-types":["internal_server_error"],"content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"internal_server_error":{"title":"internal_server_error","value":{"errorType":"internal_server_error","errorMessage":"An internal server error occurred. Please try again later."}}},"exampleType":"examples"}},"exampleType":"examples"},"efcfe77a-703c-45b9-a8e8-dfd69d14afa2":{"description":"Bad gateway.","x-error-types":["bad_gateway"],"content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"bad_gateway":{"title":"bad_gateway","value":{"errorType":"bad_gateway","errorMessage":"Bad gateway. Please try again later."}}},"exampleType":"examples"}},"exampleType":"examples"},"8d6dd00f-828c-485f-b3ef-e46d43dce12a":{"description":"Service unavailable.","x-error-types":["service_unavailable"],"content":{"application/json":{"schema":{"description":"An error response including the code for the type of error and a human-readable message describing the error.","type":"object","properties":{"errorType":{"description":"The code that indicates the type of error that occurred. These error codes can be used to determine how to handle the error.","type":"string","example":"invalid_request","enum":["already_exists","authorization_expired","bad_gateway","capture_expired","client_closed_request","customer_not_authorized","endpoint_unavailable","faucet_limit_exceeded","forbidden","idempotency_error","incompatible_event_types","internal_server_error","invalid_request","invalid_webhook_headers","invalid_webhook_url","invalid_sql_query","invalid_signature","malformed_transaction","not_found","operation_in_progress","payment_method_required","payment_required","settlement_failed","rate_limit_exceeded","request_canceled","service_unavailable","subscription_limit_exceeded","timed_out","unauthorized","unsupported_tos_language","policy_violation","policy_in_use","account_limit_exceeded","network_not_tradable","guest_permission_denied","guest_region_forbidden","guest_transaction_limit","guest_transaction_count","phone_number_verification_expired","otp_verification_code_invalid","otp_verification_destination_mismatch","otp_verification_expired","otp_verification_invalid","otp_verification_not_found","otp_verification_required","document_verification_failed","recipient_allowlist_violation","recipient_allowlist_pending","refund_expired","travel_rules_recipient_violation","source_account_invalid","target_account_invalid","source_account_not_found","target_account_not_found","source_asset_not_supported","target_asset_not_supported","target_email_invalid","target_onchain_address_invalid","transfer_amount_invalid","transfer_asset_not_supported","transfer_quote_expired","insufficient_balance","metadata_too_many_entries","metadata_key_too_long","metadata_value_too_long","travel_rules_field_missing","asset_mismatch","mfa_already_enrolled","mfa_invalid_code","mfa_challenge_not_found","mfa_flow_expired","mfa_required","mfa_not_enrolled","order_quote_expired","order_already_filled","order_already_canceled","account_not_ready","insufficient_liquidity","insufficient_allowance","transaction_simulation_failed","delegation_not_found","delegation_expired","delegation_revoked","delegation_not_authorized","delegation_not_enabled","network_mismatch","already_enabled","payment_session_already_canceled","payment_session_already_authorized","payment_session_action_pending","no_capturable_balance","no_voidable_balance","no_refundable_balance","entity_not_configured_for_payment_acceptance","entity_not_configured_for_top_up","daily_transaction_limit_exceeded","daily_amount_limit_exceeded","stale_attestation","moderation_rejected","mandate_action_pending","mandate_policy_violation","mandate_expired","mandate_canceled","mandate_revoked","mandate_invalid_status"],"x-error-instructions":{"incompatible_event_types":"The `eventTypes` in a webhook subscription belong to different scopes that cannot be combined in a single subscription.\n\n**Steps to resolve:**\n1. Group `eventTypes` by compatible label requirements.\n2. Create a separate webhook subscription for each group.","invalid_webhook_headers":"One or more custom webhook target headers have invalid names or values, duplicate names with different capitalization, or names reserved for delivery metadata and HTTP routing.\n\n**Steps to resolve:**\n1. Check `target.headers` for invalid names, values, and case-insensitive duplicates.\n2. Remove blocked headers such as `Cookie`, `Host`, and `X-Webhook-*`, then retry.","invalid_webhook_url":"The webhook target URL did not pass scheme, host, address, or endpoint checks.\n\n**Steps to resolve:**\n1. Verify `target.url` uses HTTPS and responds to HEAD requests with a 200.\n2. Confirm the endpoint is reachable and responds without a server error, then retry.","subscription_limit_exceeded":"The project or entity has reached the maximum number of webhook subscriptions allowed (100).\n\n**Steps to resolve:**\n1. Delete any webhook subscriptions that are no longer needed.\n2. Retry creating the subscription.","already_exists":"This error occurs when trying to create a resource that already exists.\n\n**Steps to resolve:**\n1. Check if the resource exists before creation\n2. Use GET endpoints to verify resource state\n3. Use unique identifiers/names for resources","authorization_expired":"Returned when an authorization attempt is made after the payment session's authorization deadline has passed. Create a new payment session with a later authorization deadline.","bad_gateway":"This error occurs when the CDP API is unable to connect to the backend service.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","capture_expired":"Returned when a capture attempt is made after the payment session's capture deadline has passed. The payment session can no longer be captured.","client_closed_request":"This error occurs when the client closes the connection before the server can send a response.\n\n**Common causes:**\n- The client timed out waiting for the server response\n- The client application was terminated during a pending request\n- Network interruption caused the client connection to drop\n\n**Steps to resolve:**\n1. Increase client-side timeout settings if applicable\n2. Implement retry logic with exponential backoff for long-running queries\n3. Consider optimizing the request to reduce server processing time","endpoint_unavailable":"This error occurs when a specific endpoint has been temporarily disabled by an operator (e.g. a kill switch). The CDP API as a whole is still healthy; only this endpoint is unavailable. Distinct from `service_unavailable`, which indicates the API itself is down.\n\nRe-enabling is a manual operator action, so the endpoint may remain unavailable for an extended period.\n\n**Steps to resolve:**\n1. Check the [CDP status page](https://cdpstatus.coinbase.com/) for an active incident.\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details","faucet_limit_exceeded":"This error occurs when you've exceeded the faucet request limits.\n\n**Steps to resolve:**\n1. Wait for the time window to reset\n2. Use funds more efficiently in your testing\n\nFor more information on faucet limits, please visit the [EVM Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks) or the [Solana Faucet endpoint](https://docs.cdp.coinbase.com/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet).","customer_not_authorized":"This error occurs when the customer is not currently authorized for one\nor more capabilities required to perform the requested action. This can\nhappen at any point in the customer's lifecycle and may or may not be\nresolvable by the developer.\n\nThe response includes an `unauthorizedCapabilities` field listing the\ncapability code(s) that were not authorized on this request.\n\n**Steps to resolve:**\n1. Fetch the customer with `GET /v2/customers/{customerId}` and inspect\n the `requirements` field. If `requirements.due` is non-empty, submit\n the listed fields via `PUT /v2/customers/{customerId}` and retry.\n2. If `requirements.due` is empty, no further action is available — the\n customer is not currently eligible for this action.","forbidden":"This error occurs when you don't have permission to access the resource.\n\n**Steps to resolve:**\n1. Verify your permissions to access the resource\n2. Ensure that you are the owner of the requested resource","idempotency_error":"This error occurs when an idempotency key is reused with different parameters.\n\n**Steps to resolve:**\n1. Generate a new UUID v4 for each unique request\n2. Only reuse idempotency keys for exact request duplicates\n3. Track used keys within your application\n\n**Example idempotency key implementation:**\n```typescript lines wrap\nimport { v4 as uuidv4 } from 'uuid';\n\nfunction createIdempotencyKey() {\n return uuidv4();\n}\n```","internal_server_error":"This indicates an unexpected error that occurred on the CDP servers.\n\n**Important**: If you encounter this error, please note that your operation's status should be treated as unknown by your application, as it could have been a success within the CDP back-end.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - Your correlation ID\n - Timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","invalid_request":"This error occurs when the request is malformed or contains invalid data, including issues with the request body, query parameters, path parameters, or headers.\n\n**Steps to resolve:**\n1. Check all required fields and parameters are present\n2. Ensure request body (if applicable) follows the correct schema\n3. Verify all parameter formats match the API specification:\n - Query parameters\n - Path parameters\n - Request headers\n4. Validate any addresses, IDs, or other formatted strings meet requirements\n\n**Common validation issues:**\n- Missing required parameters\n- Invalid parameter types or formats\n- Malformed JSON in request body\n- Invalid enum values\n\n#### Transfer-specific validation errors\n\nThe following transfer validation scenarios return `errorType: \"invalid_request\"`. Use the `errorMessage` field to identify the specific case.\n\n| Scenario | Example `errorMessage` |\n|----------|----------------------|\n| Source account ID is malformed | `\"source is invalid.\"` |\n| Target account ID is malformed | `\"target is invalid.\"` |\n| Source account does not exist | `\"source not found.\"` |\n| Target account does not exist | `\"target not found.\"` |\n| Asset not supported at source | `\"source is not supported.\"` |\n| Asset not supported at target | `\"target is not supported.\"` |\n| Target email address is malformed | `\"target has an invalid email format.\"` |\n| Target onchain address is invalid for network | `\"The recipient address is invalid for the selected network.\"` |\n| Asset not supported for this transfer route | `\"Transfer asset pair is not supported.\"` |\n| Insufficient balance | `\"Insufficient funds to complete this transfer.\"` |\n| Asset mismatch between request fields | `\"Currency mismatch in request.\"` |\n| Metadata has too many keys | `\"Metadata has too many keys. Up to 10 key/value pairs are permitted.\"` |\n| Metadata key exceeds length limit | `\"Metadata key is too long. Each key must be less than or equal to 40 characters.\"` |\n| Metadata value exceeds length limit | `\"Metadata value is too long. Each value must be less than or equal to 500 characters.\"` |\n| Travel rule fields missing | `\"Travel rule information is incomplete. Missing fields: ...\"` |\n| Recipient address not in account allowlist | `\"Your coinbase account allowlist does not include this address. Please update your allowlist at https://www.coinbase.com/settings/allowlist\"` |","invalid_sql_query":"This error occurs when the SQL query is invalid or not allowed.\n\n**Common causes:**\n- Using non-SELECT SQL statements (INSERT, UPDATE, DELETE, etc.)\n- Invalid table or column names\n- Syntax errors in SQL query\n- Query exceeds character limit\n- Too many JOIN operations","invalid_signature":"This error occurs when the signature provided for the given user operation is invalid.\n\n**Steps to resolve:**\n1. Verify the signature was generated by the correct owner account\n2. Ensure the signature corresponds to the exact user operation hash\n3. Check that the signature format matches the expected format\n4. Confirm you're using the correct network for the Smart Account\n\n**Common causes:**\n- Using wrong owner account to sign\n- Signing modified/incorrect user operation data\n- Malformed signature encoding\n- Network mismatch between signature and broadcast","malformed_transaction":"This error occurs when the transaction data provided is not properly formatted or is invalid.\n\n**Steps to resolve:**\n1. Verify transaction encoding:\n - **EVM networks**: Check RLP encoding is correct\n - **Solana**: Validate base64 encoding\n2. Ensure all required transaction fields are present\n3. Validate transaction parameters are within acceptable ranges\n4. Check that the transaction type is supported on the target network\n\n**Common causes:**\n- Invalid hex encoding for EVM transactions\n- Missing required transaction fields\n- Incorrect parameter formats\n- Unsupported transaction types\n- Network-specific transaction format mismatches","not_found":"This error occurs when the resource specified in your request doesn't exist or you don't have access to it.\n\n**Steps to resolve:**\n1. Verify the resource ID/address/account exists\n2. Check your permissions to access the resource\n3. Ensure you're using the correct network/environment\n4. Confirm the resource hasn't been deleted\n\n**Common causes:**\n- Mistyped addresses\n- Accessing resources from the wrong CDP project\n- Resource was deleted or hasn't been created yet","operation_in_progress":"This error occurs when another operation of the same kind is already in progress for\nthe resource, and the request must wait for it to complete.\n\n**Steps to resolve:**\n1. Wait for the in-progress operation to complete (typically under 30 seconds)\n2. Once complete, use the resource's GET endpoint to read its state instead of\n retrying the create\n\n**Common causes:**\n- Retrying a create whose previous attempt is still being processed\n- Concurrent duplicate requests for the same resource","payment_method_required":"This error occurs when a payment method is required to complete the requested operation but none is configured or available.\n\n**Steps to resolve:**\n1. Add a valid payment method to your account using the [CDP Portal](https://portal.cdp.coinbase.com)\n2. Ensure your payment method is valid and not expired\n\n**Common causes:**\n- No payment method configured on the account\n- Payment method is expired","payment_required":"This error occurs when an x402 payment is required to access the requested resource.\n\n**Steps to resolve:**\n1. Include a valid x402 payment header in your request\n2. Ensure the payment meets the resource's pricing requirements","settlement_failed":"This error occurs when an x402 payment was verified but settlement on-chain failed.\n\n**Steps to resolve:**\n1. Retry the request with a new payment\n2. Ensure the payment asset has sufficient balance for settlement","rate_limit_exceeded":"This error occurs when you've exceeded the API rate limits.\n\n**Steps to resolve:**\n1. Implement exponential backoff\n2. Cache responses where possible\n3. Wait for rate limit window to reset\n\n**Best practices:**\n```typescript lines wrap\nasync function withRetry(fn: () => Promise\u003cany>) {\n let delay = 1000;\n while (true) {\n try {\n return await fn();\n } catch (e) {\n if (e.errorType === \"rate_limit_exceeded\") {\n await sleep(delay);\n delay *= 2;\n continue;\n }\n throw e;\n }\n }\n}\n```","request_canceled":"This error occurs when the client cancels an in-progress request before it completes.\n\n**Steps to resolve:**\n1. Check client-side timeout configurations\n2. Review request cancellation logic in your code\n3. Consider increasing timeout thresholds for long-running operations\n4. Implement request tracking to identify premature cancellations\n\n**Best practices:**\n```typescript lines wrap\nasync function withTimeout\u003cT>(promise: Promise\u003cT>, timeoutMs: number): Promise\u003cT> {\n const timeout = new Promise((_, reject) => {\n setTimeout(() => {\n reject(new Error(\"Operation timed out\"));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([promise, timeout]);\n } catch (error) {\n // Handle timeout or cancellation\n throw error;\n }\n}\n```","service_unavailable":"This error occurs when the CDP API is temporarily unable to handle requests due to maintenance or high load.\n\n**Steps to resolve:**\n1. Retry your request after a short delay\n2. If persistent, contact CDP support with:\n - The timestamp of the error\n - Request details\n3. Consider implementing retry logic with an exponential backoff\n\n**Note:** These errors are automatically logged and monitored by CDP.","timed_out":"This error occurs when a request exceeds the maximum allowed processing time.\n\n**Steps to resolve:**\n1. Break down large requests into smaller chunks (if applicable)\n2. Implement retry logic with exponential backoff\n3. Use streaming endpoints for large data sets\n\n**Example retry implementation:**\n```typescript lines wrap\nasync function withRetryAndTimeout\u003cT>(\n operation: () => Promise\u003cT>,\n maxRetries = 3,\n timeout = 30000,\n): Promise\u003cT> {\n let attempts = 0;\n while (attempts \u003c maxRetries) {\n try {\n return await Promise.race([\n operation(),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error(\"Timeout\")), timeout)\n ),\n ]);\n } catch (error) {\n attempts++;\n if (attempts === maxRetries) throw error;\n // Exponential backoff\n await new Promise(resolve =>\n setTimeout(resolve, Math.pow(2, attempts) * 1000)\n );\n }\n }\n throw new Error(\"Max retries exceeded\");\n}\n```","unauthorized":"This error occurs when authentication fails.\n\n**Steps to resolve:**\n1. Verify your CDP API credentials:\n - Check that your API key is valid\n - Check that your Wallet Secret is properly configured\n2. Validate JWT token:\n - Not expired\n - Properly signed\n - Contains required claims\n3. Check request headers:\n - Authorization header present\n - X-Wallet-Auth header included when required\n\n**Security note:** Never share your Wallet Secret or API keys.","unsupported_tos_language":"A submitted Terms of Service acceptance used a `language` that is not published for the referenced `versionId`.\n\n**Steps to resolve:**\n1. Read `Customer.requirements.tos.tosVersions[]` and find the entry whose `versionId` matches your acceptance.\n2. Choose a `language` from that entry's `languages` list (BCP 47 tags).\n3. Retry with `tosAcceptances[].language` set to a supported tag.","policy_in_use":"This error occurs when trying to delete a Policy that is currently in use by at least one project or account.\n\n**Steps to resolve:**\n1. Update project or accounts to remove references to the Policy in question.\n2. Retry your delete request.","network_not_tradable":"This error occurs when the selected asset cannot be purchased on the selected network in the user's location.\n\n**Steps to resolve:**\n1. Verify the asset is tradable on the selected network\n2. Check the user's location to ensure it is allowed to purchase the asset on the selected network\n\n**Common causes:**\n- Users in NY are not allowed to purchase USDC on any network other than Ethereum","guest_permission_denied":"This error occurs when the user is not allowed to complete onramp transactions as a guest.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_region_forbidden":"This error occurs when guest onramp transactions are not allowed in the user's region.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","guest_transaction_limit":"This error occurs when the user has reached the weekly guest onramp transaction limit.\n\n**Steps to resolve:**\n1. Inform the user they have reached their weekly limit and will have to wait until next week.","guest_transaction_count":"This error occurs when the user has reached the lifetime guest onramp transaction count limit.\n\n**Steps to resolve:**\n1. Redirect the user to create a Coinbase account to buy and send crypto.","phone_number_verification_expired":"This error occurs when the user's phone number verification has expired. Use of guest Onramp requires the user's\nphone number to be verified every 60 days.\n\n**Steps to resolve:**\n1. Re-verify the user's phone number via OTP.\n2. Retry the request with the phoneNumberVerifiedAt field set to new verification timestamp.","otp_verification_destination_mismatch":"The `phoneNumber` or `email` on the order does not match the `destination` that was verified.\n\n**Steps to resolve:**\n1. Ensure the `phoneNumber` or `email` field on the order matches the `destination` used during verification.\n2. If the value changed, complete a new verification for the updated phone number or email.","otp_verification_expired":"The `smsVerificationId` or `emailVerificationId` provided has expired.\nVerification IDs are valid for 60 days after successful OTP submission.\n\n**Steps to resolve:**\n1. Complete a new verification flow for the user.\n2. Use the new verification ID when creating orders.","otp_verification_code_invalid":"This error occurs when the OTP code submitted to complete a verification is incorrect or has expired\n(the 10-minute OTP window has elapsed).\n\n**Steps to resolve:**\n1. Ask the user to re-enter the code.\n2. If the OTP window has expired, start a new verification flow.","otp_verification_invalid":"This error occurs when the verification record exists but is not in a usable state for the requested operation.\n\n**Common causes:**\n- The verification is still pending (OTP not yet submitted successfully).\n- The verification has been revoked.\n- The verification channel does not match the expected field (`smsVerificationId` or `emailVerificationId`).\n\n**Steps to resolve:**\n1. Complete a new verification flow and retry.","otp_verification_not_found":"The provided SMS or email verification ID does not correspond to any verification record.\n\n**Steps to resolve:**\n1. Ensure you are passing the correct verification ID as `smsVerificationId` or `emailVerificationId`.\n2. If the issue persists, complete a new verification flow.","otp_verification_required":"An SMS or email verification ID is required on order creation but none was provided.\n\n**Steps to resolve:**\n1. Verify the user's phone number and email before creating an order.\n2. Pass the returned verification IDs as `smsVerificationId` and `emailVerificationId` when creating orders.","document_verification_failed":"This error occurs when the user has not verified their identity for their coinbase.com account.\n**Steps to resolve:**\n1. Verify your coinbase account identity with valid documents at https://www.coinbase.com/settings/account-levels.","recipient_allowlist_violation":"This error occurs when the user is not allowed to receive funds at this address, according to their coinbase account allowlist.\n**Steps to resolve:**\n1. Either disable the allowlist or add the wallet address at https://www.coinbase.com/settings/allowlist\n2. Wait approximately 2 days for updates to take effect.","recipient_allowlist_pending":"This error occurs when the user is not allowed to receive funds at this address, because changes to their coinbase account allowlist are pending.\n**Steps to resolve:**\n1. Wait approximately 2 days for updates to take effect.","refund_expired":"Returned when a refund attempt is made after the payment session's refund deadline has passed. The payment session can no longer be refunded.","travel_rules_recipient_violation":"This error occurs when the user is not allowed to receive funds at this address, because it violates travel rules.\n**Steps to resolve:**\n1. Ensure your desired transfer is not blocked by local travel regulations.","mfa_already_enrolled":"This error occurs when attempting to enroll in an MFA method that the user has already enrolled in.\n\n**Steps to resolve:**\n1. Check if the user is already enrolled in the MFA method before initiating enrollment\n2. To update or reset MFA, remove the existing enrollment first (if supported)\n3. Use a different MFA method if multiple options are available","mfa_invalid_code":"This error occurs when the MFA code provided is incorrect or has already been used.\n\n**Steps to resolve:**\n1. Verify the user entered the correct code from their authenticator app\n2. Ensure the code is current (TOTP codes expire after 30 seconds)\n3. Check that the device time is synchronized correctly\n4. Ask the user to generate a new code and try again\n\n**Common causes:**\n- Typing errors in the 6-digit code\n- Using an expired TOTP code\n- Device clock drift on user's authenticator app\n- Attempting to reuse a previously submitted code","mfa_challenge_not_found":"This error occurs when the challenge named by `X-Mfa-Challenge-Id` is unknown to the server or was already consumed by a failed submit attempt. This is distinct from `mfa_flow_expired`, which indicates the flow timed out.\n\n**Possible resolutions**\n- Pass the exact challenge ID from the `X-Mfa-Challenge-Id` header of the prior `403 mfa_required` response\n- If the user failed MFA verification (e.g. by entering the wrong OTP), re-initiate the MFA flow to obtain a fresh challenge\n\n**Common causes:**\n- Reusing a challenge after a failed submit attempt\n- A client bug sending a challenge from a different flow or user","mfa_flow_expired":"This error occurs when the MFA enrollment or verification session has expired.\n\n**Steps to resolve:**\n1. Restart the MFA enrollment or verification flow\n2. Complete the flow within the allowed time window (typically 5 minutes)\n3. Ensure the user doesn't leave the flow idle for extended periods\n\n**Note:** MFA sessions expire automatically for security purposes.","mfa_required":"This error occurs when attempting to perform a sensitive operation that requires MFA verification, but the user has not completed MFA verification.\n\n**Steps to resolve:**\n1. Initiate the MFA verification flow using the `/mfa/verify/{mfaMethod}/init` endpoint\n2. Prompt the user to enter their MFA code\n3. Submit the verification using the `/mfa/verify/{mfaMethod}/submit` endpoint\n4. Use the returned access token with MFA claim for the sensitive operation\n5. Retry the original request with the new MFA-verified token\n\n**Operations requiring MFA:**\n- Transactions Sign/Send\n- Key export\n- Account management actions (when configured)","mfa_not_enrolled":"This error occurs when attempting to verify MFA for a user who has not enrolled in any MFA method.\n\n**Steps to resolve:**\n1. Check if the user has enrolled in MFA before attempting verification\n2. Guide the user through MFA enrollment first using the `/mfa/enroll/{mfaMethod}/init` endpoint\n3. Complete enrollment before requiring MFA verification","source_account_invalid":"This error occurs when the source account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account ID belongs to your CDP entity\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","target_account_invalid":"This error occurs when the target account specified in the transfer request is invalid or malformed.\n\n**Steps to resolve:**\n1. Verify the account ID format is correct (e.g., `account_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`)\n2. Ensure the account exists and can receive funds\n3. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`\n\n**Common causes:**\n- Malformed account ID\n- Typo in the account ID","source_account_not_found":"This error occurs when the source account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","target_account_not_found":"This error occurs when the target account specified in the transfer does not exist.\n\n**Steps to resolve:**\n1. Verify the account ID exists by calling `GET /v2/accounts/{accountId}` or `GET /v2/accounts`","source_asset_not_supported":"This error occurs when the asset specified in the transfer source is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the source account type\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n\n**Common causes:**\n- Unsupported asset for the transfer route\n- Incorrect asset symbol","target_asset_not_supported":"This error occurs when the asset specified in the transfer target is not supported for this transfer type.\n\n**Steps to resolve:**\n1. Check the list of supported assets for the target\n2. Verify the asset symbol is correctly specified (e.g., `usdc`, `usdt`)\n3. Ensure the target can receive this asset type\n\n**Common causes:**\n- Asset not supported by the target\n- Unsupported conversion between source and target assets","target_email_invalid":"This error occurs when the email address specified as the transfer target is invalid.\n\n**Steps to resolve:**\n1. Verify the email address format is valid (e.g., `user@example.com`)\n2. Check for typos in the email address\n3. Ensure the email domain is valid\n\n**Common causes:**\n- Invalid email format\n- Missing @ symbol or domain\n- Typo in the email address","target_onchain_address_invalid":"This error occurs when the onchain address specified as the transfer target is invalid for the specified network.\n\n**Steps to resolve:**\n1. Ensure the network is supported for the transfer type\n2. Verify the address format matches the target network\n3. Ensure you haven't mixed up addresses from different networks\n\n**Common causes:**\n- Network not supported for the transfer type\n- Address format doesn't match network\n- Address from a different blockchain network","transfer_amount_invalid":"This error occurs when the transfer amount is invalid.\n\n**Steps to resolve:**\n1. Ensure the amount is a positive number and greater than $1 USD equivalent amount\n2. Verify the amount format is a valid decimal string (e.g., `\"100.50\"`)\n3. Check the number of decimal places for the asset\n\n**Common causes:**\n- Zero or negative amount\n- Too many decimal places for the asset\n- Amount below minimum threshold ($1 USD equivalent amount)","transfer_asset_not_supported":"This error occurs when the asset specified for the transfer is not supported.\n\n**Steps to resolve:**\n1. Check the list of supported assets for transfers\n2. Verify the asset symbol is correctly specified\n3. Ensure the asset is supported for the transfer route (source → target)\n\n**Common causes:**\n- Asset not supported for transfers\n- Incorrect asset symbol","transfer_quote_expired":"This error occurs when the transfer quote has expired. Quotes are valid for a limited time.\n\n**Steps to resolve:**\n1. Create a new transfer to obtain a fresh quote\n2. Execute the transfer promptly after creation\n\n**Common causes:**\n- Too much time elapsed between creating and executing the transfer","insufficient_balance":"This error occurs when the source account does not have enough funds to complete the transfer including fees.\n\n**Steps to resolve:**\n1. Check the source account balance\n2. Ensure the balance covers both the transfer amount and any fees\n3. Consider using `amountType: \"source\"` to transfer the maximum available amount minus fees\n4. Add funds to the source account if needed\n\n**Common causes:**\n- Transfer amount exceeds available balance\n- Not accounting for transfer fees\n- Pending transactions reducing available balance","metadata_too_many_entries":"This error occurs when the transfer metadata contains more entries than allowed.\n\n**Steps to resolve:**\n1. Reduce the number of metadata entries (maximum 10 allowed)\n2. Consolidate related data into fewer keys\n3. Store additional data externally and reference it with a single metadata entry\n\n**Limits:**\n- Maximum entries: 10","metadata_key_too_long":"This error occurs when a metadata key exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata key to 40 characters or less\n2. Use abbreviations or shorter naming conventions\n3. Consider using a key-value structure where the value contains the longer identifier\n\n**Limits:**\n- Maximum key length: 40 characters","metadata_value_too_long":"This error occurs when a metadata value exceeds the maximum allowed length.\n\n**Steps to resolve:**\n1. Shorten the metadata value to 500 characters or less\n2. Store longer data externally and reference it with a shorter identifier\n3. Consider compressing or encoding the data if appropriate\n\n**Limits:**\n- Maximum value length: 500 characters","travel_rules_field_missing":"This error occurs when required travel rule fields are missing from the transfer request.\n\n**Steps to resolve:**\n1. Include the `travelRule` object in your transfer request\n2. Supply the required missing fields prompted by the error message\n3. Review the travel rule requirements for your jurisdiction\n\nNote: Required fields may vary by region.","asset_mismatch":"This error occurs when the assets specified in the transfer are incompatible or don't match expected values.\n\n**Steps to resolve:**\n1. Ensure the `asset` field matches either the source or target asset\n2. Verify that the source and target assets are compatible for conversion (if different)\n3. Check that the asset symbols are correctly specified\n\n**Common causes:**\n- Transfer asset doesn't match source or target\n- Attempting an unsupported asset conversion\n- Typo in asset symbols","order_quote_expired":"This error occurs when attempting to execute an order whose quote has expired.\n\n**Steps to resolve:**\n1. Create a new order with `execute: false` to get an updated quote.\n2. Execute the new order before the quote expires (check the `expiresAt` field).\n3. Alternatively, create a new order with `execute: true` to skip the quote step and execute immediately.","order_already_filled":"This error occurs when attempting to cancel or modify an order that has already been filled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. A filled order cannot be canceled or re-executed.","order_already_canceled":"This error occurs when attempting to cancel or execute an order that has already been canceled.\n\n**Steps to resolve:**\n1. Check the current status of the order using `GET /v2/orders/{orderId}`.\n2. Create a new order if you still want to trade.","account_not_ready":"This error occurs when an operation is attempted on an account that is still being provisioned.\n\n**Steps to resolve:**\n1. Wait a few moments and retry the request\n2. If the error persists, the account may still be completing setup — retry with exponential backoff","insufficient_liquidity":"This error occurs when no swap route is available for the requested token pair or amount.\n\n**Steps to resolve:**\n1. Try a smaller `fromAmount` — large orders may exceed available liquidity\n2. Try a different token pair\n3. Retry after a short delay; liquidity conditions change with market activity","insufficient_allowance":"This error occurs when the taker has not approved the Permit2 contract to spend the `fromToken`\non their behalf. ERC-20 swaps require a Permit2 allowance. Native ETH swaps do not.\n\n**Steps to resolve:**\n1. Submit an ERC-20 `approve` transaction on the `fromToken` contract, granting the Permit2\n contract (`0x000000000022D473030F116dDEE9F6B43aC78BA3`) an allowance of at least `fromAmount`\n2. Wait for the approval transaction to be confirmed on-chain\n3. Retry the swap\n\n**Example:**\n```typescript lines wrap\n// Approve Permit2 to spend fromToken\nawait walletClient.writeContract({\n address: fromToken,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [\"0x000000000022D473030F116dDEE9F6B43aC78BA3\", fromAmount],\n});\n```","transaction_simulation_failed":"This error occurs when the pre-broadcast simulation of the swap transaction predicted a revert.\nNo transaction was submitted and no gas was spent.\n\n**Common causes:**\n- The on-chain price moved past the `slippageBps` tolerance between the price estimate and execution\n- Taker balance changed between the price estimate and execution\n\n**Steps to resolve:**\n1. Retry immediately — prices change quickly and a new quote may succeed\n2. Increase `slippageBps` if retries continue to fail (e.g. from 100 to 200)\n3. For large swaps, consider splitting into smaller amounts to reduce price impact","delegation_not_found":"This error occurs when a delegated signing operation is attempted but no active\ndelegation grant exists for the end user (or account).\n\n**Steps to resolve:**\n1. Create a delegation grant using `createDelegationForEndUser` (user-scoped)\n or `createDelegationForEndUserAccount` (account-scoped) before calling\n the signing or sending operation\n2. If you previously created a grant, it may have expired or been revoked —\n in those cases you would receive a `delegation_expired` or\n `delegation_revoked` error instead\n3. For account-scoped grants, verify the address in the request matches the\n granted address (EVM addresses are compared case-insensitively;\n Solana addresses must match exactly)","delegation_expired":"This error occurs when the delegation grant used for signing has expired.\nDelegation grants have a limited lifetime set at creation.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Retry the signing operation with the new grant active\n3. Consider creating grants with a longer TTL if expiry is frequent","delegation_revoked":"This error occurs when the delegation grant has been explicitly revoked.\n\n**Steps to resolve:**\n1. Create a new delegation grant using `createDelegationForEndUser` or\n `createDelegationForEndUserAccount`\n2. Confirm with the end user before recreating, since revocation is\n typically intentional","delegation_not_authorized":"This error occurs when a delegation grant exists but does not authorize the\nrequested operation.\n\n**Steps to resolve:**\n1. For account-scoped grants, verify the signing address matches the address\n the grant was created for\n2. Check that the operation is permitted for delegated signing on your project\n3. Create a grant with the correct scope if needed","delegation_not_enabled":"This error occurs when delegated signing is attempted on a project that has\nnot enabled the feature.\n\n**Steps to resolve:**\n1. Enable delegated signing in your project configuration via the CDP Portal\n2. Contact support if you believe delegated signing should already be enabled\n for your project","network_mismatch":"This error occurs when the requested operation specifies a network on which the\ntarget resource is not deployed or not available.\n\n**Steps to resolve:**\n1. Use the network the resource was originally created or deployed on\n2. Check the resource metadata to confirm the correct network\n\n**Common causes:**\n- Specifying `base` for a resource that only exists on `base-sepolia` (or vice versa)\n- Cross-network operation attempted on a resource scoped to a single network","already_enabled":"This error occurs when the requested operation cannot be performed because\nthe capability is already in the desired state.\n\n**Steps to resolve:**\n1. Check the current state of the resource before attempting the operation\n2. No action is needed if the resource is already in the desired state\n\n**Common causes:**\n- Calling an enable endpoint on a resource that already has the feature enabled","payment_session_already_canceled":"This error occurs when an action is attempted on a payment session that has already been canceled.\n\n**Steps to resolve:**\n1. Create a new payment session to proceed with the payment flow","payment_session_already_authorized":"This error occurs when attempting to authorize a payment session that has already been authorized.\n\n**Steps to resolve:**\n1. Check the payment session status — it is already authorized\n2. Proceed to capture, void, or other post-authorization actions as needed","payment_session_action_pending":"This error occurs when another action is already in progress for the payment session.\n\n**Steps to resolve:**\n1. Wait for the current action to complete before retrying\n2. Check the payment session status to confirm the current action result","no_capturable_balance":"This error occurs when there is no remaining balance available to capture on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session status and previously captured amounts\n2. Ensure the session was authorized and has uncaptured funds remaining","no_voidable_balance":"This error occurs when there is no held balance remaining to void on the payment session.\n\n**Steps to resolve:**\n1. Verify the payment session has an authorized but uncaptured balance\n2. Check whether the session has already been fully captured or voided","no_refundable_balance":"This error occurs when the payment session has no captured amount available to refund.\n\n**Steps to resolve:**\n1. Verify the payment session has been previously captured\n2. Check that the session has not already been fully refunded","entity_not_configured_for_payment_acceptance":"This error occurs when the entity is not configured to accept payments.\n\n**Steps to resolve:**\n1. Contact support to enable payment acceptance for the entity","entity_not_configured_for_top_up":"This error occurs when Top-Up is disabled for the entity or required Top-Up configuration is missing or invalid.\n\n**Steps to resolve:**\n1. Contact support or your Coinbase representative to enable Top-Up or correct the entity's Top-Up configuration","daily_transaction_limit_exceeded":"This error occurs when the daily transaction limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","daily_amount_limit_exceeded":"This error occurs when the daily authorization amount limit has been exceeded.\n\n**Steps to resolve:**\n1. Wait until the next day when the daily limit resets\n2. Contact support for questions about your limit","stale_attestation":"The platform attestation (iOS App Attest assertion or Android Play Integrity token) was\ngenerated against a challenge that has since expired. The request was well-formed, but\nthe challenge is no longer valid.\n\n**Steps to resolve:**\n1. Call [Create Onramp Mobile Challenge](#operation/createOnrampMobileChallenge) to obtain\n a fresh challenge.\n2. Re-run the platform attestation flow against the new challenge.\n3. Submit the new attestation to\n [Create Onramp Mobile Session](#operation/createOnrampMobileSession) promptly —\n challenges are short-lived.\n\n**Common causes:**\n- Too much time elapsed between obtaining the challenge and submitting the attestation.","moderation_rejected":"The uploaded image failed content moderation and will not be served.\n\n**Steps to resolve:**\n1. Upload a different image that complies with content policies.","mandate_action_pending":"This error occurs when an approval or revocation is already in progress for the mandate.\nGet wallet approval options, approve a mandate, get wallet revocation options, revoke\na mandate, and authorize a payment session with a mandate all return this while an\naction is in flight.\n\n**Steps to resolve:**\n1. Wait for the in-flight approval or revocation to succeed or fail\n2. Check the mandate `status`, then retry the request","mandate_policy_violation":"This error occurs only when the request breaches the mandate policy: the charge\nexceeds `maxPerAuthorization` or `maxPerPeriod`, or an approval is rejected\nbecause the payer's available balance is below `minSetupBalance`.\n\n**Steps to resolve:**\n1. Lower the charge, raise the mandate policy, or fund the payer above `minSetupBalance`\n2. Retry the request","mandate_expired":"This error occurs when the mandate is past its `expiresAt` and can no longer be used.\nAuthorization, approve a mandate, and get wallet approval options return this error.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the expired mandate","mandate_canceled":"This error occurs when `canceledAt` is set. Authorization, approve a mandate,\nand get wallet approval options return this. If `revokedAt` is also set, those\noperations return `mandate_revoked` instead.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the canceled mandate","mandate_revoked":"This error occurs when the mandate's on-chain spending allowance has been\nremoved (`revokedAt` is set, status `revocation_succeeded`).\n\nAuthorization, approve a mandate, and get wallet approval options return this\nwhen `revokedAt` is set, including when `canceledAt` is also set. Get wallet\nrevocation options and revoke a mandate also return this when the allowance\nwas already removed. Cancel a mandate returns this: a fully revoked mandate\ncannot be canceled. Canceling an already-canceled mandate is a no-op and\nreturns the mandate.\n\n**Steps to resolve:**\n1. Create a new mandate if the customer should continue\n2. Do not retry the request against the revoked mandate","mandate_invalid_status":"This error occurs when the mandate's status does not satisfy the operation,\nand a more specific code does not apply. `errorMessage` names the status the\noperation expected.\n\nCheck the specific codes first: `mandate_canceled`, `mandate_revoked`,\n`mandate_expired`, and `mandate_action_pending`.\n\nApprove a mandate and get wallet approval options require `created` or\n`approval_failed` after those checks. `approval_succeeded`,\n`revocation_failed`, and any other remaining status return this. Authorize a\npayment session requires `approval_succeeded`.\nRevoke a mandate and get wallet revocation options return this when\n`approvedAt` was never set, so no spending allowance exists. That is separate\nfrom `mandate_revoked`, which applies only after `revokedAt` is set.\n\n**Steps to resolve:**\n1. Read `errorMessage` for the status this operation requires\n2. Move the mandate to that status, or create a new mandate"},"isRequired":true,"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"errorMessage":{"description":"The error message.","type":"string","example":"Unable to create EVM account","isRequired":true,"uniqueKey":"errorMessage","typeLabel":"string"},"correlationId":{"description":"A unique identifier for the request that generated the error. This can be used to help debug issues with the API.","type":"string","example":"41deb8d59a9dc9a7-IAD","uniqueKey":"correlationId","typeLabel":"string"},"errorLink":{"type":"string","description":"A link to the corresponding error documentation.","format":"uri","maxLength":2048,"minLength":11,"pattern":"^https?://.*$","example":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request","uniqueKey":"errorLink","typeLabel":"string\u003curi>"},"unauthorizedCapabilities":{"description":"The capability code(s) that were not authorized for the customer on\nthis request. Present only when `errorType` is\n`customer_not_authorized`; absent for every other error type.\n\nUse this list to render onboarding UX for the listed capabilities, or\nfetch `GET /v2/customers/{customerId}` and inspect each entry's\n`status` / `requirements` to discover what (if anything) can be\nsubmitted to resolve the block.\n","type":"array","items":{"type":"string","description":"The name of a capability. Capabilities represent granular functional permissions\nthat determine what actions a customer can perform. Each capability must be\nexplicitly requested before use.\n","enum":["custodyCrypto","custodyFiat","custodyStablecoin","tradeCrypto","tradeStablecoin","transferCrypto","transferFiat","transferStablecoin"],"x-enum-varnames":["CustodyCrypto","CustodyFiat","CustodyStablecoin","TradeCrypto","TradeStablecoin","TransferCrypto","TransferFiat","TransferStablecoin"],"example":"custodyCrypto","uniqueKey":"unauthorizedCapabilities.items.[INDEX]","typeLabel":"enum\u003cstring>"},"x-error-types":["customer_not_authorized"],"uniqueKey":"unauthorizedCapabilities","typeLabel":"enum\u003cstring>[]"}},"required":["errorType","errorMessage"],"example":{"errorType":"invalid_request","errorMessage":"Invalid request.","correlationId":"41deb8d59a9dc9a7-IAD","errorLink":"https://docs.cdp.coinbase.com/api-reference/v2/errors#invalid-request"},"uniqueKey":"","typeLabel":"object"},"examples":{"service_unavailable":{"title":"service_unavailable","value":{"errorType":"service_unavailable","errorMessage":"Service unavailable. Please try again later."}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"2f13f596-c63e-4b19-b916-cbb3726cb059":{"endUserAuth":{"x-audience":"public","type":"http","scheme":"bearer","bearerFormat":"JWT","description":"A JWT signed using the developer's own JWT private key (in the case of JWT authentication), or an end user JWT signed by CDP, encoded in base64. This is used for End User Account APIs.","scopes":[],"schemeName":"endUserAuth"}},"70aba8c3-32db-4b2d-9dad-2904723ae2a3":{"apiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the [Generate Bearer Token](https://docs.cdp.coinbase.com/api-reference/v2/authentication#2-generate-bearer-token) section of our Authentication docs for information on how to generate your Bearer Token.","scopes":[],"schemeName":"apiKeyAuth"}}},"servers":{"da928323-701e-4f73-896a-d2ec334766cc":{"url":"https://api.cdp.coinbase.com/platform","description":"The production server of the CDP APIs."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"x-audience":"public","type":"http","scheme":"bearer","bearerFormat":"JWT","description":"A JWT signed using the developer's own JWT private key (in the case of JWT authentication), or an end user JWT signed by CDP, encoded in base64. This is used for End User Account APIs.","scopes":[],"schemeName":"endUserAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A JWT signed using the developer's own JWT private key (in the case of JWT authentication), or an end user JWT signed by CDP, encoded in base64. This is used for End User Account APIs.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"endUserAuth","name":"Authorization"}],"title":"endUserAuth"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the [Generate Bearer Token](https://docs.cdp.coinbase.com/api-reference/v2/authentication#2-generate-bearer-token) section of our Authentication docs for information on how to generate your Bearer Token.","scopes":[],"schemeName":"apiKeyAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the [Generate Bearer Token](https://docs.cdp.coinbase.com/api-reference/v2/authentication#2-generate-bearer-token) section of our Authentication docs for information on how to generate your Bearer Token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKeyAuth","name":"Authorization"}],"title":"apiKeyAuth"}]},"originalFileLocation":"api-reference/v2/cdp-api-v2.yaml"},"subdomain":"coinbase-prod","siteName":"Coinbase Developer Documentation","title":"Sign EIP-712 typed data via end user EVM account - Coinbase Developer Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-22T19:26:27.785Z","originalFileLocation":"api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account.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=\"light\"}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=\"Signs EIP-712 typed data with the given end user EVM account.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Coinbase Developer Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/coinbase-prod/c38WXP1QDRE4hnu6/_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/coinbase-prod/c38WXP1QDRE4hnu6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/coinbase-prod/c38WXP1QDRE4hnu6/_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/coinbase-prod/c38WXP1QDRE4hnu6/_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/coinbase-prod/c38WXP1QDRE4hnu6/_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/coinbase-prod/c38WXP1QDRE4hnu6/_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/coinbase-prod/c38WXP1QDRE4hnu6/_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/coinbase-prod/c38WXP1QDRE4hnu6/_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/coinbase-prod/c38WXP1QDRE4hnu6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Sign EIP-712 typed data via end user EVM account - Coinbase Developer Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Signs EIP-712 typed data with the given end user EVM account.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Coinbase Developer Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://coinbase-prod.mintlify.app/_mintlify/api/og/v2?division=End+User+Accounts\u0026amp;title=Sign+EIP-712+typed+data+via+end+user+EVM+account\u0026amp;description=Signs+%5BEIP-712%5D%28https%3A%2F%2Feips.ethereum.org%2FEIPS%2Feip-712%29+typed+data+with+the+given+end+user+EVM+account.\u0026amp;theme=77a5406d72fc6b056fdde5d3\u0026amp;signature=800a3a6f91d5d2d81ad341bb1cff7105de74b1b23637e5b7fcf51ece4c07224b\">\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=\"Sign EIP-712 typed data via end user EVM account - Coinbase Developer Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Signs EIP-712 typed data with the given end user EVM account.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://coinbase-prod.mintlify.app/_mintlify/api/og/v2?division=End+User+Accounts\u0026amp;title=Sign+EIP-712+typed+data+via+end+user+EVM+account\u0026amp;description=Signs+%5BEIP-712%5D%28https%3A%2F%2Feips.ethereum.org%2FEIPS%2Feip-712%29+typed+data+with+the+given+end+user+EVM+account.\u0026amp;theme=77a5406d72fc6b056fdde5d3\u0026amp;signature=800a3a6f91d5d2d81ad341bb1cff7105de74b1b23637e5b7fcf51ece4c07224b\">\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/coinbase-prod/c38WXP1QDRE4hnu6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Coinbase Developer Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#004cec\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cdp.coinbase.com/#organization\",\"name\":\"Coinbase Developer Documentation\",\"url\":\"https://docs.cdp.coinbase.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/coinbase-prod/B68gj-lD9xkJGij4/logos/wordmark-light.svg?fit=max\u0026auto=format\u0026n=B68gj-lD9xkJGij4\u0026q=85\u0026s=0eb5640aeec58541851e1cba9c6ccc8b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cdp.coinbase.com#website\",\"name\":\"Coinbase Developer Documentation\",\"url\":\"https://docs.cdp.coinbase.com\",\"publisher\":{\"@id\":\"https://docs.cdp.coinbase.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account#webpage\",\"url\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account\",\"name\":\"Sign EIP-712 typed data via end user EVM account\",\"description\":\"Signs EIP-712 typed data with the given end user EVM account.\",\"dateModified\":\"2026-05-22T19:26:27.785Z\",\"isPartOf\":{\"@id\":\"https://docs.cdp.coinbase.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"REST API\",\"item\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/accounts/accounts\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wallets\",\"item\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/accounts/accounts\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Non-custodial\",\"item\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-account-management/end-user-account-management\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"User Wallets\",\"item\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-account-management/end-user-account-management\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"End User Accounts\",\"item\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/end-user-accounts\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"Sign EIP-712 typed data via end user EVM account\",\"item\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account#apireference\",\"headline\":\"Sign EIP-712 typed data via end user EVM account\",\"name\":\"Sign EIP-712 typed data via end user EVM account\",\"description\":\"Signs EIP-712 typed data with the given end user EVM account.\",\"url\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cdp.coinbase.com/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account#webpage\"},\"dateModified\":\"2026-05-22T19:26:27.785Z\",\"publisher\":{\"@id\":\"https://docs.cdp.coinbase.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cdp.coinbase.com#website\"}}]}\u003c/script>","siteName":"Coinbase Developer Documentation","nav":{"global":null,"tabs":[{"tab":"Docs","pages":[{"title":"Docs","href":""}]},{"tab":"API Reference","dropdowns":[{"dropdown":"CDP API","icon":"https://mintlify-assets.b-cdn.net/developerSDKNavigation-0.svg","groups":[{"group":"CDP API","pages":[{"title":"Welcome to CDP API","sidebarTitle":"Overview","href":"/api-reference/v2/introduction"},{"title":"API Authentication","sidebarTitle":"Authentication","href":"/api-reference/v2/authentication"},{"title":"API Conventions","sidebarTitle":"Conventions","href":"/api-reference/v2/conventions"},{"title":"Pagination","href":"/api-reference/v2/pagination"},{"title":"Idempotency","href":"/api-reference/v2/idempotency"},{"title":"Rate Limits","href":"/api-reference/v2/rate-limits"},{"title":"Errors","href":"/api-reference/v2/errors"},{"title":"OpenAPI Spec","sidebarTitle":"OpenAPI Spec","url":"https://docs.cdp.coinbase.com/api-reference/v2/cdp-api-v2.yaml","href":"/api-reference/v2/openapi-spec"},{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/api-reference/v2/troubleshooting"}]},{"group":"REST API","pages":[{"group":"Wallets","pages":[{"group":"Custodial","pages":[{"group":"Accounts","tag":"Beta","pages":[{"title":"Accounts","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/accounts/accounts"},{"openapi":"get /v2/accounts/{accountId}","title":"Get account","href":"/api-reference/v2/rest-api/accounts/get-account"},{"openapi":"get /v2/accounts/{accountId}/balances/{asset}","title":"Get balance for account","href":"/api-reference/v2/rest-api/accounts/get-balance-for-account"},{"openapi":"get /v2/accounts","title":"List accounts","href":"/api-reference/v2/rest-api/accounts/list-accounts"},{"openapi":"get /v2/accounts/{accountId}/balances","title":"List balances for account","href":"/api-reference/v2/rest-api/accounts/list-balances-for-account"},{"openapi":"post /v2/accounts","title":"Create account","href":"/api-reference/v2/rest-api/accounts/create-account"}]}]},{"group":"Non-custodial","pages":[{"group":"User Wallets","pages":[{"group":"End User Account Management","pages":[{"title":"End User Account Management","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/end-user-account-management/end-user-account-management"},{"openapi":"get /v2/end-users/{userId}","title":"Get end user","href":"/api-reference/v2/rest-api/end-user-account-management/get-end-user"},{"openapi":"get /v2/end-users","title":"List end users","href":"/api-reference/v2/rest-api/end-user-account-management/list-end-users"},{"openapi":"get /v2/end-users/lookup","title":"Look up end users by identity","href":"/api-reference/v2/rest-api/end-user-account-management/look-up-end-users-by-identity"},{"openapi":"post /v2/end-users/{userId}/evm","title":"Add EVM account to end user","href":"/api-reference/v2/rest-api/end-user-account-management/add-evm-account-to-end-user"},{"openapi":"post /v2/end-users/{userId}/evm-smart-account","title":"Add EVM smart account to end user","href":"/api-reference/v2/rest-api/end-user-account-management/add-evm-smart-account-to-end-user"},{"openapi":"post /v2/end-users/{userId}/solana","title":"Add Solana account to end user","href":"/api-reference/v2/rest-api/end-user-account-management/add-solana-account-to-end-user"},{"openapi":"post /v2/end-users","title":"Create end user","href":"/api-reference/v2/rest-api/end-user-account-management/create-end-user"},{"openapi":"post /v2/end-users/import","title":"Import end user private key","href":"/api-reference/v2/rest-api/end-user-account-management/import-end-user-private-key"},{"openapi":"post /v2/end-users/auth/validate-token","title":"Validate end user access token","href":"/api-reference/v2/rest-api/end-user-account-management/validate-end-user-access-token"}]},{"group":"End User Accounts","pages":[{"title":"End User Accounts","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/end-user-accounts/end-user-accounts"},{"openapi":"get /v2/embedded-wallet-api/evm/borrow-products/{borrowProductId}","title":"Get a borrow product","href":"/api-reference/v2/rest-api/end-user-accounts/get-a-borrow-product"},{"openapi":"get /v2/embedded-wallet-api/end-users/{userId}/evm/smart-accounts/{address}/user-operations/{userOpHash}","title":"Get a user operation for end user EVM Smart Account","href":"/api-reference/v2/rest-api/end-user-accounts/get-a-user-operation-for-end-user-evm-smart-account"},{"openapi":"get /v2/embedded-wallet-api/end-users/{userId}/address/{address}/delegation","title":"Get account-scoped delegation for end user","href":"/api-reference/v2/rest-api/end-user-accounts/get-account-scoped-delegation-for-end-user"},{"openapi":"get /v2/embedded-wallet-api/end-users/{userId}/delegation","title":"Get delegation for end user","href":"/api-reference/v2/rest-api/end-user-accounts/get-delegation-for-end-user"},{"openapi":"get /v2/embedded-wallet-api/end-users/{userId}/evm/smart-accounts/{address}/borrow-positions","title":"List borrow positions for an end user smart account","href":"/api-reference/v2/rest-api/end-user-accounts/list-borrow-positions-for-an-end-user-smart-account"},{"openapi":"get /v2/embedded-wallet-api/evm/borrow-products","title":"List borrow products","href":"/api-reference/v2/rest-api/end-user-accounts/list-borrow-products"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/smart-accounts/{address}/borrow-positions/adjust","title":"Adjust a borrow position for an end user smart account","href":"/api-reference/v2/rest-api/end-user-accounts/adjust-a-borrow-position-for-an-end-user-smart-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/smart-accounts/{address}/borrow-positions/close","title":"Close a borrow position for an end user smart account","href":"/api-reference/v2/rest-api/end-user-accounts/close-a-borrow-position-for-an-end-user-smart-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/smart-accounts/{address}/borrow-positions","title":"Create a borrow position for an end user smart account","href":"/api-reference/v2/rest-api/end-user-accounts/create-a-borrow-position-for-an-end-user-smart-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/address/{address}/delegation","title":"Create account-scoped delegation for end user","href":"/api-reference/v2/rest-api/end-user-accounts/create-account-scoped-delegation-for-end-user"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/eip7702/delegation","title":"Create EIP-7702 delegation for end user EVM account","href":"/api-reference/v2/rest-api/end-user-accounts/create-eip-7702-delegation-for-end-user-evm-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/address/{address}/delegation/revoke","title":"Revoke account-scoped delegation for end user","href":"/api-reference/v2/rest-api/end-user-accounts/revoke-account-scoped-delegation-for-end-user"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/delegation/revoke","title":"Revoke delegation for end user","href":"/api-reference/v2/rest-api/end-user-accounts/revoke-delegation-for-end-user"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/send/transaction","title":"Send transaction via end user EVM account","href":"/api-reference/v2/rest-api/end-user-accounts/send-transaction-via-end-user-evm-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/solana/send/transaction","title":"Send transaction via end user Solana account","href":"/api-reference/v2/rest-api/end-user-accounts/send-transaction-via-end-user-solana-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/{address}/send/{asset}","title":"Send USDC on EVM","href":"/api-reference/v2/rest-api/end-user-accounts/send-usdc-on-evm"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/solana/{address}/send/{asset}","title":"Send USDC on Solana","href":"/api-reference/v2/rest-api/end-user-accounts/send-usdc-on-solana"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/smart-accounts/{address}/send","title":"Send user operation for end user Smart Account","href":"/api-reference/v2/rest-api/end-user-accounts/send-user-operation-for-end-user-smart-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/solana/sign/message","title":"Sign Base64-encoded message","href":"/api-reference/v2/rest-api/end-user-accounts/sign-base64-encoded-message"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/sign/message","title":"Sign EIP-191 message via end user EVM account","description":"Signs an [EIP-191](https://eips.ethereum.org/EIPS/eip-191) message with the given end user EVM account.\n\nPer the specification, the message in the request body is prepended with `0x19 \u003c0x45 (E)> \u003cthereum Signed Message:\\n\" + len(message)>` before being signed.","href":"/api-reference/v2/rest-api/end-user-accounts/sign-eip-191-message-via-end-user-evm-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/sign/typed-data","title":"Sign EIP-712 typed data via end user EVM account","href":"/api-reference/v2/rest-api/end-user-accounts/sign-eip-712-typed-data-via-end-user-evm-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/evm/sign/transaction","title":"Sign transaction via end user EVM account","description":"Signs a transaction with the given end user EVM account.\nThe transaction should be serialized as a hex string using [RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/).\n\nThe transaction must be an [EIP-1559 dynamic fee transaction](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1559.md). The developer is responsible for ensuring that the unsigned transaction is valid, as the API will not validate the transaction.","href":"/api-reference/v2/rest-api/end-user-accounts/sign-transaction-via-end-user-evm-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/solana/sign/transaction","title":"Sign transaction via end user Solana account","href":"/api-reference/v2/rest-api/end-user-accounts/sign-transaction-via-end-user-solana-account"},{"openapi":"post /v2/embedded-wallet-api/end-users/{userId}/solana/sign/x402-payment","title":"Sign x402 payment via end user Solana account","href":"/api-reference/v2/rest-api/end-user-accounts/sign-x402-payment-via-end-user-solana-account"},{"openapi":"delete /v2/embedded-wallet-api/end-users/{userId}/address/{address}/delegation","deprecated":true,"title":"Revoke account-scoped delegation for end user (deprecated)","href":"/api-reference/v2/rest-api/end-user-accounts/revoke-account-scoped-delegation-for-end-user-deprecated"},{"openapi":"delete /v2/embedded-wallet-api/end-users/{userId}/delegation","deprecated":true,"title":"Revoke delegation for end user (deprecated)","href":"/api-reference/v2/rest-api/end-user-accounts/revoke-delegation-for-end-user-deprecated"}]}]},{"group":"API Key Wallets","pages":[{"group":"EVM Accounts","pages":[{"title":"EVM Accounts","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/evm-accounts/evm-accounts"},{"openapi":"get /v2/evm/eip7702/delegation-operations/{delegationOperationId}","title":"Get EIP-7702 delegation operation by ID","href":"/api-reference/v2/rest-api/evm-accounts/get-eip-7702-delegation-operation-by-id"},{"openapi":"get /v2/evm/accounts/{address}","title":"Get EVM account by address","href":"/api-reference/v2/rest-api/evm-accounts/get-evm-account-by-address"},{"openapi":"get /v2/evm/accounts/by-name/{name}","title":"Get EVM account by name","href":"/api-reference/v2/rest-api/evm-accounts/get-evm-account-by-name"},{"openapi":"get /v2/evm/accounts","title":"List EVM accounts","href":"/api-reference/v2/rest-api/evm-accounts/list-evm-accounts"},{"openapi":"post /v2/evm/accounts/{address}/eip7702/delegation","title":"Create EIP-7702 delegation","href":"/api-reference/v2/rest-api/evm-accounts/create-eip-7702-delegation"},{"openapi":"post /v2/evm/accounts","title":"Create EVM account","href":"/api-reference/v2/rest-api/evm-accounts/create-evm-account"},{"openapi":"post /v2/evm/accounts/{address}/export","title":"Export EVM account","href":"/api-reference/v2/rest-api/evm-accounts/export-evm-account"},{"openapi":"post /v2/evm/accounts/export/by-name/{name}","title":"Export EVM account by name","href":"/api-reference/v2/rest-api/evm-accounts/export-evm-account-by-name"},{"openapi":"post /v2/evm/accounts/import","title":"Import EVM account","href":"/api-reference/v2/rest-api/evm-accounts/import-evm-account"},{"openapi":"post /v2/evm/accounts/{address}/send/transaction","title":"Send transaction","href":"/api-reference/v2/rest-api/evm-accounts/send-transaction"},{"openapi":"post /v2/evm/accounts/{address}/sign/message","title":"Sign EIP-191 message","href":"/api-reference/v2/rest-api/evm-accounts/sign-eip-191-message"},{"openapi":"post /v2/evm/accounts/{address}/sign/typed-data","title":"Sign EIP-712 typed data","href":"/api-reference/v2/rest-api/evm-accounts/sign-eip-712-typed-data"},{"openapi":"post /v2/evm/accounts/{address}/sign","title":"Sign hash","href":"/api-reference/v2/rest-api/evm-accounts/sign-hash"},{"openapi":"post /v2/evm/accounts/{address}/sign/transaction","title":"Sign transaction","href":"/api-reference/v2/rest-api/evm-accounts/sign-transaction"},{"openapi":"put /v2/evm/accounts/{address}","title":"Update EVM account","href":"/api-reference/v2/rest-api/evm-accounts/update-evm-account"}]},{"group":"EVM Smart Accounts","pages":[{"title":"EVM Smart Accounts","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/evm-smart-accounts/evm-smart-accounts"},{"openapi":"get /v2/evm/smart-accounts/{address}","title":"Get Smart Account by address","href":"/api-reference/v2/rest-api/evm-smart-accounts/get-smart-account-by-address"},{"openapi":"get /v2/evm/smart-accounts/by-name/{name}","title":"Get Smart Account by name","href":"/api-reference/v2/rest-api/evm-smart-accounts/get-smart-account-by-name"},{"openapi":"get /v2/evm/smart-accounts/{address}/user-operations/{userOpHash}","title":"Get user operation","href":"/api-reference/v2/rest-api/evm-smart-accounts/get-user-operation"},{"openapi":"get /v2/evm/smart-accounts","title":"List Smart Accounts","href":"/api-reference/v2/rest-api/evm-smart-accounts/list-smart-accounts"},{"openapi":"get /v2/evm/smart-accounts/{address}/spend-permissions/list","title":"List spend permissions","href":"/api-reference/v2/rest-api/evm-smart-accounts/list-spend-permissions"},{"openapi":"post /v2/evm/smart-accounts","title":"Create Smart Account","href":"/api-reference/v2/rest-api/evm-smart-accounts/create-smart-account"},{"openapi":"post /v2/evm/smart-accounts/{address}/spend-permissions","title":"Create spend permission","href":"/api-reference/v2/rest-api/evm-smart-accounts/create-spend-permission"},{"openapi":"post /v2/evm/smart-accounts/{address}/user-operations/prepare-and-send","title":"Prepare and send user operation","href":"/api-reference/v2/rest-api/evm-smart-accounts/prepare-and-send-user-operation"},{"openapi":"post /v2/evm/smart-accounts/{address}/user-operations","title":"Prepare user operation","href":"/api-reference/v2/rest-api/evm-smart-accounts/prepare-user-operation"},{"openapi":"post /v2/evm/smart-accounts/{address}/spend-permissions/revoke","title":"Revoke spend permission","href":"/api-reference/v2/rest-api/evm-smart-accounts/revoke-spend-permission"},{"openapi":"post /v2/evm/smart-accounts/{address}/user-operations/{userOpHash}/send","title":"Send user operation","href":"/api-reference/v2/rest-api/evm-smart-accounts/send-user-operation"},{"openapi":"put /v2/evm/smart-accounts/{address}","title":"Update EVM Smart Account","href":"/api-reference/v2/rest-api/evm-smart-accounts/update-evm-smart-account"}]},{"group":"Solana Accounts","pages":[{"title":"Solana Accounts","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/solana-accounts/solana-accounts"},{"openapi":"get /v2/solana/accounts/{address}","title":"Get Solana account by address","href":"/api-reference/v2/rest-api/solana-accounts/get-solana-account-by-address"},{"openapi":"get /v2/solana/accounts/by-name/{name}","title":"Get Solana account by name","href":"/api-reference/v2/rest-api/solana-accounts/get-solana-account-by-name"},{"openapi":"get /v2/solana/accounts","title":"List Solana accounts","href":"/api-reference/v2/rest-api/solana-accounts/list-solana-accounts"},{"openapi":"post /v2/solana/accounts","title":"Create Solana account","href":"/api-reference/v2/rest-api/solana-accounts/create-solana-account"},{"openapi":"post /v2/solana/accounts/{address}/export","title":"Export Solana account","href":"/api-reference/v2/rest-api/solana-accounts/export-solana-account"},{"openapi":"post /v2/solana/accounts/export/by-name/{name}","title":"Export Solana account by name","href":"/api-reference/v2/rest-api/solana-accounts/export-solana-account-by-name"},{"openapi":"post /v2/solana/accounts/import","title":"Import Solana account","href":"/api-reference/v2/rest-api/solana-accounts/import-solana-account"},{"openapi":"post /v2/solana/accounts/send/transaction","title":"Send Solana transaction","href":"/api-reference/v2/rest-api/solana-accounts/send-solana-transaction"},{"openapi":"post /v2/solana/accounts/{address}/sign/message","title":"Sign message","href":"/api-reference/v2/rest-api/solana-accounts/sign-message"},{"openapi":"post /v2/solana/accounts/{address}/sign/transaction","title":"Sign transaction","href":"/api-reference/v2/rest-api/solana-accounts/sign-transaction"},{"openapi":"put /v2/solana/accounts/{address}","title":"Update Solana account","href":"/api-reference/v2/rest-api/solana-accounts/update-solana-account"}]}]},{"group":"Policy Engine","pages":[{"title":"Policy Engine","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/policy-engine/policy-engine"},{"openapi":"get /v2/policy-engine/policies/{policyId}","title":"Get policy by ID","href":"/api-reference/v2/rest-api/policy-engine/get-policy-by-id"},{"openapi":"get /v2/policy-engine/policies","title":"List policies","href":"/api-reference/v2/rest-api/policy-engine/list-policies"},{"openapi":"post /v2/policy-engine/policies","title":"Create policy","href":"/api-reference/v2/rest-api/policy-engine/create-policy"},{"openapi":"post /v2/policy-engine/policies/{policyId}/pause","title":"Pause policy","href":"/api-reference/v2/rest-api/policy-engine/pause-policy"},{"openapi":"post /v2/policy-engine/policies/{policyId}/resume","title":"Resume policy","href":"/api-reference/v2/rest-api/policy-engine/resume-policy"},{"openapi":"post /v2/policy-engine/simulate","title":"Simulate policies","href":"/api-reference/v2/rest-api/policy-engine/simulate-policies"},{"openapi":"put /v2/policy-engine/policies/{policyId}","title":"Update policy","href":"/api-reference/v2/rest-api/policy-engine/update-policy"},{"openapi":"delete /v2/policy-engine/policies/{policyId}","title":"Delete policy","href":"/api-reference/v2/rest-api/policy-engine/delete-policy"}]},{"group":"Wallet Webhooks","pages":[{"title":"Wallet Webhooks","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/wallet-webhooks/wallet-webhooks"},{"openapi":"webhook walletDelegationCreated","sidebarTitle":"Wallet delegation created","title":"Wallet delegation created","href":"/api-reference/v2/webhooks/webhook-wallet-delegation-created"},{"openapi":"webhook walletDelegationRevoked","sidebarTitle":"Wallet delegation revoked","title":"Wallet delegation revoked","href":"/api-reference/v2/webhooks/webhook-wallet-delegation-revoked"},{"openapi":"webhook walletHashSigned","sidebarTitle":"Wallet hash signed","title":"Wallet hash signed","href":"/api-reference/v2/webhooks/webhook-wallet-hash-signed"},{"openapi":"webhook walletMessageSigned","sidebarTitle":"Wallet message signed","title":"Wallet message signed","href":"/api-reference/v2/webhooks/webhook-wallet-message-signed"},{"openapi":"webhook walletTransactionBroadcast","sidebarTitle":"Wallet transaction broadcast","title":"Wallet transaction broadcast","href":"/api-reference/v2/webhooks/webhook-wallet-transaction-broadcast"},{"openapi":"webhook walletTransactionConfirmed","sidebarTitle":"Wallet transaction confirmed","title":"Wallet transaction confirmed","href":"/api-reference/v2/webhooks/webhook-wallet-transaction-confirmed"},{"openapi":"webhook walletTransactionCreated","sidebarTitle":"Wallet transaction created","title":"Wallet transaction created","href":"/api-reference/v2/webhooks/webhook-wallet-transaction-created"},{"openapi":"webhook walletTransactionFailed","sidebarTitle":"Wallet transaction failed","title":"Wallet transaction failed","href":"/api-reference/v2/webhooks/webhook-wallet-transaction-failed"},{"openapi":"webhook walletTransactionPending","sidebarTitle":"Wallet transaction pending","title":"Wallet transaction pending","href":"/api-reference/v2/webhooks/webhook-wallet-transaction-pending"},{"openapi":"webhook walletTransactionReplaced","sidebarTitle":"Wallet transaction replaced","title":"Wallet transaction replaced","href":"/api-reference/v2/webhooks/webhook-wallet-transaction-replaced"},{"openapi":"webhook walletTransactionSigned","sidebarTitle":"Wallet transaction signed","title":"Wallet transaction signed","href":"/api-reference/v2/webhooks/webhook-wallet-transaction-signed"},{"openapi":"webhook walletTypedDataSigned","sidebarTitle":"Wallet typed data signed","title":"Wallet typed data signed","href":"/api-reference/v2/webhooks/webhook-wallet-typed-data-signed"}]}]}]},{"group":"Payments","pages":[{"group":"Acceptance","pages":[{"group":"Payment Sessions","pages":[{"title":"Payment Sessions","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/payment-sessions/payment-sessions"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}","title":"Get a payment session","href":"/api-reference/v2/rest-api/payment-sessions/get-a-payment-session"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/authorizations/{authorizationId}","title":"Get a payment session authorization","href":"/api-reference/v2/rest-api/payment-sessions/get-a-payment-session-authorization"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/captures/{captureId}","title":"Get a payment session capture","href":"/api-reference/v2/rest-api/payment-sessions/get-a-payment-session-capture"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/refunds/{refundId}","title":"Get a payment session refund","href":"/api-reference/v2/rest-api/payment-sessions/get-a-payment-session-refund"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/voids/{voidId}","title":"Get a payment session void","href":"/api-reference/v2/rest-api/payment-sessions/get-a-payment-session-void"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/authorizations/wallet/options","title":"Get wallet authorization options","href":"/api-reference/v2/rest-api/payment-sessions/get-wallet-authorization-options"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/authorizations","title":"List payment session authorizations","href":"/api-reference/v2/rest-api/payment-sessions/list-payment-session-authorizations"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/captures","title":"List payment session captures","href":"/api-reference/v2/rest-api/payment-sessions/list-payment-session-captures"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/refunds","title":"List payment session refunds","href":"/api-reference/v2/rest-api/payment-sessions/list-payment-session-refunds"},{"openapi":"get /v2/payment-sessions/{paymentSessionId}/voids","title":"List payment session voids","href":"/api-reference/v2/rest-api/payment-sessions/list-payment-session-voids"},{"openapi":"get /v2/payment-sessions","title":"List payment sessions","href":"/api-reference/v2/rest-api/payment-sessions/list-payment-sessions"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/authorizations/coinbase","title":"Authorize a payment session with a Coinbase account","href":"/api-reference/v2/rest-api/payment-sessions/authorize-a-payment-session-with-a-coinbase-account"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/authorizations/mandate","title":"Authorize a payment session with a mandate","href":"/api-reference/v2/rest-api/payment-sessions/authorize-a-payment-session-with-a-mandate"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/authorizations/wallet","title":"Authorize a payment session with a wallet","href":"/api-reference/v2/rest-api/payment-sessions/authorize-a-payment-session-with-a-wallet"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/authorizations/x402","title":"Authorize a payment session with x402","href":"/api-reference/v2/rest-api/payment-sessions/authorize-a-payment-session-with-x402"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/cancel","title":"Cancel a payment session","href":"/api-reference/v2/rest-api/payment-sessions/cancel-a-payment-session"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/captures","title":"Capture a payment session","href":"/api-reference/v2/rest-api/payment-sessions/capture-a-payment-session"},{"openapi":"post /v2/payment-sessions","title":"Create a payment session","href":"/api-reference/v2/rest-api/payment-sessions/create-a-payment-session"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/refunds","title":"Refund a payment session","href":"/api-reference/v2/rest-api/payment-sessions/refund-a-payment-session"},{"openapi":"post /v2/payment-sessions/{paymentSessionId}/voids","title":"Void a payment session","href":"/api-reference/v2/rest-api/payment-sessions/void-a-payment-session"},{"group":"Webhooks","pages":[{"openapi":"webhook acceptancePaymentSessionAuthorizationFailed","sidebarTitle":"Payment session authorization failed","title":"Payment session authorization failed","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-authorization-failed"},{"openapi":"webhook acceptancePaymentSessionAuthorizationPending","sidebarTitle":"Payment session authorization pending","title":"Payment session authorization pending","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-authorization-pending"},{"openapi":"webhook acceptancePaymentSessionAuthorizationSucceeded","sidebarTitle":"Payment session authorization succeeded","title":"Payment session authorization succeeded","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-authorization-succeeded"},{"openapi":"webhook acceptancePaymentSessionCanceled","sidebarTitle":"Payment session canceled","title":"Payment session canceled","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-canceled"},{"openapi":"webhook acceptancePaymentSessionCaptureFailed","sidebarTitle":"Payment session capture failed","title":"Payment session capture failed","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-capture-failed"},{"openapi":"webhook acceptancePaymentSessionCapturePending","sidebarTitle":"Payment session capture pending","title":"Payment session capture pending","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-capture-pending"},{"openapi":"webhook acceptancePaymentSessionCaptureSucceeded","sidebarTitle":"Payment session capture succeeded","title":"Payment session capture succeeded","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-capture-succeeded"},{"openapi":"webhook acceptancePaymentSessionCreated","sidebarTitle":"Payment session created","title":"Payment session created","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-created"},{"openapi":"webhook acceptancePaymentSessionRefundFailed","sidebarTitle":"Payment session refund failed","title":"Payment session refund failed","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-refund-failed"},{"openapi":"webhook acceptancePaymentSessionRefundPending","sidebarTitle":"Payment session refund pending","title":"Payment session refund pending","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-refund-pending"},{"openapi":"webhook acceptancePaymentSessionRefundSucceeded","sidebarTitle":"Payment session refund succeeded","title":"Payment session refund succeeded","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-refund-succeeded"},{"openapi":"webhook acceptancePaymentSessionVoidFailed","sidebarTitle":"Payment session void failed","title":"Payment session void failed","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-void-failed"},{"openapi":"webhook acceptancePaymentSessionVoidPending","sidebarTitle":"Payment session void pending","title":"Payment session void pending","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-void-pending"},{"openapi":"webhook acceptancePaymentSessionVoidSucceeded","sidebarTitle":"Payment session void succeeded","title":"Payment session void succeeded","href":"/api-reference/v2/webhooks/webhook-acceptance-payment-session-void-succeeded"}]}]},{"group":"Disbursements","pages":[{"title":"Disbursements","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/disbursements/disbursements"},{"openapi":"get /v2/disbursements/{disbursementId}","title":"Get a disbursement","href":"/api-reference/v2/rest-api/disbursements/get-a-disbursement"},{"openapi":"get /v2/disbursements","title":"List disbursements","href":"/api-reference/v2/rest-api/disbursements/list-disbursements"},{"openapi":"post /v2/disbursements","title":"Create a disbursement","href":"/api-reference/v2/rest-api/disbursements/create-a-disbursement"},{"group":"Webhooks","pages":[{"openapi":"webhook acceptanceDisbursementFailed","sidebarTitle":"Disbursement failed","title":"Disbursement failed","href":"/api-reference/v2/webhooks/webhook-acceptance-disbursement-failed"},{"openapi":"webhook acceptanceDisbursementPending","sidebarTitle":"Disbursement pending","title":"Disbursement pending","href":"/api-reference/v2/webhooks/webhook-acceptance-disbursement-pending"},{"openapi":"webhook acceptanceDisbursementSucceeded","sidebarTitle":"Disbursement succeeded","title":"Disbursement succeeded","href":"/api-reference/v2/webhooks/webhook-acceptance-disbursement-succeeded"}]}]},{"group":"Mandates","tag":"Beta","pages":[{"title":"Mandates","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/mandates/mandates"},{"openapi":"get /v2/mandates/{mandateId}","title":"Get a mandate","href":"/api-reference/v2/rest-api/mandates/get-a-mandate"},{"openapi":"get /v2/mandates/{mandateId}/approvals/{approvalId}","title":"Get a mandate approval","href":"/api-reference/v2/rest-api/mandates/get-a-mandate-approval"},{"openapi":"get /v2/mandates/{mandateId}/revocations/{revocationId}","title":"Get a mandate revocation","href":"/api-reference/v2/rest-api/mandates/get-a-mandate-revocation"},{"openapi":"get /v2/mandates/{mandateId}/approvals/wallet/options","title":"Get wallet approval options","href":"/api-reference/v2/rest-api/mandates/get-wallet-approval-options"},{"openapi":"get /v2/mandates/{mandateId}/revocations/wallet/options","title":"Get wallet revocation options","href":"/api-reference/v2/rest-api/mandates/get-wallet-revocation-options"},{"openapi":"get /v2/mandates/{mandateId}/approvals","title":"List mandate approvals","href":"/api-reference/v2/rest-api/mandates/list-mandate-approvals"},{"openapi":"get /v2/mandates/{mandateId}/revocations","title":"List mandate revocations","href":"/api-reference/v2/rest-api/mandates/list-mandate-revocations"},{"openapi":"get /v2/mandates","title":"List mandates","href":"/api-reference/v2/rest-api/mandates/list-mandates"},{"openapi":"post /v2/mandates/{mandateId}/approvals/wallet","title":"Approve a mandate with a wallet","href":"/api-reference/v2/rest-api/mandates/approve-a-mandate-with-a-wallet"},{"openapi":"post /v2/mandates/{mandateId}/cancel","title":"Cancel a mandate","href":"/api-reference/v2/rest-api/mandates/cancel-a-mandate"},{"openapi":"post /v2/mandates","title":"Create a mandate","href":"/api-reference/v2/rest-api/mandates/create-a-mandate"},{"openapi":"post /v2/mandates/{mandateId}/revocations/wallet","title":"Revoke a mandate with a wallet","href":"/api-reference/v2/rest-api/mandates/revoke-a-mandate-with-a-wallet"},{"group":"Webhooks","pages":[{"openapi":"webhook acceptanceMandateApprovalFailed","sidebarTitle":"Mandate approval failed","title":"Mandate approval failed","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-approval-failed"},{"openapi":"webhook acceptanceMandateApprovalInitiated","sidebarTitle":"Mandate approval initiated","title":"Mandate approval initiated","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-approval-initiated"},{"openapi":"webhook acceptanceMandateApprovalSucceeded","sidebarTitle":"Mandate approval succeeded","title":"Mandate approval succeeded","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-approval-succeeded"},{"openapi":"webhook acceptanceMandateCanceled","sidebarTitle":"Mandate canceled","title":"Mandate canceled","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-canceled"},{"openapi":"webhook acceptanceMandateCreated","sidebarTitle":"Mandate created","title":"Mandate created","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-created"},{"openapi":"webhook acceptanceMandateRevocationFailed","sidebarTitle":"Mandate revocation failed","title":"Mandate revocation failed","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-revocation-failed"},{"openapi":"webhook acceptanceMandateRevocationInitiated","sidebarTitle":"Mandate revocation initiated","title":"Mandate revocation initiated","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-revocation-initiated"},{"openapi":"webhook acceptanceMandateRevocationSucceeded","sidebarTitle":"Mandate revocation succeeded","title":"Mandate revocation succeeded","href":"/api-reference/v2/webhooks/webhook-acceptance-mandate-revocation-succeeded"}]}]},{"group":"Top-Up Links","tag":"Beta","pages":[{"title":"Top-Up Links","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/top-up-links/top-up-links"},{"openapi":"post /v2/acceptance/top-up-links","title":"Create a Top-Up Link","href":"/api-reference/v2/rest-api/top-up-links/create-a-top-up-link"},{"group":"Webhooks","pages":[{"openapi":"webhook acceptanceTopUpLinkCreated","sidebarTitle":"Top-Up Link created","title":"Top-Up Link created","href":"/api-reference/v2/webhooks/webhook-acceptance-top-up-link-created"},{"openapi":"webhook acceptanceTopUpLinkFundsAdded","sidebarTitle":"Top-Up Link funds added","title":"Top-Up Link funds added","href":"/api-reference/v2/webhooks/webhook-acceptance-top-up-link-funds-added"}]}]}]},{"group":"Deposit Destinations","tag":"Beta","pages":[{"title":"Deposit Destinations","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/deposit-destinations/deposit-destinations"},{"openapi":"get /v2/deposit-destinations/{depositDestinationId}","title":"Get deposit destination","href":"/api-reference/v2/rest-api/deposit-destinations/get-deposit-destination"},{"openapi":"get /v2/deposit-destinations","title":"List deposit destinations","href":"/api-reference/v2/rest-api/deposit-destinations/list-deposit-destinations"},{"openapi":"post /v2/deposit-destinations","title":"Create deposit destination","href":"/api-reference/v2/rest-api/deposit-destinations/create-deposit-destination"},{"group":"Webhooks","pages":[{"openapi":"webhook paymentsDepositDestinationsActivated","sidebarTitle":"Deposit destination activated","title":"Deposit destination activated","href":"/api-reference/v2/webhooks/webhook-payments-deposit-destinations-activated"},{"openapi":"webhook paymentsDepositDestinationsDeactivated","sidebarTitle":"Deposit destination deactivated","title":"Deposit destination deactivated","href":"/api-reference/v2/webhooks/webhook-payments-deposit-destinations-deactivated"},{"openapi":"webhook paymentsDepositDestinationsInitiated","sidebarTitle":"Deposit destination initiated","title":"Deposit destination initiated","href":"/api-reference/v2/webhooks/webhook-payments-deposit-destinations-initiated"}]}]},{"group":"Payment Methods","tag":"Beta","pages":[{"title":"Payment Methods","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/payment-methods/payment-methods"},{"openapi":"get /v2/payment-methods/{paymentMethodId}","title":"Get payment method","href":"/api-reference/v2/rest-api/payment-methods/get-payment-method"},{"openapi":"get /v2/payment-methods","title":"List payment methods","href":"/api-reference/v2/rest-api/payment-methods/list-payment-methods"}]},{"group":"Transfers","tag":"Beta","pages":[{"title":"Transfers","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/transfers/transfers"},{"openapi":"get /v2/transfers/{transferId}","title":"Get transfer","href":"/api-reference/v2/rest-api/transfers/get-transfer"},{"openapi":"get /v2/transfers","title":"List transfers","href":"/api-reference/v2/rest-api/transfers/list-transfers"},{"openapi":"post /v2/transfers","title":"Create transfer","href":"/api-reference/v2/rest-api/transfers/create-transfer"},{"openapi":"post /v2/transfers/{transferId}/execute","title":"Execute transfer","href":"/api-reference/v2/rest-api/transfers/execute-transfer"},{"openapi":"post /v2/transfers/{transferId}/travel-rule","title":"Submit deposit travel rule information","href":"/api-reference/v2/rest-api/transfers/submit-deposit-travel-rule-information"},{"group":"Webhooks","pages":[{"openapi":"webhook paymentsTransfersCompleted","sidebarTitle":"Payments transfers completed","title":"Payments transfers completed","href":"/api-reference/v2/webhooks/webhook-payments-transfers-completed"},{"openapi":"webhook paymentsTransfersExpired","sidebarTitle":"Payments transfers expired","title":"Payments transfers expired","href":"/api-reference/v2/webhooks/webhook-payments-transfers-expired"},{"openapi":"webhook paymentsTransfersFailed","sidebarTitle":"Payments transfers failed","title":"Payments transfers failed","href":"/api-reference/v2/webhooks/webhook-payments-transfers-failed"},{"openapi":"webhook paymentsTransfersProcessing","sidebarTitle":"Payments transfers processing","title":"Payments transfers processing","href":"/api-reference/v2/webhooks/webhook-payments-transfers-processing"},{"openapi":"webhook paymentsTransfersQuoted","sidebarTitle":"Payments transfers quoted","title":"Payments transfers quoted","href":"/api-reference/v2/webhooks/webhook-payments-transfers-quoted"},{"openapi":"webhook paymentsTransfersTravelRuleCompleted","sidebarTitle":"Payments transfers travel rule completed","title":"Payments transfers travel rule completed","href":"/api-reference/v2/webhooks/webhook-payments-transfers-travel-rule-completed"},{"openapi":"webhook paymentsTransfersTravelRuleIncomplete","sidebarTitle":"Payments transfers travel rule incomplete","title":"Payments transfers travel rule incomplete","href":"/api-reference/v2/webhooks/webhook-payments-transfers-travel-rule-incomplete"}]}]},{"group":"Onramp","pages":[{"title":"Onramp","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/onramp/onramp"},{"openapi":"get /v2/onramp/orders/{orderId}","title":"Get an onramp order by ID","href":"/api-reference/v2/rest-api/onramp/get-an-onramp-order-by-id"},{"openapi":"post /v2/onramp/orders","title":"Create an onramp order","href":"/api-reference/v2/rest-api/onramp/create-an-onramp-order"},{"openapi":"post /v2/onramp/sessions","title":"Create an onramp session","href":"/api-reference/v2/rest-api/onramp/create-an-onramp-session"},{"openapi":"post /v2/onramp/limits","title":"Get onramp user limits","href":"/api-reference/v2/rest-api/onramp/get-onramp-user-limits"},{"openapi":"post /v2/onramp/verifications","title":"Initiate onramp verification","href":"/api-reference/v2/rest-api/onramp/initiate-onramp-verification"},{"openapi":"post /v2/onramp/limits/upgrade","title":"Request limit upgrade","href":"/api-reference/v2/rest-api/onramp/request-limit-upgrade"},{"openapi":"post /v2/onramp/verifications/{verificationId}/submit","title":"Submit onramp verification","href":"/api-reference/v2/rest-api/onramp/submit-onramp-verification"},{"group":"Webhooks","pages":[{"openapi":"webhook offrampTransactionCreated","sidebarTitle":"Offramp transaction created","title":"Offramp transaction created","href":"/api-reference/v2/webhooks/webhook-offramp-transaction-created"},{"openapi":"webhook offrampTransactionFailed","sidebarTitle":"Offramp transaction failed","title":"Offramp transaction failed","href":"/api-reference/v2/webhooks/webhook-offramp-transaction-failed"},{"openapi":"webhook offrampTransactionSuccess","sidebarTitle":"Offramp transaction succeeded","title":"Offramp transaction succeeded","href":"/api-reference/v2/webhooks/webhook-offramp-transaction-success"},{"openapi":"webhook offrampTransactionUpdated","sidebarTitle":"Offramp transaction updated","title":"Offramp transaction updated","href":"/api-reference/v2/webhooks/webhook-offramp-transaction-updated"},{"openapi":"webhook onrampTransactionCreated","sidebarTitle":"Onramp transaction created","title":"Onramp transaction created","href":"/api-reference/v2/webhooks/webhook-onramp-transaction-created"},{"openapi":"webhook onrampTransactionFailed","sidebarTitle":"Onramp transaction failed","title":"Onramp transaction failed","href":"/api-reference/v2/webhooks/webhook-onramp-transaction-failed"},{"openapi":"webhook onrampTransactionSuccess","sidebarTitle":"Onramp transaction succeeded","title":"Onramp transaction succeeded","href":"/api-reference/v2/webhooks/webhook-onramp-transaction-success"},{"openapi":"webhook onrampTransactionUpdated","sidebarTitle":"Onramp transaction updated","title":"Onramp transaction updated","href":"/api-reference/v2/webhooks/webhook-onramp-transaction-updated"}]}]},{"group":"Onramp (App2App)","pages":[{"title":"Onramp (App2App)","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/onramp-app2app/onramp-app2app"},{"openapi":"post /v2/onramp/mobile/attestation/challenges","title":"Create an onramp iOS attestation challenge","href":"/api-reference/v2/rest-api/onramp-app2app/create-an-onramp-ios-attestation-challenge"},{"openapi":"post /v2/onramp/mobile/sessions/challenges","title":"Create an onramp mobile challenge","href":"/api-reference/v2/rest-api/onramp-app2app/create-an-onramp-mobile-challenge"},{"openapi":"post /v2/onramp/mobile/sessions","title":"Create an onramp mobile session","href":"/api-reference/v2/rest-api/onramp-app2app/create-an-onramp-mobile-session"},{"openapi":"post /v2/onramp/mobile/attestation/registrations","title":"Register a device key for iOS App Attest","href":"/api-reference/v2/rest-api/onramp-app2app/register-a-device-key-for-ios-app-attest"}]},{"group":"x402 Facilitator","tag":"Beta","pages":[{"title":"x402 Facilitator","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/x402-facilitator/x402-facilitator"},{"openapi":"get /v2/x402/discovery/bundles/{bundleSlug}","title":"Get an x402 bundle","href":"/api-reference/v2/rest-api/x402-facilitator/get-an-x402-bundle"},{"openapi":"get /v2/x402/supported","title":"Get supported payment schemes and networks","href":"/api-reference/v2/rest-api/x402-facilitator/get-supported-payment-schemes-and-networks"},{"openapi":"get /v2/x402/discovery/merchant","title":"List merchant discovery info","href":"/api-reference/v2/rest-api/x402-facilitator/list-merchant-discovery-info"},{"openapi":"get /v2/x402/discovery/bundles","title":"List x402 bundles","href":"/api-reference/v2/rest-api/x402-facilitator/list-x402-bundles"},{"openapi":"get /v2/x402/discovery/resources","title":"List x402 resources","href":"/api-reference/v2/rest-api/x402-facilitator/list-x402-resources"},{"openapi":"get /v2/x402/discovery/search","title":"Search x402 resources","href":"/api-reference/v2/rest-api/x402-facilitator/search-x402-resources"},{"openapi":"post /v2/x402/discovery/mcp","title":"Handle MCP JSON-RPC request","href":"/api-reference/v2/rest-api/x402-facilitator/handle-mcp-json-rpc-request"},{"openapi":"post /v2/x402/settle","title":"Settle payment","href":"/api-reference/v2/rest-api/x402-facilitator/settle-payment"},{"openapi":"post /v2/x402/validate","title":"Validate x402 endpoint","href":"/api-reference/v2/rest-api/x402-facilitator/validate-x402-endpoint"},{"openapi":"post /v2/x402/verify","title":"Verify payment","href":"/api-reference/v2/rest-api/x402-facilitator/verify-payment"}]}]},{"group":"Trading","pages":[{"group":"EVM Swaps","tag":"Beta","pages":[{"title":"EVM Swaps","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/evm-swaps/evm-swaps"},{"openapi":"get /v2/evm/swaps/quote","title":"Get swap price estimate","href":"/api-reference/v2/rest-api/evm-swaps/get-swap-price-estimate"},{"openapi":"post /v2/evm/swaps","title":"Create swap quote","href":"/api-reference/v2/rest-api/evm-swaps/create-swap-quote"}]}]},{"group":"Onchain Tools","pages":[{"group":"EVM Token Balances","pages":[{"title":"EVM Token Balances","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/evm-token-balances/evm-token-balances"},{"openapi":"get /v2/evm/token-balances/{network}/{address}","title":"List EVM token balances","href":"/api-reference/v2/rest-api/evm-token-balances/list-evm-token-balances"}]},{"group":"Faucets","pages":[{"title":"Faucets","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/faucets/faucets"},{"openapi":"post /v2/evm/faucet","title":"Request funds on EVM test networks","href":"/api-reference/v2/rest-api/faucets/request-funds-on-evm-test-networks"},{"openapi":"post /v2/solana/faucet","title":"Request funds on Solana devnet","href":"/api-reference/v2/rest-api/faucets/request-funds-on-solana-devnet"}]},{"group":"Onchain Data","pages":[{"title":"Onchain Data","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/onchain-data/onchain-data"},{"openapi":"get /v2/data/evm/token-balances/{network}/{address}","title":"List EVM token balances","href":"/api-reference/v2/rest-api/onchain-data/list-evm-token-balances"},{"openapi":"get /v2/data/evm/token-ownership/{network}/{address}","title":"List token addresses for account","href":"/api-reference/v2/rest-api/onchain-data/list-token-addresses-for-account"},{"group":"Webhooks","pages":[{"openapi":"webhook onchainActivityDetected","sidebarTitle":"Onchain activity detected","title":"Onchain activity detected","href":"/api-reference/v2/webhooks/webhook-onchain-activity-detected"},{"openapi":"webhook walletActivityDetected","sidebarTitle":"Wallet activity detected","title":"Wallet activity detected","href":"/api-reference/v2/webhooks/webhook-wallet-activity-detected"},{"openapi":"webhook walletActivityMulti","sidebarTitle":"Wallet activity multi","title":"Wallet activity multi","href":"/api-reference/v2/webhooks/webhook-wallet-activity-multi"}]}]},{"group":"Solana Token Balances","pages":[{"title":"Solana Token Balances","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/solana-token-balances/solana-token-balances"},{"openapi":"get /v2/solana/token-balances/{network}/{address}","title":"List Solana token balances","href":"/api-reference/v2/rest-api/solana-token-balances/list-solana-token-balances"}]},{"group":"SQL API","pages":[{"title":"SQL API","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/sql-api/sql-api"},{"openapi":"get /v2/data/query/schema","title":"Get schema details","href":"/api-reference/v2/rest-api/sql-api/get-schema-details"},{"openapi":"get /v2/data/query/grammar","title":"Get SQL grammar","href":"/api-reference/v2/rest-api/sql-api/get-sql-grammar"},{"openapi":"post /v2/data/query/run","title":"Run SQL Query","href":"/api-reference/v2/rest-api/sql-api/run-sql-query"}]}]},{"group":"Customers","tag":"Beta","pages":[{"title":"Customers","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/customers/customers"},{"openapi":"get /v2/customers/{customerId}","title":"Get a customer","href":"/api-reference/v2/rest-api/customers/get-a-customer"},{"openapi":"get /v2/customers/requirements","title":"Get customer requirements","href":"/api-reference/v2/rest-api/customers/get-customer-requirements"},{"openapi":"get /v2/customers","title":"List customers","href":"/api-reference/v2/rest-api/customers/list-customers"},{"openapi":"post /v2/customers","title":"Create a customer","href":"/api-reference/v2/rest-api/customers/create-a-customer"},{"openapi":"put /v2/customers/{customerId}","title":"Update a customer","href":"/api-reference/v2/rest-api/customers/update-a-customer"},{"openapi":"delete /v2/customers/{customerId}","title":"Delete a customer","href":"/api-reference/v2/rest-api/customers/delete-a-customer"},{"group":"Webhooks","pages":[{"openapi":"webhook customersCustomerDeleted","sidebarTitle":"Customer deleted","title":"Customer deleted","href":"/api-reference/v2/webhooks/webhook-customers-customer-deleted"},{"openapi":"webhook customersCapabilityChanged","sidebarTitle":"Customers capability changed","title":"Customers capability changed","href":"/api-reference/v2/webhooks/webhook-customers-capability-changed"},{"openapi":"webhook customersRequirementChanged","sidebarTitle":"Customers requirement changed","title":"Customers requirement changed","href":"/api-reference/v2/webhooks/webhook-customers-requirement-changed"}]}]},{"group":"Health","tag":"Beta","pages":[{"title":"Health","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/health/health"},{"openapi":"webhook healthMaintenanceCanceled","sidebarTitle":"Maintenance canceled","title":"Maintenance canceled","href":"/api-reference/v2/webhooks/webhook-health-maintenance-canceled"},{"openapi":"webhook healthMaintenanceCompleted","sidebarTitle":"Maintenance completed","title":"Maintenance completed","href":"/api-reference/v2/webhooks/webhook-health-maintenance-completed"},{"openapi":"webhook healthMaintenanceScheduled","sidebarTitle":"Maintenance scheduled","title":"Maintenance scheduled","href":"/api-reference/v2/webhooks/webhook-health-maintenance-scheduled"},{"openapi":"webhook healthMaintenanceStarted","sidebarTitle":"Maintenance started","title":"Maintenance started","href":"/api-reference/v2/webhooks/webhook-health-maintenance-started"},{"openapi":"webhook healthStatusUpdated","sidebarTitle":"Service health updated","title":"Service health updated","href":"/api-reference/v2/webhooks/webhook-health-status-updated"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","sidebarTitle":"Overview","href":"/api-reference/v2/rest-api/webhooks/webhooks"},{"openapi":"get /v2/data/webhooks/subscriptions/{subscriptionId}","title":"Get webhook subscription","href":"/api-reference/v2/rest-api/webhooks/get-webhook-subscription"},{"openapi":"get /v2/data/webhooks/subscriptions/{subscriptionId}/events","title":"List webhook subscription events","href":"/api-reference/v2/rest-api/webhooks/list-webhook-subscription-events"},{"openapi":"get /v2/data/webhooks/subscriptions","title":"List webhook subscriptions","href":"/api-reference/v2/rest-api/webhooks/list-webhook-subscriptions"},{"openapi":"post /v2/data/webhooks/subscriptions","title":"Create webhook subscription","href":"/api-reference/v2/rest-api/webhooks/create-webhook-subscription"},{"openapi":"put /v2/data/webhooks/subscriptions/{subscriptionId}","title":"Update webhook subscription","href":"/api-reference/v2/rest-api/webhooks/update-webhook-subscription"},{"openapi":"delete /v2/data/webhooks/subscriptions/{subscriptionId}","title":"Delete webhook subscription","href":"/api-reference/v2/rest-api/webhooks/delete-webhook-subscription"}]}]}]},{"dropdown":"Coinbase Advanced Trade API","icon":"https://mintlify-assets.b-cdn.net/advancedTradeProduct-1.svg","groups":[{"group":"Get Started","pages":[{"title":"Coinbase Advanced Trade API","sidebarTitle":"Overview","href":"/api-reference/advanced-trade-api/rest-api/introduction"}]},{"group":"Spot \u0026 US Derivatives - REST","pages":[{"group":"Accounts","pages":[{"title":"Get Account","openapi":"GET /api/v3/brokerage/accounts/{account_uuid}","href":"/api-reference/advanced-trade-api/rest-api/accounts/get-account"},{"title":"List Accounts","openapi":"GET /api/v3/brokerage/accounts","href":"/api-reference/advanced-trade-api/rest-api/accounts/list-accounts"}]},{"group":"Convert","pages":[{"title":"Commit Convert Trade","openapi":"POST /api/v3/brokerage/convert/trade/{trade_id}","href":"/api-reference/advanced-trade-api/rest-api/convert/commit-convert-trade"},{"title":"Create Convert Quote","openapi":"POST /api/v3/brokerage/convert/quote","href":"/api-reference/advanced-trade-api/rest-api/convert/create-convert-quote"},{"title":"Get Convert Trade","openapi":"GET /api/v3/brokerage/convert/trade/{trade_id}","href":"/api-reference/advanced-trade-api/rest-api/convert/get-convert-trade"}]},{"group":"Data API","pages":[{"title":"Get API Key Permissions","openapi":"GET /api/v3/brokerage/key_permissions","href":"/api-reference/advanced-trade-api/rest-api/data-api/get-api-key-permissions"}]},{"group":"Fees","pages":[{"title":"Get Transaction Summary","openapi":"GET /api/v3/brokerage/transaction_summary","href":"/api-reference/advanced-trade-api/rest-api/fees/get-transaction-summary"}]},{"group":"US Derivatives","pages":[{"title":"Cancel Pending US Derivatives Sweep","openapi":"DELETE /api/v3/brokerage/cfm/sweeps","href":"/api-reference/advanced-trade-api/rest-api/futures/cancel-pending-futures-sweep"},{"title":"Get Current Margin Window","openapi":"GET /api/v3/brokerage/cfm/intraday/current_margin_window","href":"/api-reference/advanced-trade-api/rest-api/futures/get-current-margin-window"},{"title":"Get US Derivatives Balance Summary","openapi":"GET /api/v3/brokerage/cfm/balance_summary","href":"/api-reference/advanced-trade-api/rest-api/futures/get-futures-balance-summary"},{"title":"Get US Derivatives Position","openapi":"GET /api/v3/brokerage/cfm/positions/{product_id}","href":"/api-reference/advanced-trade-api/rest-api/futures/get-futures-position"},{"title":"Get Intraday Margin Setting","openapi":"GET /api/v3/brokerage/cfm/intraday/margin_setting","href":"/api-reference/advanced-trade-api/rest-api/futures/get-intraday-margin-setting"},{"title":"List US Derivatives Positions","openapi":"GET /api/v3/brokerage/cfm/positions","href":"/api-reference/advanced-trade-api/rest-api/futures/list-futures-positions"},{"title":"List US Derivatives Sweeps","openapi":"GET /api/v3/brokerage/cfm/sweeps","href":"/api-reference/advanced-trade-api/rest-api/futures/list-futures-sweeps"},{"title":"Schedule US Derivatives Sweep","openapi":"POST /api/v3/brokerage/cfm/sweeps/schedule","href":"/api-reference/advanced-trade-api/rest-api/futures/schedule-futures-sweep"},{"title":"Set Intraday Margin Setting","openapi":"POST /api/v3/brokerage/cfm/intraday/margin_setting","href":"/api-reference/advanced-trade-api/rest-api/futures/set-intraday-margin-settings"}]},{"group":"Orders","pages":[{"title":"Cancel Orders","openapi":"POST /api/v3/brokerage/orders/batch_cancel","href":"/api-reference/advanced-trade-api/rest-api/orders/cancel-order"},{"title":"Close Position","openapi":"POST /api/v3/brokerage/orders/close_position","href":"/api-reference/advanced-trade-api/rest-api/orders/close-position"},{"title":"Create Order","openapi":"POST /api/v3/brokerage/orders","href":"/api-reference/advanced-trade-api/rest-api/orders/create-order"},{"title":"Edit Order","openapi":"POST /api/v3/brokerage/orders/edit","href":"/api-reference/advanced-trade-api/rest-api/orders/edit-order"},{"title":"Edit Order Preview","openapi":"POST /api/v3/brokerage/orders/edit_preview","href":"/api-reference/advanced-trade-api/rest-api/orders/edit-order-preview"},{"title":"Get Order","openapi":"GET /api/v3/brokerage/orders/historical/{order_id}","href":"/api-reference/advanced-trade-api/rest-api/orders/get-order"},{"title":"List Fills","openapi":"GET /api/v3/brokerage/orders/historical/fills","href":"/api-reference/advanced-trade-api/rest-api/orders/list-fills"},{"title":"List Orders","openapi":"GET /api/v3/brokerage/orders/historical/batch","href":"/api-reference/advanced-trade-api/rest-api/orders/list-orders"},{"title":"Preview Order","openapi":"POST /api/v3/brokerage/orders/preview","href":"/api-reference/advanced-trade-api/rest-api/orders/preview-orders"}]},{"group":"Payment Methods","pages":[{"title":"Get Payment Method","openapi":"GET /api/v3/brokerage/payment_methods/{payment_method_id}","href":"/api-reference/advanced-trade-api/rest-api/payment-methods/get-payment-method"},{"title":"List Payment Methods","openapi":"GET /api/v3/brokerage/payment_methods","href":"/api-reference/advanced-trade-api/rest-api/payment-methods/list-payment-methods"}]},{"group":"INTX (deprecated)","pages":[{"title":"Allocate Portfolio","openapi":"POST /api/v3/brokerage/intx/allocate","href":"/api-reference/advanced-trade-api/rest-api/perpetuals/allocate-portfolio"},{"title":"Get Perpetuals Portfolio Summary","openapi":"GET /api/v3/brokerage/intx/portfolio/{portfolio_uuid}","href":"/api-reference/advanced-trade-api/rest-api/perpetuals/get-perpetuals-portfolio-summary"},{"title":"Get Perpetuals Position","openapi":"GET /api/v3/brokerage/intx/positions/{portfolio_uuid}/{symbol}","href":"/api-reference/advanced-trade-api/rest-api/perpetuals/get-perpetuals-position"},{"title":"Get Portfolios Balances","openapi":"GET /api/v3/brokerage/intx/balances/{portfolio_uuid}","href":"/api-reference/advanced-trade-api/rest-api/perpetuals/get-portfolio-balances"},{"title":"List Perpetuals Positions","openapi":"GET /api/v3/brokerage/intx/positions/{portfolio_uuid}","href":"/api-reference/advanced-trade-api/rest-api/perpetuals/list-perpetuals-positions"},{"title":"Opt In or Out of Multi Asset Collateral","openapi":"POST /api/v3/brokerage/intx/multi_asset_collateral","href":"/api-reference/advanced-trade-api/rest-api/perpetuals/opt-in-or-out"}]},{"group":"Portfolios","pages":[{"title":"Create Portfolio","openapi":"POST /api/v3/brokerage/portfolios","href":"/api-reference/advanced-trade-api/rest-api/portfolios/create-portfolio"},{"title":"Delete Portfolio","openapi":"DELETE /api/v3/brokerage/portfolios/{portfolio_uuid}","href":"/api-reference/advanced-trade-api/rest-api/portfolios/delete-portfolio"},{"title":"Edit Portfolio","openapi":"PUT /api/v3/brokerage/portfolios/{portfolio_uuid}","href":"/api-reference/advanced-trade-api/rest-api/portfolios/edit-portfolio"},{"title":"Get Portfolio Breakdown","openapi":"GET /api/v3/brokerage/portfolios/{portfolio_uuid}","href":"/api-reference/advanced-trade-api/rest-api/portfolios/get-portfolio-breakdown"},{"title":"List Portfolios","openapi":"GET /api/v3/brokerage/portfolios","href":"/api-reference/advanced-trade-api/rest-api/portfolios/list-portfolios"},{"title":"Move Portfolio Funds","openapi":"POST /api/v3/brokerage/portfolios/move_funds","href":"/api-reference/advanced-trade-api/rest-api/portfolios/move-portfolios-funds"}]},{"group":"Products","pages":[{"title":"Get Best Bid/Ask","openapi":"GET /api/v3/brokerage/best_bid_ask","href":"/api-reference/advanced-trade-api/rest-api/products/get-best-bid-ask"},{"title":"Get Market Trades","openapi":"GET /api/v3/brokerage/products/{product_id}/ticker","href":"/api-reference/advanced-trade-api/rest-api/products/get-market-trades"},{"title":"Get Product","openapi":"GET /api/v3/brokerage/products/{product_id}","href":"/api-reference/advanced-trade-api/rest-api/products/get-product"},{"title":"Get Product Book","openapi":"GET /api/v3/brokerage/product_book","href":"/api-reference/advanced-trade-api/rest-api/products/get-product-book"},{"title":"Get Product Candles","openapi":"GET /api/v3/brokerage/products/{product_id}/candles","href":"/api-reference/advanced-trade-api/rest-api/products/get-product-candles"},{"title":"List Products","openapi":"GET /api/v3/brokerage/products","href":"/api-reference/advanced-trade-api/rest-api/products/list-products"}]},{"group":"Public","pages":[{"title":"Get Public Market Trades","openapi":"GET /api/v3/brokerage/market/products/{product_id}/ticker","href":"/api-reference/advanced-trade-api/rest-api/public/get-public-market-trades"},{"title":"Get Public Product","openapi":"GET /api/v3/brokerage/market/products/{product_id}","href":"/api-reference/advanced-trade-api/rest-api/public/get-public-product"},{"title":"Get Public Product Book","openapi":"GET /api/v3/brokerage/market/product_book","href":"/api-reference/advanced-trade-api/rest-api/public/get-public-product-book"},{"title":"Get Public Product Candles","openapi":"GET /api/v3/brokerage/market/products/{product_id}/candles","href":"/api-reference/advanced-trade-api/rest-api/public/get-public-product-candles"},{"title":"Get Server Time","openapi":"GET /api/v3/brokerage/time","href":"/api-reference/advanced-trade-api/rest-api/public/get-server-time"},{"title":"List Public Products","openapi":"GET /api/v3/brokerage/market/products","href":"/api-reference/advanced-trade-api/rest-api/public/list-public-products"}]}]},{"group":"Spot \u0026 US Derivatives - WS Streams","pages":[{"group":"Market Data","pages":[{"title":"Heartbeats","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json heartbeats","href":"/api-reference/advanced-trade-api/websocket/heartbeats"},{"title":"Candles","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json candles","href":"/api-reference/advanced-trade-api/websocket/candles"},{"title":"Product status","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json status","href":"/api-reference/advanced-trade-api/websocket/product-status"},{"title":"Ticker","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json ticker","href":"/api-reference/advanced-trade-api/websocket/ticker"},{"title":"Ticker (batched)","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json ticker_batch","href":"/api-reference/advanced-trade-api/websocket/ticker-batch"},{"title":"Level 2 order book","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json level2","href":"/api-reference/advanced-trade-api/websocket/level2"},{"title":"Market trades","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json market_trades","href":"/api-reference/advanced-trade-api/websocket/market-trades"}]},{"group":"Private","pages":[{"title":"User orders and positions","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json user","href":"/api-reference/advanced-trade-api/websocket/user"},{"title":"Futures balance summary","asyncapi":"api-reference/advanced-trade-api/advanced-trade-asyncapi.json futures_balance_summary","href":"/api-reference/advanced-trade-api/websocket/futures-balance-summary"}]}]},{"group":"Global Derivatives - REST / WS","pages":[{"group":"Trading","pages":[{"title":"private/buy","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/buy","href":"/api-reference/trading/private-buy"},{"title":"private/cancel","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/cancel","href":"/api-reference/trading/private-cancel"},{"title":"private/cancel_all","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/cancel_all","href":"/api-reference/trading/private-cancel_all"},{"title":"private/cancel_all_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/cancel_all_by_currency","href":"/api-reference/trading/private-cancel_all_by_currency"},{"title":"private/cancel_all_by_currency_pair","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/cancel_all_by_currency_pair","href":"/api-reference/trading/private-cancel_all_by_currency_pair"},{"title":"private/cancel_all_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/cancel_all_by_instrument","href":"/api-reference/trading/private-cancel_all_by_instrument"},{"title":"private/cancel_all_by_kind_or_type","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/cancel_all_by_kind_or_type","href":"/api-reference/trading/private-cancel_all_by_kind_or_type"},{"title":"private/cancel_by_label","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/cancel_by_label","href":"/api-reference/trading/private-cancel_by_label"},{"title":"private/close_position","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/close_position","href":"/api-reference/trading/private-close_position"},{"title":"private/edit","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/edit","href":"/api-reference/trading/private-edit"},{"title":"private/edit_by_label","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/edit_by_label","href":"/api-reference/trading/private-edit_by_label"},{"title":"private/get_margins","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_margins","href":"/api-reference/trading/private-get_margins"},{"title":"private/get_max_order_size","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_max_order_size","href":"/api-reference/trading/private-get_max_order_size"},{"title":"private/get_open_orders","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_open_orders","href":"/api-reference/trading/private-get_open_orders"},{"title":"private/get_open_orders_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_open_orders_by_currency","href":"/api-reference/trading/private-get_open_orders_by_currency"},{"title":"private/get_open_orders_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_open_orders_by_instrument","href":"/api-reference/trading/private-get_open_orders_by_instrument"},{"title":"private/get_open_orders_by_label","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_open_orders_by_label","href":"/api-reference/trading/private-get_open_orders_by_label"},{"title":"private/get_order_history_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_order_history_by_currency","href":"/api-reference/trading/private-get_order_history_by_currency"},{"title":"private/get_order_history_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_order_history_by_instrument","href":"/api-reference/trading/private-get_order_history_by_instrument"},{"title":"private/get_order_margin_by_ids","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_order_margin_by_ids","href":"/api-reference/trading/private-get_order_margin_by_ids"},{"title":"private/get_order_state","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_order_state","href":"/api-reference/trading/private-get_order_state"},{"title":"private/get_order_state_by_label","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_order_state_by_label","href":"/api-reference/trading/private-get_order_state_by_label"},{"title":"private/get_settlement_history_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_settlement_history_by_currency","href":"/api-reference/trading/private-get_settlement_history_by_currency"},{"title":"private/get_settlement_history_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_settlement_history_by_instrument","href":"/api-reference/trading/private-get_settlement_history_by_instrument"},{"title":"private/get_trigger_order_history","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_trigger_order_history","href":"/api-reference/trading/private-get_trigger_order_history"},{"title":"private/get_user_trades_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_user_trades_by_currency","href":"/api-reference/trading/private-get_user_trades_by_currency"},{"title":"private/get_user_trades_by_currency_and_time","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_user_trades_by_currency_and_time","href":"/api-reference/trading/private-get_user_trades_by_currency_and_time"},{"title":"private/get_user_trades_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_user_trades_by_instrument","href":"/api-reference/trading/private-get_user_trades_by_instrument"},{"title":"private/get_user_trades_by_instrument_and_time","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_user_trades_by_instrument_and_time","href":"/api-reference/trading/private-get_user_trades_by_instrument_and_time"},{"title":"private/get_user_trades_by_order","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_user_trades_by_order","href":"/api-reference/trading/private-get_user_trades_by_order"},{"title":"private/sell","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/sell","href":"/api-reference/trading/private-sell"},{"title":"private/set_leverage","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/set_leverage","href":"/api-reference/trading/private-set_leverage"}]},{"group":"Account Management","pages":[{"title":"private/change_margin_model","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/change_margin_model","href":"/api-reference/account-management/private-change_margin_model"},{"title":"private/get_access_log","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_access_log","href":"/api-reference/account-management/private-get_access_log"},{"title":"private/get_account_summaries","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_account_summaries","href":"/api-reference/account-management/private-get_account_summaries"},{"title":"private/get_account_summary","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_account_summary","href":"/api-reference/account-management/private-get_account_summary"},{"title":"private/get_leverage","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_leverage","href":"/api-reference/account-management/private-get_leverage"},{"title":"private/get_pme_params","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_pme_params","href":"/api-reference/account-management/private-get_pme_params"},{"title":"private/get_position","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_position","href":"/api-reference/account-management/private-get_position"},{"title":"private/get_positions","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_positions","href":"/api-reference/account-management/private-get_positions"},{"title":"private/get_risk_profile","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_risk_profile","href":"/api-reference/account-management/private-get_risk_profile"},{"title":"private/get_subaccounts","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_subaccounts","href":"/api-reference/account-management/private-get_subaccounts"},{"title":"private/get_subaccounts_details","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_subaccounts_details","href":"/api-reference/account-management/private-get_subaccounts_details"},{"title":"private/get_trading_limits","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_trading_limits","href":"/api-reference/account-management/private-get_trading_limits"},{"title":"private/get_transaction_log","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_transaction_log","href":"/api-reference/account-management/private-get_transaction_log"},{"title":"private/get_user_locks","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_user_locks","href":"/api-reference/account-management/private-get_user_locks"},{"title":"private/pme/simulate","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/pme/simulate","href":"/api-reference/account-management/private-simulate"},{"title":"private/simulate_portfolio","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/simulate_portfolio","href":"/api-reference/account-management/private-simulate_portfolio"},{"title":"public/get_announcements","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_announcements","href":"/api-reference/account-management/public-get_announcements"}]},{"group":"Combo Books","pages":[{"title":"private/create_combo","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/create_combo","href":"/api-reference/combo-books/private-create_combo"},{"title":"private/get_leg_prices","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_leg_prices","href":"/api-reference/combo-books/private-get_leg_prices"},{"title":"public/get_combo_details","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_combo_details","href":"/api-reference/combo-books/public-get_combo_details"},{"title":"public/get_combo_ids","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_combo_ids","href":"/api-reference/combo-books/public-get_combo_ids"},{"title":"public/get_combos","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_combos","href":"/api-reference/combo-books/public-get_combos"}]},{"group":"Session Management","pages":[{"title":"private/disable_cancel_on_disconnect","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/disable_cancel_on_disconnect","href":"/api-reference/session-management/private-disable_cancel_on_disconnect"},{"title":"private/enable_cancel_on_disconnect","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/enable_cancel_on_disconnect","href":"/api-reference/session-management/private-enable_cancel_on_disconnect"},{"title":"private/get_cancel_on_disconnect","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/get_cancel_on_disconnect","href":"/api-reference/session-management/private-get_cancel_on_disconnect"},{"title":"public/disable_heartbeat","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/disable_heartbeat","href":"/api-reference/session-management/public-disable_heartbeat"},{"title":"public/set_heartbeat","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/set_heartbeat","href":"/api-reference/session-management/public-set_heartbeat"}]},{"group":"Authentication","pages":[{"title":"private/logout","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/logout","href":"/api-reference/authentication/private-logout"},{"title":"public/auth","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json post /public/auth","href":"/api-reference/coinbase-deribit-app-api/rest-api/authentication/post-publicauth"}]},{"group":"Wallet","pages":[{"title":"private/submit_transfer_between_subaccounts","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/submit_transfer_between_subaccounts","href":"/api-reference/wallet/private-submit_transfer_between_subaccounts"}]},{"group":"Subscription Management","pages":[{"title":"private/subscribe","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/subscribe","href":"/api-reference/subscription-management/private-subscribe"},{"title":"private/unsubscribe","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/unsubscribe","href":"/api-reference/subscription-management/private-unsubscribe"},{"title":"private/unsubscribe_all","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /private/unsubscribe_all","href":"/api-reference/subscription-management/private-unsubscribe_all"},{"title":"public/subscribe","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/subscribe","href":"/api-reference/subscription-management/public-subscribe"},{"title":"public/unsubscribe","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/unsubscribe","href":"/api-reference/subscription-management/public-unsubscribe"},{"title":"public/unsubscribe_all","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/unsubscribe_all","href":"/api-reference/subscription-management/public-unsubscribe_all"}]},{"group":"Market Data","pages":[{"title":"public/get_book_summary_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_book_summary_by_currency","href":"/api-reference/market-data/public-get_book_summary_by_currency"},{"title":"public/get_book_summary_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_book_summary_by_instrument","href":"/api-reference/market-data/public-get_book_summary_by_instrument"},{"title":"public/get_contract_size","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_contract_size","href":"/api-reference/market-data/public-get_contract_size"},{"title":"public/get_currencies","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_currencies","href":"/api-reference/market-data/public-get_currencies"},{"title":"public/get_delivery_prices","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_delivery_prices","href":"/api-reference/market-data/public-get_delivery_prices"},{"title":"public/get_expirations","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_expirations","href":"/api-reference/market-data/public-get_expirations"},{"title":"public/get_funding_chart_data","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_funding_chart_data","href":"/api-reference/market-data/public-get_funding_chart_data"},{"title":"public/get_funding_rate_history","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_funding_rate_history","href":"/api-reference/market-data/public-get_funding_rate_history"},{"title":"public/get_funding_rate_value","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_funding_rate_value","href":"/api-reference/market-data/public-get_funding_rate_value"},{"title":"public/get_historical_volatility","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_historical_volatility","href":"/api-reference/market-data/public-get_historical_volatility"},{"title":"public/get_index_chart_data","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_index_chart_data","href":"/api-reference/market-data/public-get_index_chart_data"},{"title":"public/get_index_price","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_index_price","href":"/api-reference/market-data/public-get_index_price"},{"title":"public/get_index_price_names","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_index_price_names","href":"/api-reference/market-data/public-get_index_price_names"},{"title":"public/get_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_instrument","href":"/api-reference/market-data/public-get_instrument"},{"title":"public/get_instruments","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_instruments","href":"/api-reference/market-data/public-get_instruments"},{"title":"public/get_last_settlements_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_last_settlements_by_currency","href":"/api-reference/market-data/public-get_last_settlements_by_currency"},{"title":"public/get_last_settlements_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_last_settlements_by_instrument","href":"/api-reference/market-data/public-get_last_settlements_by_instrument"},{"title":"public/get_last_trades_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_last_trades_by_currency","href":"/api-reference/market-data/public-get_last_trades_by_currency"},{"title":"public/get_last_trades_by_currency_and_time","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_last_trades_by_currency_and_time","href":"/api-reference/market-data/public-get_last_trades_by_currency_and_time"},{"title":"public/get_last_trades_by_instrument","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_last_trades_by_instrument","href":"/api-reference/market-data/public-get_last_trades_by_instrument"},{"title":"public/get_last_trades_by_instrument_and_time","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_last_trades_by_instrument_and_time","href":"/api-reference/market-data/public-get_last_trades_by_instrument_and_time"},{"title":"public/get_mark_price_history","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_mark_price_history","href":"/api-reference/market-data/public-get_mark_price_history"},{"title":"public/get_order_book","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_order_book","href":"/api-reference/market-data/public-get_order_book"},{"title":"public/get_order_book_by_instrument_id","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_order_book_by_instrument_id","href":"/api-reference/market-data/public-get_order_book_by_instrument_id"},{"title":"public/get_supported_index_names","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_supported_index_names","href":"/api-reference/market-data/public-get_supported_index_names"},{"title":"public/get_trade_volumes","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_trade_volumes","href":"/api-reference/market-data/public-get_trade_volumes"},{"title":"public/get_tradingview_chart_data","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_tradingview_chart_data","href":"/api-reference/market-data/public-get_tradingview_chart_data"},{"title":"public/get_volatility_index_data","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_volatility_index_data","href":"/api-reference/market-data/public-get_volatility_index_data"},{"title":"public/ticker","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/ticker","href":"/api-reference/market-data/public-ticker"},{"title":"public/tickers_by_currency","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/tickers_by_currency","href":"/api-reference/market-data/public-tickers_by_currency"}]},{"group":"Supporting","pages":[{"title":"public/get_time","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/get_time","href":"/api-reference/supporting/public-get_time"},{"title":"public/hello","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/hello","href":"/api-reference/supporting/public-hello"},{"title":"public/status","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/status","href":"/api-reference/supporting/public-status"},{"title":"public/test","deprecated":null,"version":null,"openapi":"/api-reference/coinbase-deribit-app-api/adv-starbase-openapi.json get /public/test","href":"/api-reference/supporting/public-test"}]}]},{"group":"Global Derivatives - WS Streams","pages":[{"group":"Announcements","pages":[{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json announcements","href":"/api-reference/coinbase-deribit-app-api/websocket/announcements/announcements","title":"announcements ","version":null}]},{"group":"Orderbook","pages":[{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json book.(instrument_name).(group).(depth).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/orderbook/bookinstrument_namegroupdepthinterval","title":"book.(instrument_name).(group).(depth).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json book.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/orderbook/bookinstrument_nameinterval","title":"book.(instrument_name).(interval) ","version":null}]},{"group":"Market Data","pages":[{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json chart.trades.(instrument_name).(resolution)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/charttradesinstrument_nameresolution","title":"chart.trades.(instrument_name).(resolution) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json deribit_price_index.(index_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/deribit_price_indexindex_name","title":"deribit_price_index.(index_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json deribit_price_ranking.(index_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/deribit_price_rankingindex_name","title":"deribit_price_ranking.(index_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json deribit_price_statistics.(index_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/deribit_price_statisticsindex_name","title":"deribit_price_statistics.(index_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json deribit_volatility_index.(index_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/deribit_volatility_indexindex_name","title":"deribit_volatility_index.(index_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json estimated_expiration_price.(index_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/estimated_expiration_priceindex_name","title":"estimated_expiration_price.(index_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json incremental_ticker.(instrument_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/incremental_tickerinstrument_name","title":"incremental_ticker.(instrument_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json instrument.creation.(kind).(currency)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/instrumentcreationkindcurrency","title":"instrument.creation.(kind).(currency) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json instrument.state.(kind).(currency)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/instrumentstatekindcurrency","title":"instrument.state.(kind).(currency) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json markprice.options.(index_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/markpriceoptionsindex_name","title":"markprice.options.(index_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json perpetual.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/perpetualinstrument_nameinterval","title":"perpetual.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json quote.(instrument_name)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/quoteinstrument_name","title":"quote.(instrument_name) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json ticker.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/market-data/tickerinstrument_nameinterval","title":"ticker.(instrument_name).(interval) ","version":null}]},{"group":"Platform","pages":[{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json platform_state","href":"/api-reference/coinbase-deribit-app-api/websocket/platform/platform_state","title":"platform_state ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json platform_state.public_methods_state","href":"/api-reference/coinbase-deribit-app-api/websocket/platform/platform_statepublic_methods_state","title":"platform_state.public_methods_state ","version":null}]},{"group":"Trades","pages":[{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json trades.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/trades/tradesinstrument_nameinterval","title":"trades.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json trades.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/trades/tradeskindcurrencyinterval","title":"trades.(kind).(currency).(interval) ","version":null}]},{"group":"User","pages":[{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.access_log","href":"/api-reference/coinbase-deribit-app-api/websocket/user/useraccess_log","title":"user.access_log ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.changes.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userchangesinstrument_nameinterval","title":"user.changes.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.changes.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userchangeskindcurrencyinterval","title":"user.changes.(kind).(currency).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.combo_trades.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/usercombo_tradesinstrument_nameinterval","title":"user.combo_trades.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.combo_trades.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/usercombo_tradeskindcurrencyinterval","title":"user.combo_trades.(kind).(currency).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.changes.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedchangesinstrument_nameinterval","title":"user.isolated.changes.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.changes.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedchangeskindcurrencyinterval","title":"user.isolated.changes.(kind).(currency).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.liquidation","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedliquidation","title":"user.isolated.liquidation ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.orders.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedordersinstrument_nameinterval","title":"user.isolated.orders.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.orders.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedorderskindcurrencyinterval","title":"user.isolated.orders.(kind).(currency).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.portfolio.(currency)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedportfoliocurrency","title":"user.isolated.portfolio.(currency) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.trades.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedtradesinstrument_nameinterval","title":"user.isolated.trades.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.isolated.trades.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userisolatedtradeskindcurrencyinterval","title":"user.isolated.trades.(kind).(currency).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.lock","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userlock","title":"user.lock ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.orders.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userordersinstrument_nameinterval","title":"user.orders.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.orders.(instrument_name).raw","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userordersinstrument_nameraw","title":"user.orders.(instrument_name).raw ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.orders.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userorderskindcurrencyinterval","title":"user.orders.(kind).(currency).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.orders.(kind).(currency).raw","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userorderskindcurrencyraw","title":"user.orders.(kind).(currency).raw ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.portfolio.(currency)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userportfoliocurrency","title":"user.portfolio.(currency) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.position_lock","href":"/api-reference/coinbase-deribit-app-api/websocket/user/userposition_lock","title":"user.position_lock ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.trades.(instrument_name).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/usertradesinstrument_nameinterval","title":"user.trades.(instrument_name).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.trades.(kind).(currency).(interval)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/usertradeskindcurrencyinterval","title":"user.trades.(kind).(currency).(interval) ","version":null},{"asyncapi":"api-reference/coinbase-deribit-app-api/adv-starbase-asyncapi.json user.trailing_orders.trigger_price.(currency)","href":"/api-reference/coinbase-deribit-app-api/websocket/user/usertrailing_orderstrigger_pricecurrency","title":"user.trailing_orders.trigger_price.(currency) ","version":null}]}]}]},{"dropdown":"Coinbase Business API","icon":"https://mintlify-assets.b-cdn.net/coinbase-0.svg","groups":[{"group":"REST API","pages":[{"title":"Welcome to Coinbase Business API","sidebarTitle":"Overview","href":"/api-reference/business-api/rest-api/introduction"},{"group":"Checkouts","pages":[{"title":"Checkouts API Reference","sidebarTitle":"Overview","href":"/api-reference/business-api/rest-api/checkouts/introduction"},{"openapi":"post /api/v1/checkouts","playground":"simple","title":"Create Checkout","href":"/api-reference/business-api/rest-api/checkouts/create-checkout"},{"openapi":"get /api/v1/checkouts","playground":"simple","title":"List Checkouts","href":"/api-reference/business-api/rest-api/checkouts/list-checkouts"},{"openapi":"get /api/v1/checkouts/{id}","playground":"simple","title":"Get Checkout","href":"/api-reference/business-api/rest-api/checkouts/get-checkout"},{"openapi":"post /api/v1/checkouts/{id}/deactivate","playground":"simple","title":"Deactivate Checkout","href":"/api-reference/business-api/rest-api/checkouts/deactivate-checkout"},{"openapi":"post /api/v1/checkouts/{id}/refund","playground":"simple","title":"Refund Checkout","href":"/api-reference/business-api/rest-api/checkouts/refund-checkout"}]},{"group":"Invoicing","pages":[{"title":"Invoicing API Reference","sidebarTitle":"Overview","href":"/api-reference/business-api/rest-api/invoicing/introduction"},{"openapi":"get /api/v1/invoices","playground":"simple","title":"List Invoices","href":"/api-reference/business-api/rest-api/invoicing/list-invoices"},{"openapi":"get /api/v1/invoices/{invoiceUuid}","playground":"simple","title":"Get Invoice","href":"/api-reference/business-api/rest-api/invoicing/get-invoice"}]},{"group":"Advanced Trade APIs","pages":[{"title":"API Reference","url":"/api-reference/advanced-trade-api/rest-api/introduction","href":"/coinbase-business/advanced-trade-apis/api-reference"}]},{"group":"Transfer APIs","pages":[{"title":"Send Crypto","href":"/coinbase-business/transfer-apis/send-crypto"},{"title":"Onchain Addresses","href":"/coinbase-business/transfer-apis/onchain-addresses"},{"title":"Fiat Deposits","sidebarTitle":"Deposits Fiat","href":"/coinbase-business/transfer-apis/deposit-fiat"},{"title":"Fiat Withdrawals","sidebarTitle":"Withdrawals Fiat","href":"/coinbase-business/transfer-apis/withdraw-fiat"},{"title":"Travel Rule Fields for Crypto Sends Guide","sidebarTitle":"Travel Rule","href":"/coinbase-business/transfer-apis/travel-rule"},{"title":"Supported Virtual Asset Service Provider (VASP) Tables","sidebarTitle":"VASPs","href":"/coinbase-business/transfer-apis/vasps"}]},{"group":"Track APIs","pages":[{"title":"Accounts","href":"/coinbase-business/track-apis/accounts"},{"title":"Transactions","href":"/coinbase-business/track-apis/transactions"},{"title":"Data API - Currencies","sidebarTitle":"Currencies","href":"/coinbase-business/track-apis/currencies"},{"title":"Data API- Exchange Rates","sidebarTitle":"Exchange Rates","href":"/coinbase-business/track-apis/exchange-rates"},{"title":"Data API- Prices","sidebarTitle":"Prices","href":"/coinbase-business/track-apis/prices"},{"title":"Data API- Time","sidebarTitle":"Time","href":"/coinbase-business/track-apis/time"}]}]}]},{"dropdown":"Coinbase Exchange API","icon":"https://mintlify-assets.b-cdn.net/exchangeProduct-1.svg","groups":[{"group":"REST API","pages":[{"title":"Welcome to Coinbase Exchange API","sidebarTitle":"Overview","href":"/api-reference/exchange-api/rest-api/introduction"},{"title":"Exchange REST API Requests","sidebarTitle":"Requests","href":"/exchange/rest-api/requests"},{"title":"Exchange REST API Authentication","sidebarTitle":"Authentication","href":"/exchange/rest-api/authentication"},{"title":"REST Rate Limits Overview","sidebarTitle":"Rate Limits","href":"/exchange/rest-api/rate-limits"},{"title":"Exchange REST API Pagination","sidebarTitle":"Pagination","href":"/exchange/rest-api/pagination"},{"title":"Exchange REST API SDKs","sidebarTitle":"SDKs","href":"/exchange/rest-api/sdks"},{"title":"Exchange Types","sidebarTitle":"Types","href":"/exchange/rest-api/types"},{"group":"Accounts","pages":[{"title":"Get a single account by id","openapi":"GET /accounts/{account_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/accounts/get-single-account-by-id"},{"title":"Get a single account's holds","openapi":"GET /accounts/{account_id}/holds","playground":"simple","href":"/api-reference/exchange-api/rest-api/accounts/get-single-account-hold"},{"title":"Get a single account's ledger","openapi":"GET /accounts/{account_id}/ledger","playground":"simple","href":"/api-reference/exchange-api/rest-api/accounts/get-single-account-ledger"},{"title":"Get a single account's transfers","openapi":"GET /accounts/{account_id}/transfers","playground":"simple","href":"/api-reference/exchange-api/rest-api/accounts/get-single-account-transfer"},{"title":"Get all accounts for a profile","openapi":"GET /accounts","playground":"simple","href":"/api-reference/exchange-api/rest-api/accounts/get-all-account-profile"}]},{"group":"Address Book","pages":[{"title":"Add addresses","openapi":"POST /address-book","playground":"simple","href":"/api-reference/exchange-api/rest-api/address-book/add-addresses"},{"title":"Delete address","openapi":"DELETE /address-book/{id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/address-book/delete-address"},{"title":"Get address book","openapi":"GET /address-book","playground":"simple","href":"/api-reference/exchange-api/rest-api/address-book/get-address-book"},{"title":"Get counterparty address book","openapi":"get /address-book/counterparty","playground":"simple","href":"/api-reference/exchange-api/rest-api/address-book/get-counterparty-address-book"},{"openapi":"put /address-book/{id}","playground":"simple","title":"Update address book","href":"/api-reference/exchange-api/rest-api/address-book/update-address-book"}]},{"group":"Coinbase Accounts","pages":[{"title":"Generate crypto address","openapi":"POST /coinbase-accounts/{account_id}/addresses","playground":"simple","href":"/api-reference/exchange-api/rest-api/coinbase-accounts/generate-crypto-address"},{"title":"Get all Coinbase wallets","openapi":"GET /coinbase-accounts","playground":"simple","href":"/api-reference/exchange-api/rest-api/coinbase-accounts/get-all-coinbase-wallets"}]},{"group":"Conversions","pages":[{"title":"Convert currency","openapi":"POST /conversions","playground":"simple","href":"/api-reference/exchange-api/rest-api/conversions/convert-currency"},{"title":"Get a conversion","openapi":"GET /conversions/{conversion_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/conversions/get-a-conversion"},{"title":"Get all conversions","openapi":"GET /conversions","playground":"simple","href":"/api-reference/exchange-api/rest-api/conversions/get-all-conversions"},{"title":"Get conversion fee rates","openapi":"GET /conversions/fees","playground":"simple","href":"/api-reference/exchange-api/rest-api/conversions/get-conversion-fee-rates"}]},{"group":"Currencies","pages":[{"title":"Get a currency","openapi":"GET /currencies/{currency_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/currencies/get-a-currency"},{"title":"Get all known currencies","openapi":"GET /currencies","playground":"simple","href":"/api-reference/exchange-api/rest-api/currencies/get-all-known-currencies"}]},{"group":"Fees","pages":[{"title":"Get fees","openapi":"GET /fees","playground":"simple","href":"/api-reference/exchange-api/rest-api/fees/get-fee"}]},{"group":"Futures","pages":[{"title":"Get auto loan setting","openapi":"GET /margin/auto-loan","playground":"simple","href":"/api-reference/exchange-api/rest-api/futures/get-auto-loan-setting"},{"title":"Get USDC conversion","openapi":"GET /margin/usdc","playground":"simple","href":"/api-reference/exchange-api/rest-api/futures/get-usdc-conversion"},{"title":"Set auto loan","openapi":"POST /margin/auto-loan","playground":"simple","href":"/api-reference/exchange-api/rest-api/futures/set-auto-loan"},{"title":"Set USDC conversion","openapi":"POST /margin/usdc","playground":"simple","href":"/api-reference/exchange-api/rest-api/futures/set-usdc-conversion"}]},{"group":"Loan","pages":[{"title":"Get lending overview","openapi":"GET /loans/lending-overview","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/get-lending-overview"},{"title":"Get lending overview XM","openapi":"GET /loans/lending-overview-xm","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/get-lending-overview-xm"},{"title":"Get new loan preview","openapi":"GET /loans/loan-preview","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/get-new-loan-preview"},{"title":"Get loan preview XM","openapi":"GET /loans/loan-preview-xm","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/get-loan-preview-xm"},{"title":"Get principal repayment preview","openapi":"GET /loans/repayment-preview","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/get-principal-repayment-preview"},{"title":"Get repayment preview XM","openapi":"GET /loans/repayment-preview-xm","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/get-repayment-preview-xm"},{"title":"List interest charges","openapi":"GET /loans/interest/{loan_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/list-interest-charges"},{"title":"List interest rate history","openapi":"GET /loans/interest/history/{loan_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/list-interest-rate-history"},{"title":"List interest summaries","openapi":"GET /loans/interest","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/list-interest-summaries"},{"title":"List loan assets","openapi":"GET /loans/assets","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/list-loan-assets"},{"title":"List loans","openapi":"GET /loans","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/list-loans"},{"title":"List new loan options","openapi":"GET /loans/options","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/list-new-loan-options"},{"title":"Open new loan","openapi":"POST /loans/open","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/open-new-loan"},{"title":"Repay loan interest","openapi":"POST /loans/repay-interest","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/repay-loan-interest"},{"title":"Repay loan principal","openapi":"POST /loans/repay-principal","playground":"simple","href":"/api-reference/exchange-api/rest-api/loan/repay-loan-principal"}]},{"group":"Orders","pages":[{"title":"Cancel all orders","openapi":"DELETE /orders","playground":"simple","href":"/api-reference/exchange-api/rest-api/orders/cancel-all-orders"},{"title":"Cancel an order","openapi":"DELETE /orders/{order_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/orders/cancel-an-order"},{"title":"Create a new order","openapi":"POST /orders","playground":"simple","href":"/api-reference/exchange-api/rest-api/orders/create-new-order"},{"title":"Get all fills","openapi":"GET /fills","playground":"simple","href":"/api-reference/exchange-api/rest-api/orders/get-all-fills"},{"title":"Get all orders","openapi":"GET /orders","playground":"simple","href":"/api-reference/exchange-api/rest-api/orders/get-all-orders"},{"title":"Get single order","openapi":"GET /orders/{order_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/orders/get-single-order"}]},{"group":"Products","pages":[{"title":"Get all known trading pairs","openapi":"GET /products","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-all-known-trading-pairs"},{"title":"Get all product volume","openapi":"GET /products/volume-summary","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-all-product-volume"},{"title":"Get product book","openapi":"GET /products/{product_id}/book","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-product-book"},{"title":"Get product candles","openapi":"GET /products/{product_id}/candles","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-product-candles"},{"title":"Get product stats","openapi":"GET /products/{product_id}/stats","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-product-stats"},{"title":"Get product ticker","openapi":"GET /products/{product_id}/ticker","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-product-ticker"},{"title":"Get product trades","openapi":"GET /products/{product_id}/trades","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-product-trades"},{"title":"Get single product","openapi":"GET /products/{product_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/products/get-single-product"}]},{"group":"Profiles","pages":[{"title":"Create a profile","openapi":"POST /profiles","playground":"simple","href":"/api-reference/exchange-api/rest-api/profiles/create-profile"},{"title":"Delete a profile","openapi":"PUT /profiles/{profile_id}/deactivate","playground":"simple","href":"/api-reference/exchange-api/rest-api/profiles/delete-profile"},{"title":"Get profile by id","openapi":"GET /profiles/{profile_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/profiles/get-profile-by-id"},{"title":"Get profiles","openapi":"GET /profiles","playground":"simple","href":"/api-reference/exchange-api/rest-api/profiles/get-profiles"},{"title":"Rename a profile","openapi":"PUT /profiles/{profile_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/profiles/rename-profile"},{"title":"Transfer funds between profiles","openapi":"POST /profiles/transfer","playground":"simple","href":"/api-reference/exchange-api/rest-api/profiles/transfer-funds-profile"}]},{"group":"Reports","pages":[{"title":"Create a report","openapi":"POST /reports","playground":"simple","href":"/api-reference/exchange-api/rest-api/reports/create-report"},{"title":"Get a report","openapi":"GET /reports/{report_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/reports/get-report"},{"title":"Get all reports","openapi":"GET /reports","playground":"simple","href":"/api-reference/exchange-api/rest-api/reports/get-all-reports"}]},{"group":"Transfers","pages":[{"title":"Deposit from Coinbase account","openapi":"POST /deposits/coinbase-account","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/deposit-from-coinbase-account"},{"title":"Deposit from payment method","openapi":"POST /deposits/payment-method","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/deposit-from-payment-method"},{"title":"Get a single transfer","openapi":"GET /transfers/{transfer_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/get-single-transfer"},{"title":"Get all payment methods","openapi":"GET /payment-methods","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/get-all-payment-methods"},{"title":"Get all transfers","openapi":"GET /transfers","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/get-all-transfers"},{"title":"Get fee estimate for crypto withdrawal","openapi":"GET /withdrawals/fee-estimate","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/get-fee-estimate"},{"title":"Submit travel information for a transfer","openapi":"POST /transfers/{transfer_id}/travel-rules","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/submit-travel-info"},{"title":"Withdraw to Coinbase account","openapi":"POST /withdrawals/coinbase-account","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/withdraw-to-coinbase-account"},{"title":"Withdraw to counterparty Id","openapi":"post /withdrawals/counterparty","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/withdraw-to-counterparty"},{"title":"Withdraw to crypto address","openapi":"POST /withdrawals/crypto","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/withdraw-to-crypto-address"},{"title":"Withdraw to payment method","openapi":"POST /withdrawals/payment-method","playground":"simple","href":"/api-reference/exchange-api/rest-api/transfers/withdraw-to-payment-method"}]},{"group":"Travel Rules","pages":[{"title":"Create travel rule entry","openapi":"POST /travel-rules","playground":"simple","href":"/api-reference/exchange-api/rest-api/travel-rules/create-travel-rule"},{"title":"Delete existing travel rule entry","openapi":"DELETE /travel-rules/{id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/travel-rules/delete-existing-travel-rule"},{"title":"Get all travel rule information","openapi":"GET /travel-rules","playground":"simple","href":"/api-reference/exchange-api/rest-api/travel-rules/get-all-travel-rule"}]},{"group":"Users","pages":[{"title":"Get user exchange limits","openapi":"GET /users/{user_id}/exchange-limits","playground":"simple","href":"/api-reference/exchange-api/rest-api/users/get-user-exchange-limits"},{"title":"Get user trading volume","openapi":"GET /users/{user_id}/trading-volumes","playground":"simple","href":"/api-reference/exchange-api/rest-api/users/get-user-trading-volume"},{"title":"Update settlement preference","openapi":"POST /users/{user_id}/settlement-preferences","playground":"simple","href":"/api-reference/exchange-api/rest-api/users/update-settlement-preference"}]},{"group":"Wrapped Assets","pages":[{"title":"Create a new redeem","openapi":"POST /wrapped-assets/redeem","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/create-new-redeem"},{"title":"Create a new stake-wrap","openapi":"POST /wrapped-assets/stake-wrap","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/create-new-stake-wrap"},{"title":"Get a single redeem","openapi":"GET /wrapped-assets/redeem/{redeem_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/get-single-redeem"},{"title":"Get a single stake-wrap","openapi":"GET /wrapped-assets/stake-wrap/{stake_wrap_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/get-a-single-stake-wrap"},{"title":"Get all redeems","openapi":"GET /wrapped-assets/redeem","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/get-all-redeems"},{"title":"Get all stake-wraps","openapi":"GET /wrapped-assets/stake-wrap","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/get-all-stake-wraps"},{"title":"Get all wrapped assets","openapi":"GET /wrapped-assets","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/get-all-wrapped-assets"},{"title":"Get wrapped asset conversion rate","openapi":"GET /wrapped-assets/{wrapped_asset_id}/conversion-rate","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/get-wrapped-asset-conversion-rate"},{"title":"Get wrapped asset details","openapi":"GET /wrapped-assets/{wrapped_asset_id}","playground":"simple","href":"/api-reference/exchange-api/rest-api/wrapped-assets/get-wrapped-asset-details"}]}]},{"group":"FIX API","pages":[{"title":"Exchange FIX API Connectivity","sidebarTitle":"Connectivity","href":"/exchange/fix-api/connectivity"},{"title":"Exchange FIX Best Practices","sidebarTitle":"Best Practices","href":"/exchange/fix-api/best-practices"},{"title":"FIX Rate Limits Overview","sidebarTitle":"Rate Limits","href":"/exchange/fix-api/rate-limits"},{"title":"Exchange FIX Drop Copy 5.0","sidebarTitle":"Drop Copy","href":"/exchange/fix-api/drop-copy"},{"group":"Order Entry Messages","pages":[{"title":"Exchange FIX Order Entry Messages 5.0","sidebarTitle":"Order Entry Messages 5.0","href":"/exchange/fix-api/order-entry-messages/order-entry-messages5"},{"title":"Exchange Take Profit Stop Loss Orders","sidebarTitle":"TPSL Orders","href":"/exchange/fix-api/order-entry-messages/tpsl-orders"},{"title":"Exchange Limit With Funds Orders","sidebarTitle":"Limit With Funds Orders","href":"/exchange/fix-api/order-entry-messages/limit-orders"},{"title":"Exchange Synthetic Product Orders","sidebarTitle":"Synthetic Product Orders","href":"/exchange/fix-api/order-entry-messages/synthetic-product-orders"}]},{"title":"Exchange FIX Market Data Messages 5.0","sidebarTitle":"Market Data Messages","href":"/exchange/fix-api/market-data"},{"title":"Exchange FIX Dictionary Downloads","sidebarTitle":"Dictionary Downloads","href":"/exchange/fix-api/dictionary-downloads"}]},{"group":"Websocket Feed","pages":[{"title":"Exchange WebSocket Overview","sidebarTitle":"Overview","href":"/exchange/websocket-feed/overview"},{"title":"Exchange WebSocket Best Practices","sidebarTitle":"Best Practices","href":"/exchange/websocket-feed/best-practices"},{"title":"Exchange WebSocket Authentication","sidebarTitle":"Authentication","href":"/exchange/websocket-feed/authentication"},{"title":"Exchange WebSocket Channels","sidebarTitle":"Channels","href":"/exchange/websocket-feed/channels"},{"title":"Exchange WebSocket Rate Limits","sidebarTitle":"Rate Limits","href":"/exchange/websocket-feed/rate-limits"},{"title":"Exchange WebSocket Errors","sidebarTitle":"Errors","href":"/exchange/websocket-feed/errors"}]}]},{"dropdown":"Coinbase International Exchange API","icon":"https://mintlify-assets.b-cdn.net/internationalExchangeProduct-0.svg","groups":[{"group":"REST API","pages":[{"title":"Welcome to Coinbase INTX API","sidebarTitle":"Overview","href":"/api-reference/international-exchange-api/rest-api/introduction"},{"title":"INTX REST API Authentication","sidebarTitle":"Authentication","href":"/api-reference/international-exchange-api/rest-api/authentication"},{"group":"Address Book","pages":[{"title":"Get address book","openapi":"GET /api/v1/address-book","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/address-book/get-address-book"}]},{"group":"Assets","pages":[{"title":"Get asset details","openapi":"GET /api/v1/assets/{asset}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/assets/get-asset-details"},{"title":"Get supported networks per asset","openapi":"GET /api/v1/assets/{asset}/networks","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/assets/get-supported-networks"},{"title":"List assets","openapi":"GET /api/v1/assets","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/assets/list-assets"}]},{"group":"Fee Rates","pages":[{"title":"List fee rate tiers","openapi":"GET /api/v1/fee-rate-tiers","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/fee-rates/list-fee-rate-tiers"}]},{"group":"Index","pages":[{"title":"Get index candles","openapi":"GET /api/v1/index/{index}/candles","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/index/get-index-candles"},{"title":"Get index composition","openapi":"GET /api/v1/index/{index}/composition","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/index/get-index-composition"},{"title":"Get index composition history","openapi":"GET /api/v1/index/{index}/composition-history","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/index/get-index-composition-history"},{"title":"Get index price","openapi":"GET /api/v1/index/{index}/price","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/index/get-index-price"}]},{"group":"Instruments","pages":[{"title":"Get aggregated candles data per instrument","openapi":"GET /api/v1/instruments/{instrument}/candles","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/instruments/get-aggegated-candles"},{"title":"Get daily trading volumes","openapi":"GET /api/v1/instruments/volumes/daily","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/instruments/get-daily-trading-volume"},{"title":"Get historical funding rates","openapi":"GET /api/v1/instruments/{instrument}/funding","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/instruments/get-historical-funding-rate"},{"title":"Get instrument details","openapi":"GET /api/v1/instruments/{instrument}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/instruments/get-instrument-details"},{"title":"Get quote per instrument","openapi":"GET /api/v1/instruments/{instrument}/quote","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/instruments/get-quote-per-instrument"},{"title":"List instruments","openapi":"GET /api/v1/instruments","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/instruments/list-instruments"}]},{"group":"Orders","pages":[{"title":"Cancel order","openapi":"DELETE /api/v1/orders/{id}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/orders/cancel-order"},{"title":"Cancel orders","openapi":"DELETE /api/v1/orders","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/orders/cancel-orders"},{"title":"Create order","openapi":"POST /api/v1/orders","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/orders/create-order"},{"title":"Get order details","openapi":"GET /api/v1/orders/{id}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/orders/get-order-details"},{"title":"List open orders","openapi":"GET /api/v1/orders","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/orders/list-open-orders"},{"title":"Modify open order","openapi":"PUT /api/v1/orders/{id}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/orders/modify-open-order"}]},{"group":"Portfolios","pages":[{"title":"Acquire/repay loan","openapi":"POST /api/v1/portfolios/{portfolio}/loans/{asset}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/acquire-and-repay-loan"},{"title":"Create portfolio","openapi":"POST /api/v1/portfolios","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/create-portfolio"},{"title":"Enable/Disable portfolio auto margin mode","openapi":"POST /api/v1/portfolios/{portfolio}/auto-margin-enabled","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/enable-and-disable-portfolio"},{"title":"Enable/Disable portfolio cross collateral","openapi":"POST /api/v1/portfolios/{portfolio}/cross-collateral-enabled","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/enable-and-disable-cross"},{"title":"Get balance for portfolio/asset","openapi":"GET /api/v1/portfolios/{portfolio}/balances/{asset}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-balance-for-assests"},{"title":"Get fund transfer limit between portfolios","openapi":"GET /api/v1/portfolios/transfer/{portfolio}/{asset}/transfer-limit","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-fund-transfer-limit"},{"title":"Get loan info for portfolio/asset","openapi":"GET /api/v1/portfolios/{portfolio}/loans/{asset}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-loan-info-for-portfolio"},{"title":"Get portfolio details","openapi":"GET /api/v1/portfolios/{portfolio}/detail","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-portfolio-details"},{"title":"Get portfolio margin call status","openapi":"GET /api/v1/portfolios/{portfolio}/margin-call-status","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-portfolio-margin-call"},{"title":"Get portfolio summary","openapi":"GET /api/v1/portfolios/{portfolio}/summary","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-portfolio-summary"},{"title":"Get position for portfolio/instrument","openapi":"GET /api/v1/portfolios/{portfolio}/positions/{instrument}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-position-portfolio"},{"title":"Get the open position limits for the portfolio instrument","openapi":"GET /api/v1/portfolios/{portfolio}/position-limits/positions/{instrument}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-the-open-position-limits"},{"title":"Get the total open position limit for the portfolio","openapi":"GET /api/v1/portfolios/{portfolio}/position-limits","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-the-total-open-position-limits"},{"title":"Get user portfolio","openapi":"GET /api/v1/portfolios/{portfolio}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/get-user-portfolio"},{"title":"List active loans for the portfolio","openapi":"GET /api/v1/portfolios/{portfolio}/loans","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-active-loans-for-the-portfolio"},{"title":"List all user portfolios","openapi":"GET /api/v1/portfolios","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-all-user-portfolios"},{"title":"List fills by portfolios","openapi":"GET /api/v1/portfolios/fills","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-fills-portfolio"},{"title":"List portfolio balances","openapi":"GET /api/v1/portfolios/{portfolio}/balances","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-portfolio-balances"},{"title":"List portfolio fee rates","openapi":"GET /api/v1/portfolios/fee-rates","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-portfolio-fee-rates"},{"title":"List portfolio fills","openapi":"GET /api/v1/portfolios/{portfolio}/fills","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-portfolio-fills"},{"title":"List portfolio positions","openapi":"GET /api/v1/portfolios/{portfolio}/positions","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-portfolio-positions"},{"title":"List the open position limits for all instruments","openapi":"GET /api/v1/portfolios/{portfolio}/position-limits/positions","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/list-open-position-limit"},{"title":"Patch portfolio","openapi":"PATCH /api/v1/portfolios/{portfolio}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/patch-portfolio"},{"title":"Preview loan update","openapi":"POST /api/v1/portfolios/{portfolio}/loans/{asset}/preview","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/preview-loan-update"},{"title":"Set portfolio margin override","openapi":"POST /api/v1/portfolios/margin","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/set-profile-margin"},{"title":"Transfer funds between portfolios","openapi":"POST /api/v1/portfolios/transfer","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/transfer-funds"},{"title":"Transfer positions between portfolios","openapi":"POST /api/v1/portfolios/transfer-position","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/transfer-positions"},{"title":"Update portfolio","openapi":"PUT /api/v1/portfolios/{portfolio}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/update-portfolio"},{"title":"View max loan availability","openapi":"GET /api/v1/portfolios/{portfolio}/loans/{asset}/availability","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/portfolios/view-max-loan"}]},{"group":"Position Offsets","pages":[{"title":"List position offsets","openapi":"GET /api/v1/position-offsets","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/position-offsets/list-position-offsets"}]},{"group":"Rankings","pages":[{"title":"Get your rankings","openapi":"GET /api/v1/rankings/statistics","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/rankings/get-your-rankings"}]},{"group":"Transfers","pages":[{"title":"Create counterparty Id","openapi":"POST /api/v1/transfers/create-counterparty-id","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/create-counterparty-id"},{"title":"Create crypto address","openapi":"POST /api/v1/transfers/address","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/create-crypto-address"},{"title":"Get counterparty withdrawal limit","openapi":"GET /api/v1/transfers/withdraw/{portfolio}/{asset}/counterparty-withdrawal-limit","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/get-counterparty-withdrawal-limit"},{"title":"Get transfer","openapi":"GET /api/v1/transfers/{transfer_uuid}","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/get-transfer"},{"title":"List matching transfers","openapi":"GET /api/v1/transfers","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/list-matching-transfers"},{"title":"Validate counterparty Id","openapi":"POST /api/v1/transfers/validate-counterparty-id","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/validate-counterparty-id"},{"title":"Withdraw to counterparty Id","openapi":"POST /api/v1/transfers/withdraw/counterparty","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/withdraw-to-counterparty-id"},{"title":"Withdraw to crypto address","openapi":"POST /api/v1/transfers/withdraw","playground":"simple","href":"/api-reference/international-exchange-api/rest-api/transfers/withdraw-to-crypto-address"}]}]},{"group":"FIX API","pages":[{"title":"INTX FIX API Overview","sidebarTitle":"Overview","href":"/international-exchange/fix-api/fix-api-overview"},{"title":"INTX FIX Dictionary Downloads","sidebarTitle":"Dictionary Downloads","href":"/international-exchange/fix-api/dictionary-downloads"},{"title":"INTX FIX Common Components","sidebarTitle":"Common Components","href":"/international-exchange/fix-api/common-components"},{"title":"INTX FIX Admin Messages","sidebarTitle":"Admin Messages","href":"/international-exchange/fix-api/admin-messages"},{"title":"INTX FIX Order Entry Messages","sidebarTitle":"Order Entry Messages","href":"/international-exchange/fix-api/order-entry-messages"},{"title":"INTX Take Profit Stop Loss Orders","sidebarTitle":"TPSL Orders","href":"/international-exchange/fix-api/tpsl-orders"},{"title":"INTX FIX Market Data Messages","sidebarTitle":"Market Data Messages","href":"/international-exchange/fix-api/market-data"},{"title":"INTX FIX Drop Copy Messages","sidebarTitle":"Drop Copy Messages","href":"/international-exchange/fix-api/drop-copy"}]},{"group":"WEBSOCKET FEED","pages":[{"title":"INTX WebSocket Overview","sidebarTitle":"Overview","href":"/international-exchange/websocket-feed/websocket-overview"},{"title":"INTX WebSocket Authentication","sidebarTitle":"Authentication","href":"/international-exchange/websocket-feed/authentication"},{"title":"INTX WebSocket Channels","sidebarTitle":"Channels","href":"/international-exchange/websocket-feed/channels"},{"title":"INTX WebSocket Errors","sidebarTitle":"Errors","href":"/international-exchange/websocket-feed/errors"}]}]},{"dropdown":"Coinbase Prime API","icon":"https://mintlify-assets.b-cdn.net/primeProduct-1.svg","groups":[{"group":"REST API","pages":[{"title":"Welcome to Coinbase Prime API","sidebarTitle":"Overview","href":"/api-reference/prime-api/rest-api/introduction"},{"title":"Prime Overview","href":"/prime/concepts/overview"},{"title":"Prime REST API Requests","sidebarTitle":"Requests","href":"/prime/rest-api/requests"},{"title":"Prime REST API Rate Limits","sidebarTitle":"Rate Limits","href":"/prime/rest-api/rate-limits"},{"title":"Prime REST API Authentication","sidebarTitle":"Authentication","href":"/prime/rest-api/authentication"},{"title":"API Key Rotation","sidebarTitle":"API Key Rotation","href":"/prime/rest-api/api-key-rotation"},{"title":"Prime REST API Pagination","sidebarTitle":"Pagination","href":"/prime/rest-api/pagination"},{"title":"Prime REST API CLI Setup Guide","sidebarTitle":"CLI Setup","href":"/prime/rest-api/cli-setup"},{"title":"Prime REST API SDKs","sidebarTitle":"SDKs","href":"/prime/rest-api/sdks"},{"title":"Prime Types","sidebarTitle":"Types","href":"/prime/rest-api/types"},{"title":"Error Dictionary","href":"/api-reference/prime-api/rest-api/errors"},{"group":"Activities","pages":[{"title":"Get Activity by Activity ID","openapi":"GET /v1/activities/{activity_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/activities/get-activity-by-activity-id"},{"title":"Get Portfolio Activity by Activity ID","openapi":"GET /v1/portfolios/{portfolio_id}/activities/{activity_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/activities/get-portfolio-activity-by-activity-id"},{"title":"List Activities","openapi":"GET /v1/portfolios/{portfolio_id}/activities","playground":"simple","href":"/api-reference/prime-api/rest-api/activities/list-activities"},{"title":"List Entity Activities","openapi":"GET /v1/entities/{entity_id}/activities","playground":"simple","href":"/api-reference/prime-api/rest-api/activities/list-entity-activities"}]},{"group":"Address Book","pages":[{"title":"Get Address Book","openapi":"GET /v1/portfolios/{portfolio_id}/address_book","playground":"simple","href":"/api-reference/prime-api/rest-api/address-book/get-address-book"},{"title":"Create Address Book Entry","openapi":"POST /v1/portfolios/{portfolio_id}/address_book","playground":"simple","href":"/api-reference/prime-api/rest-api/address-book/create-address-book-entry"}]},{"group":"Advanced Transfer","pages":[{"openapi":"get /v1/portfolios/{portfolio_id}/counterparty","playground":"simple","title":"Get Portfolio Counterparty ID","href":"/api-reference/prime-api/rest-api/advanced-transfer/get-portfolio-counterparty-id"},{"openapi":"get /v1/portfolios/{portfolio_id}/advanced_transfers","playground":"simple","title":"List Advanced Transfers","href":"/api-reference/prime-api/rest-api/advanced-transfer/list-advanced-transfers"},{"openapi":"post /v1/portfolios/{portfolio_id}/advanced_transfers/{advanced_transfer_id}/cancel","playground":"simple","title":"Cancel Advanced Transfer","href":"/api-reference/prime-api/rest-api/advanced-transfer/cancel-advanced-transfer"},{"openapi":"post /v1/portfolios/{portfolio_id}/advanced_transfers","playground":"simple","title":"Create Advanced Transfer","href":"/api-reference/prime-api/rest-api/advanced-transfer/create-advanced-transfer"}]},{"group":"Allocations","pages":[{"title":"Get Allocation by ID","openapi":"GET /v1/portfolios/{portfolio_id}/allocations/{allocation_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/allocations/get-allocation-by-id"},{"title":"Get Net Allocations by Netting ID","openapi":"GET /v1/portfolios/{portfolio_id}/allocations/net/{netting_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/allocations/get-net-allocations-by-netting-id"},{"openapi":"get /v1/portfolios/{portfolio_id}/allocations","playground":"simple","title":"List Portfolio Allocations","href":"/api-reference/prime-api/rest-api/allocations/list-portfolio-allocations"},{"title":"Create Portfolio Allocations","openapi":"POST /v1/allocations","playground":"simple","href":"/api-reference/prime-api/rest-api/allocations/create-portfolio-allocations"},{"title":"Create Portfolio Net Allocations","openapi":"POST /v1/allocations/net","playground":"simple","href":"/api-reference/prime-api/rest-api/allocations/create-portfolio-net-allocations"}]},{"group":"API Key Management","pages":[{"title":"Rotate API Key","openapi":"POST /v1/api-keys/rotate","playground":"simple","href":"/api-reference/prime-api/rest-api/api-key-management/rotate-api-key"}]},{"group":"Assets","pages":[{"title":"List Assets","openapi":"GET /v1/entities/{entity_id}/assets","playground":"simple","href":"/api-reference/prime-api/rest-api/assets/list-assets"}]},{"group":"Balances","pages":[{"title":"Get Wallet Balance","openapi":"GET /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/balance","playground":"simple","href":"/api-reference/prime-api/rest-api/balances/get-wallet-balance"},{"title":"List Entity Balances","openapi":"GET /v1/entities/{entity_id}/balances","playground":"simple","href":"/api-reference/prime-api/rest-api/balances/list-entity-balances"},{"title":"List Onchain Wallet Balances","openapi":"GET /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/web3_balances","playground":"simple","href":"/api-reference/prime-api/rest-api/balances/list-onchain-wallet-balances"},{"title":"List Portfolio Balances","openapi":"GET /v1/portfolios/{portfolio_id}/balances","playground":"simple","href":"/api-reference/prime-api/rest-api/balances/list-portfolio-balances"}]},{"group":"Commission","pages":[{"title":"Get Portfolio Commission","openapi":"GET /v1/portfolios/{portfolio_id}/commission","playground":"simple","href":"/api-reference/prime-api/rest-api/commission/get-portfolio-commission"}]},{"group":"Financing","pages":[{"openapi":"get /v1/conversion/fees","playground":"simple","title":"Get Conversion Fees","href":"/api-reference/prime-api/rest-api/financing/get-conversion-fees"},{"openapi":"get /v1/entities/{entity_id}/cross_margin/liquidation","playground":"simple","title":"Get Cross Margin Liquidation","href":"/api-reference/prime-api/rest-api/financing/get-cross-margin-liquidation"},{"openapi":"get /v1/entities/{entity_id}/cross_margin/risk_parameters","playground":"simple","title":"Get Cross Margin Risk Parameters","href":"/api-reference/prime-api/rest-api/financing/get-cross-margin-risk-parameters"},{"title":"Get Entity Locate Availabilities","openapi":"GET /v1/entities/{entity_id}/locates_availability","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/get-entity-locate-availabilities"},{"openapi":"get /v1/entities/{entity_id}/rewards/rate","playground":"simple","title":"Get Entity Rewards Rate (Beta)","href":"/api-reference/prime-api/rest-api/financing/get-entity-rewards-rate-beta"},{"openapi":"get /v1/entities/{entity_id}/cross_margin","playground":"simple","title":"Get Exchange Cross Margin Overview","href":"/api-reference/prime-api/rest-api/financing/get-exchange-cross-margin-overview"},{"title":"Get Margin Information","openapi":"GET /v1/entities/{entity_id}/margin","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/get-margin-information"},{"openapi":"get /v1/entities/{entity_id}/market_data","playground":"simple","title":"Get Market Data","href":"/api-reference/prime-api/rest-api/financing/get-market-data"},{"title":"Get Portfolio Buying Power","openapi":"GET /v1/portfolios/{portfolio_id}/buying_power","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/get-portfolio-buying-power"},{"title":"Get Portfolio Credit Information","openapi":"GET /v1/portfolios/{portfolio_id}/credit","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/get-portfolio-credit-information"},{"openapi":"get /v1/portfolios/{portfolio_id}/rewards/rate","playground":"simple","title":"Get Portfolio Rewards Rate (Beta)","href":"/api-reference/prime-api/rest-api/financing/get-portfolio-rewards-rate-beta"},{"title":"Get Portfolio Withdrawal Power","openapi":"GET /v1/portfolios/{portfolio_id}/withdrawal_power","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/get-portfolio-withdrawal-power"},{"openapi":"get /v2/entities/{entity_id}/cross_margin/prime","playground":"simple","title":"Get Prime Cross Margin Overview","href":"/api-reference/prime-api/rest-api/financing/get-prime-cross-margin-overview"},{"title":"Get Trade Finance Tiered Pricing Fees","openapi":"GET /v1/entities/{entity_id}/tf_tiered_fees","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/get-trade-finance-tiered-pricing-fees"},{"openapi":"get /v1/entities/{entity_id}/cross_margin/liquidations","playground":"simple","title":"List Cross Margin Liquidations","href":"/api-reference/prime-api/rest-api/financing/list-cross-margin-liquidations"},{"title":"List Existing Locates","openapi":"GET /v1/portfolios/{portfolio_id}/locates","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/list-existing-locates"},{"openapi":"get /v1/financing/eligible-assets","playground":"simple","title":"List Financing Eligible Assets","href":"/api-reference/prime-api/rest-api/financing/list-financing-eligible-assets"},{"title":"List Interest Accruals","openapi":"GET /v1/entities/{entity_id}/accruals","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/list-interest-accruals"},{"title":"List Interest Accruals For Portfolio","openapi":"GET /v1/portfolios/{portfolio_id}/accruals","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/list-interest-accruals-for-portfolio"},{"title":"List Margin Call Summaries","openapi":"GET /v1/entities/{entity_id}/margin_summaries","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/list-margin-call-summaries"},{"title":"List Margin Conversions","openapi":"GET /v1/portfolios/{portfolio_id}/margin_conversions","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/list-margin-conversions"},{"openapi":"get /v1/entities/{entity_id}/tf_obligations","playground":"simple","title":"List Trade Finance Obligations","href":"/api-reference/prime-api/rest-api/financing/list-trade-finance-obligations"},{"title":"Create New Locates","openapi":"POST /v1/portfolios/{portfolio_id}/locates","playground":"simple","href":"/api-reference/prime-api/rest-api/financing/create-new-locates"},{"openapi":"post /v1/entities/{entity_id}/funding_settings","playground":"simple","title":"Update Funding Settings","href":"/api-reference/prime-api/rest-api/financing/update-funding-settings"}]},{"group":"Futures","pages":[{"title":"Get Entity FCM Balance","openapi":"GET /v1/entities/{entity_id}/futures/balance_summary","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/get-entity-fcm-balance"},{"title":"Get Entity Positions","openapi":"GET /v1/entities/{entity_id}/futures/positions","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/get-entity-positions"},{"openapi":"get /v1/entities/{entity_id}/futures/equity","playground":"simple","title":"Get FCM Equity","href":"/api-reference/prime-api/rest-api/futures/get-fcm-equity"},{"title":"Get Margin Call Details","openapi":"GET /v1/entities/{entity_id}/futures/margin_call_details","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/get-fcm-margin-call-details"},{"title":"Get Risk Limits","openapi":"GET /v1/entities/{entity_id}/futures/risk_limits","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/get-fcm-risk-limits"},{"openapi":"get /v1/entities/{entity_id}/futures/settings","playground":"simple","title":"Get FCM Settings","href":"/api-reference/prime-api/rest-api/futures/get-fcm-settings"},{"openapi":"get /v1/portfolios/{portfolio_id}/derivatives/currency_summary","playground":"simple","title":"Get Portfolio Derivatives Currency Summary","href":"/api-reference/prime-api/rest-api/futures/get-portfolio-derivatives-currency-summary"},{"title":"List Entity Futures Sweeps","openapi":"GET /v1/entities/{entity_id}/futures/sweeps","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/list-entity-futures-sweeps"},{"openapi":"get /v1/portfolios/{portfolio_id}/derivatives/positions","playground":"simple","title":"List Portfolio Derivative Positions","href":"/api-reference/prime-api/rest-api/futures/list-portfolio-derivative-positions"},{"title":"Schedule Entity Futures Sweep","openapi":"POST /v1/entities/{entity_id}/futures/sweeps","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/schedule-entity-futures-sweep"},{"title":"Set Auto Sweep","openapi":"POST /v1/entities/{entity_id}/futures/auto_sweep","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/set-auto-sweep"},{"openapi":"post /v1/entities/{entity_id}/futures/settings","playground":"simple","title":"Set FCM Settings","href":"/api-reference/prime-api/rest-api/futures/set-fcm-settings"},{"title":"Cancel Entity Futures Sweep","openapi":"delete /v1/entities/{entity_id}/futures/sweeps","playground":"simple","href":"/api-reference/prime-api/rest-api/futures/cancel-entity-futures-sweep"}]},{"group":"Invoice","pages":[{"title":"List Invoices","openapi":"GET /v1/entities/{entity_id}/invoices","playground":"simple","href":"/api-reference/prime-api/rest-api/invoice/list-invoices"}]},{"group":"Onchain Address Book","pages":[{"title":"List Onchain Address Groups","openapi":"GET /v1/portfolios/{portfolio_id}/onchain_address_groups","playground":"simple","href":"/api-reference/prime-api/rest-api/onchain-address-book/list-onchain-address-groups"},{"title":"Create Onchain Address Book Entry","openapi":"POST /v1/portfolios/{portfolio_id}/onchain_address_group","playground":"simple","href":"/api-reference/prime-api/rest-api/onchain-address-book/create-onchain-address-book-entry"},{"title":"Update Onchain Address Book Entry","openapi":"PUT /v1/portfolios/{portfolio_id}/onchain_address_group","playground":"simple","href":"/api-reference/prime-api/rest-api/onchain-address-book/update-onchain-address-book-entry"},{"title":"Delete Onchain Address Group","openapi":"DELETE /v1/portfolios/{portfolio_id}/onchain_address_group/{address_group_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/onchain-address-book/delete-onchain-address-group"}]},{"group":"Orders","pages":[{"title":"Get Order by Order ID","openapi":"GET /v1/portfolios/{portfolio_id}/orders/{order_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/get-order-by-order-id"},{"title":"List Open Orders","openapi":"GET /v1/portfolios/{portfolio_id}/open_orders","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/list-open-orders"},{"title":"List Order Edit History","openapi":"GET /v1/portfolios/{portfolio_id}/orders/{order_id}/edit_history","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/list-order-edit-history"},{"title":"List Order Fills","openapi":"GET /v1/portfolios/{portfolio_id}/orders/{order_id}/fills","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/list-order-fills"},{"title":"List Portfolio Fills","openapi":"GET /v1/portfolios/{portfolio_id}/fills","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/list-portfolio-fills"},{"title":"List Portfolio Orders","openapi":"GET /v1/portfolios/{portfolio_id}/orders","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/list-portfolio-orders"},{"title":"Accept Quote","openapi":"POST /v1/portfolios/{portfolio_id}/accept_quote","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/accept-quote"},{"title":"Cancel Order","openapi":"POST /v1/portfolios/{portfolio_id}/orders/{order_id}/cancel","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/cancel-order"},{"title":"Create Order","openapi":"POST /v1/portfolios/{portfolio_id}/order","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/create-order"},{"title":"Create Quote Request","openapi":"POST /v1/portfolios/{portfolio_id}/rfq","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/create-quote-request"},{"title":"Get Order Preview","openapi":"POST /v1/portfolios/{portfolio_id}/order_preview","playground":"simple","href":"/api-reference/prime-api/rest-api/orders/get-order-preview"},{"openapi":"put /v1/portfolios/{portfolio_id}/orders/{order_id}/edit","playground":"simple","title":"Edit Order","href":"/api-reference/prime-api/rest-api/orders/edit-order"}]},{"group":"Payment Methods","pages":[{"title":"Get Entity Payment Method","openapi":"GET /v1/entities/{entity_id}/payment-methods/{payment_method_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/payment-methods/get-entity-payment-method"},{"title":"List Entity Payment Methods","openapi":"GET /v1/entities/{entity_id}/payment-methods","playground":"simple","href":"/api-reference/prime-api/rest-api/payment-methods/list-entity-payment-methods"}]},{"group":"Portfolios","pages":[{"title":"Get Portfolio by Portfolio ID","openapi":"GET /v1/portfolios/{portfolio_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/portfolios/get-portfolio-by-portfolio-id"},{"title":"List Portfolios","openapi":"GET /v1/portfolios","playground":"simple","href":"/api-reference/prime-api/rest-api/portfolios/list-portfolios"}]},{"group":"Positions","pages":[{"title":"List Aggregate Entity Positions","openapi":"GET /v1/entities/{entity_id}/aggregate_positions","playground":"simple","href":"/api-reference/prime-api/rest-api/positions/list-aggregate-entity-positions"},{"title":"List Entity Positions","openapi":"GET /v1/entities/{entity_id}/positions","playground":"simple","href":"/api-reference/prime-api/rest-api/positions/list-entity-positions"}]},{"group":"Products","pages":[{"openapi":"get /v1/portfolios/{portfolio_id}/candles","playground":"simple","title":"Get Public Product Candles","href":"/api-reference/prime-api/rest-api/products/get-public-product-candles"},{"title":"List Portfolio Products","openapi":"GET /v1/portfolios/{portfolio_id}/products","playground":"simple","href":"/api-reference/prime-api/rest-api/products/list-portfolio-products"}]},{"group":"Staking","pages":[{"openapi":"get /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/status","playground":"simple","title":"Get Staking Status","href":"/api-reference/prime-api/rest-api/staking/get-staking-status"},{"openapi":"get /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake/status","playground":"simple","title":"Get Unstaking Status","href":"/api-reference/prime-api/rest-api/staking/get-unstaking-status"},{"title":"Claim Wallet Staking Rewards","openapi":"post /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/claim_rewards","playground":"simple","href":"/api-reference/prime-api/rest-api/staking/claim-wallet-staking-rewards-alpha"},{"title":"Query Transaction Validators","openapi":"post /v1/portfolios/{portfolio_id}/staking/transaction-validators/query","playground":"simple","href":"/api-reference/prime-api/rest-api/staking/list-transaction-validators"},{"openapi":"post /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake/preview","playground":"simple","title":"Preview Unstake","href":"/api-reference/prime-api/rest-api/staking/preview-unstake"},{"title":"Request to stake currency in a portfolio","openapi":"post /v1/portfolios/{portfolio_id}/staking/initiate","playground":"simple","href":"/api-reference/prime-api/rest-api/staking/request-to-stake-currency-in-a-portfolio"},{"title":"Request to stake or delegate a wallet","openapi":"post /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/initiate","playground":"simple","href":"/api-reference/prime-api/rest-api/staking/request-to-stake-or-delegate-a-wallet"},{"title":"Request to unstake a wallet","openapi":"POST /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/staking/unstake","playground":"simple","href":"/api-reference/prime-api/rest-api/staking/request-to-unstake-a-wallet"},{"title":"Request to unstake currency across a portfolio","openapi":"post /v1/portfolios/{portfolio_id}/staking/unstake","playground":"simple","href":"/api-reference/prime-api/rest-api/staking/request-to-unstake-currency-across-a-portfolio"}]},{"group":"Transactions","pages":[{"title":"Get Transaction by Transaction ID","openapi":"GET /v1/portfolios/{portfolio_id}/transactions/{transaction_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/transactions/get-transaction-by-transaction-id"},{"title":"List Portfolio Transactions","openapi":"GET /v1/portfolios/{portfolio_id}/transactions","playground":"simple","href":"/api-reference/prime-api/rest-api/transactions/list-portfolio-transactions"},{"openapi":"get /v1/portfolios/{portfolio_id}/advanced_transfers/{advanced_transfer_id}/transactions","playground":"simple","title":"List transactions associated with an Advanced Transfer","href":"/api-reference/prime-api/rest-api/transactions/list-transactions-associated-with-an-advanced-transfer"},{"title":"List Wallet Transactions","openapi":"GET /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/transactions","playground":"simple","href":"/api-reference/prime-api/rest-api/transactions/list-wallet-transactions"},{"title":"Create Conversion","openapi":"POST /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/conversion","playground":"simple","href":"/api-reference/prime-api/rest-api/transactions/create-conversion"},{"title":"Create Onchain Transaction","openapi":"POST /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/onchain_transaction","playground":"simple","href":"/api-reference/prime-api/rest-api/transactions/create-onchain-transaction"},{"title":"Create Transfer","openapi":"POST /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/transfers","playground":"simple","href":"/api-reference/prime-api/rest-api/transactions/create-transfer"},{"title":"Create Withdrawal","openapi":"POST /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/withdrawals","playground":"simple","href":"/api-reference/prime-api/rest-api/transactions/create-withdrawal"}]},{"group":"Travel Rule","pages":[{"openapi":"get /v1/portfolios/{portfolio_id}/transactions/{transaction_id}/travel_rule","playground":"simple","title":"Get Transaction Travel Rule Data","href":"/api-reference/prime-api/rest-api/travel-rule/get-transaction-travel-rule-data"},{"openapi":"post /v1/portfolios/{portfolio_id}/transactions/{transaction_id}/travel_rule/deposit","playground":"simple","title":"Submit Deposit Travel Rule Data","href":"/api-reference/prime-api/rest-api/travel-rule/submit-deposit-travel-rule-data"}]},{"group":"Users","pages":[{"title":"List Portfolio Users","openapi":"GET /v1/portfolios/{portfolio_id}/users","playground":"simple","href":"/api-reference/prime-api/rest-api/users/list-portfolio-users"},{"title":"List Users","openapi":"GET /v1/entities/{entity_id}/users","playground":"simple","href":"/api-reference/prime-api/rest-api/users/list-users"}]},{"group":"Wallets","pages":[{"title":"Get Wallet by Wallet ID","openapi":"GET /v1/portfolios/{portfolio_id}/wallets/{wallet_id}","playground":"simple","href":"/api-reference/prime-api/rest-api/wallets/get-wallet-by-wallet-id"},{"title":"Get Wallet Deposit Instructions","openapi":"GET /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/deposit_instructions","playground":"simple","href":"/api-reference/prime-api/rest-api/wallets/get-wallet-deposit-instructions"},{"title":"List Portfolio Wallets","openapi":"GET /v1/portfolios/{portfolio_id}/wallets","playground":"simple","href":"/api-reference/prime-api/rest-api/wallets/list-portfolio-wallets"},{"title":"List Wallet Addresses","openapi":"GET /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/addresses","playground":"simple","href":"/api-reference/prime-api/rest-api/wallets/list-wallet-addresses"},{"title":"Create Wallet","openapi":"POST /v1/portfolios/{portfolio_id}/wallets","playground":"simple","href":"/api-reference/prime-api/rest-api/wallets/create-wallet"},{"title":"Create Wallet Deposit Address","openapi":"POST /v1/portfolios/{portfolio_id}/wallets/{wallet_id}/addresses","playground":"simple","href":"/api-reference/prime-api/rest-api/wallets/create-wallet-deposit-address"}]}]},{"group":"Websocket Feed","pages":[{"title":"Prime WebSocket Overview","sidebarTitle":"Overview","href":"/prime/websocket-feed/overview"},{"title":"Prime WebSocket Channels","sidebarTitle":"Channels","href":"/prime/websocket-feed/channels"}]},{"group":"FIX 4.2 API","pages":[{"title":"Prime FIX API Connectivity","sidebarTitle":"Connectivity","href":"/prime/fix-api/connectivity"},{"title":"Prime FIX 4.2 Data Dictionary","sidebarTitle":"Dictionaries","href":"/prime/fix-api/fix-data-dictionaries"},{"group":"Messages","pages":[{"title":"Prime FIX Administrative Messages","sidebarTitle":"Administrative Messages","href":"/prime/fix-api/admin-messages"},{"title":"Prime FIX Order Entry Messages","sidebarTitle":"Order Entry Messages","href":"/prime/fix-api/order-entry-messages"}]}]},{"group":"FIX 5.0 API","pages":[{"title":"Prime FIX 5.0 API","sidebarTitle":"Overview","href":"/prime/fix-5-0-api/overview"},{"title":"Coinbase Prime FIX 4.2 → FIX 5.0 SP2 Order Entry Migration Guide","sidebarTitle":"FIX 4.2 to FIX 5.0 Migration","href":"/prime/fix-5-0-api/order-entry-migration-guide"},{"title":"Prime FIX 5.0 Data Dictionary","sidebarTitle":"Dictionaries","href":"/prime/fix-5-0-api/dictionaries"},{"title":"Prime FIX 5.0 Session Management","sidebarTitle":"Session management","href":"/prime/fix-5-0-api/session-management"},{"title":"Prime FIX 5.0 Market Data","sidebarTitle":"Market Data","tag":"Beta","href":"/prime/fix-5-0-api/market-data"},{"title":"Prime FIX 5.0 Order Entry","sidebarTitle":"Order Entry","href":"/prime/fix-5-0-api/order-entry"},{"title":"Prime FIX 5.0 RFQ","sidebarTitle":"RFQ","href":"/prime/fix-5-0-api/rfq"},{"title":"Prime FIX 5.0 Code Sets","sidebarTitle":"Code Sets","href":"/prime/fix-5-0-api/code-sets"}]}]},{"dropdown":"CDE: Futures API","icon":"https://mintlify-assets.b-cdn.net/derivativesProduct-2.svg","groups":[{"group":"REST API Overview","pages":[{"title":"Welcome to the Coinbase Derivatives: Futures REST API","sidebarTitle":"Overview","href":"/api-reference/derivatives-api/rest-api/introduction"},{"title":"Coinbase Derivatives: Futures REST API Authentication","sidebarTitle":"Authentication","href":"/api-reference/derivatives-api/rest-api/authentication"}]},{"group":"REST Endpoints","pages":[{"group":"Block Trades","pages":[{"title":"Get Block Trades","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade","href":"/api-reference/derivatives-api/rest-api/block-trades/get-block-trades"},{"title":"Get Filtered Block Trades","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/block-trade","href":"/api-reference/derivatives-api/rest-api/block-trades/get-filtered-block-trades"},{"title":"Get Bookable Block Trade Accounts","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade/booking/bookable-accounts","href":"/api-reference/derivatives-api/rest-api/block-trades/get-bookable-block-trade-accounts"},{"title":"Get Bookable Block Trade Entities","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade/booking/bookable-entities","href":"/api-reference/derivatives-api/rest-api/block-trades/get-bookable-block-trade-entities"},{"title":"Get Bookable Block Traders","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade/booking/bookable-traders","href":"/api-reference/derivatives-api/rest-api/block-trades/get-bookable-block-traders"},{"title":"Book a Block Trade","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/block-trade/new","href":"/api-reference/derivatives-api/rest-api/block-trades/book-a-block-trade"}]},{"group":"Block Trade Accounts","pages":[{"title":"Get All Block Trade Account Permissions","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-account-permissions","href":"/api-reference/derivatives-api/rest-api/block-trade-accounts/get-all-block-trade-account-permissions"},{"title":"Get Block Trade Account Permission","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-account-permissions/{uuid}","href":"/api-reference/derivatives-api/rest-api/block-trade-accounts/get-block-trade-account-permission"},{"title":"Get All Block Trade Accounts","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-accounts","href":"/api-reference/derivatives-api/rest-api/block-trade-accounts/get-all-block-trade-accounts"},{"title":"Get Block Trade Account","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-accounts/{uuid}","href":"/api-reference/derivatives-api/rest-api/block-trade-accounts/get-block-trade-account"},{"title":"Get All Block Trade Position Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-position-limits","href":"/api-reference/derivatives-api/rest-api/block-trade-accounts/get-all-block-trade-position-limits"},{"title":"Get Block Trade Position Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-position-limits/{uuid}","href":"/api-reference/derivatives-api/rest-api/block-trade-accounts/get-block-trade-position-limit"}]},{"group":"Block Trade Entities","pages":[{"title":"Get All Block Trade Entities","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-entities","href":"/api-reference/derivatives-api/rest-api/block-trade-entities/get-all-block-trade-entities"},{"title":"Get Block Trade Entity","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-trade-entities/{uuid}","href":"/api-reference/derivatives-api/rest-api/block-trade-entities/get-block-trade-entity"},{"title":"Get Block Trade Entities by Firm","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/firm-block-trade-entities/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/block-trade-entities/get-block-trade-entities-by-firm"}]},{"group":"Block Traders","pages":[{"title":"Get All Block Traders","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-traders","href":"/api-reference/derivatives-api/rest-api/block-traders/get-all-block-traders"},{"title":"Get Block Trader","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/block-traders/{uuid}","href":"/api-reference/derivatives-api/rest-api/block-traders/get-block-trader"}]},{"group":"Firm Position Limits","pages":[{"title":"List All Position Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/firm-position-limits","href":"/api-reference/derivatives-api/rest-api/firm-position-limits/list-all-position-limits"},{"title":"Get Firm Position Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/firm-position-limits/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-position-limits/get-firm-position-limits"},{"title":"Update Firm Position Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/firm-position-limits/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-position-limits/update-firm-position-limits"},{"title":"List All Position Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/v2/firm-position-limits","href":"/api-reference/derivatives-api/rest-api/firm-position-limits/list-all-position-limits-1"},{"title":"Get Firm Position Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/v2/firm-position-limits/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-position-limits/get-firm-position-limits-1"},{"title":"Update Firm Position Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/v2/firm-position-limits/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-position-limits/update-firm-position-limits-1"}]},{"group":"Firm Product Group Limits","pages":[{"title":"Create Zero Firm Product Group Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/firm-product-group-limit","href":"/api-reference/derivatives-api/rest-api/firm-product-group-limits/create-zero-firm-product-group-limit"},{"title":"Remove Firm Product Group Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/firm-product-group-limit/remove","href":"/api-reference/derivatives-api/rest-api/firm-product-group-limits/remove-firm-product-group-limit"},{"title":"Get Firm Product Group Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/firm-product-group-limit/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-product-group-limits/get-firm-product-group-limits"},{"title":"Create Zero Firm Product Group Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/v2/firm-product-group-limit","href":"/api-reference/derivatives-api/rest-api/firm-product-group-limits/create-zero-firm-product-group-limit-1"},{"title":"Remove Firm Product Group Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/v2/firm-product-group-limit/remove","href":"/api-reference/derivatives-api/rest-api/firm-product-group-limits/remove-firm-product-group-limit-1"},{"title":"Get Firm Product Group Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/v2/firm-product-group-limit/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-product-group-limits/get-firm-product-group-limits-1"}]},{"group":"Firm Product Limits","pages":[{"title":"Create Zero Firm Product Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/firm-product-limit","href":"/api-reference/derivatives-api/rest-api/firm-product-limits/create-zero-firm-product-limit"},{"title":"Remove Firm Product Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/firm-product-limit/remove","href":"/api-reference/derivatives-api/rest-api/firm-product-limits/remove-firm-product-limit"},{"title":"Get Firm Product Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/firm-product-limit/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-product-limits/get-firm-product-limits"},{"title":"Set Firm Product Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/v2/firm-product-limit","href":"/api-reference/derivatives-api/rest-api/firm-product-limits/set-firm-product-limit"},{"title":"Batch Set Firm Product Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/v2/firm-product-limit/batch","href":"/api-reference/derivatives-api/rest-api/firm-product-limits/batch-set-firm-product-limit"},{"title":"Remove Firm Product Limit","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/v2/firm-product-limit/remove","href":"/api-reference/derivatives-api/rest-api/firm-product-limits/remove-firm-product-limit-1"},{"title":"Get Firm Product Limits","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/v2/firm-product-limit/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/firm-product-limits/get-firm-product-limits-1"}]},{"group":"Firms","pages":[{"title":"Get All Firms","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/firms","href":"/api-reference/derivatives-api/rest-api/firms/get-all-firms"},{"title":"Get Firm","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/firms/{uuid}","href":"/api-reference/derivatives-api/rest-api/firms/get-firm"}]},{"group":"Funding Rate","pages":[{"title":"Get historical funding rates","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/funding-rate","href":"/api-reference/derivatives-api/rest-api/funding-rate/get-historical-funding-rates"}]},{"group":"Instruments","pages":[{"title":"Get Instrument Details","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/instruments","href":"/api-reference/derivatives-api/rest-api/instruments/get-instrument-details"},{"title":"Get Valid Series","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/valid-series","href":"/api-reference/derivatives-api/rest-api/instruments/get-valid-series"}]},{"group":"Risk","pages":[{"title":"Kill Switch","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/kill-switch","href":"/api-reference/derivatives-api/rest-api/risk/kill-switch"},{"title":"Unlock Trading","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json post /rest/unlock-trading","href":"/api-reference/derivatives-api/rest-api/risk/unlock-trading"}]},{"group":"Positions","pages":[{"title":"Get All Firm Positions","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/positions","href":"/api-reference/derivatives-api/rest-api/positions/get-all-firm-positions"},{"title":"Get Firm Position","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/positions/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/positions/get-firm-position"},{"title":"Get All Firm Positions","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/v2/positions","href":"/api-reference/derivatives-api/rest-api/positions/get-all-firm-positions-1"},{"title":"Get Firm Position","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/v2/positions/{firm_uuid}","href":"/api-reference/derivatives-api/rest-api/positions/get-firm-position-1"}]},{"group":"Users","pages":[{"title":"Get All Users","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/users","href":"/api-reference/derivatives-api/rest-api/users/get-all-users"},{"title":"Get User","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-api/rest-api/cde-spec.json get /rest/users/{uuid}","href":"/api-reference/derivatives-api/rest-api/users/get-user"}]}]},{"group":"FIX","pages":[{"title":"Derivatives FIX Overview","sidebarTitle":"Overview","href":"/derivatives/fix/overview"},{"title":"Derivatives FIX Header/Trailer Messages","sidebarTitle":"Header/Trailer","href":"/derivatives/fix/header-trailer"},{"title":"Derivatives FIX Session Messages","sidebarTitle":"Session","href":"/derivatives/fix/session"},{"title":"Derivatives FIX Market Data Messages","sidebarTitle":"Market Data","href":"/derivatives/fix/market-data"},{"title":"Derivatives FIX Order Entry Messages","sidebarTitle":"Order Entry","href":"/derivatives/fix/order-entry"},{"title":"Derivatives FIX Drop Copy Messages","sidebarTitle":"Drop Copy","href":"/derivatives/fix/drop-copy"},{"title":"Derivatives FIX Security Definitions","sidebarTitle":"Security Definitions","href":"/derivatives/fix/security-definitions"},{"title":"Derivatives FIX Code Sets","sidebarTitle":"Code Sets","href":"/derivatives/fix/code-sets"}]},{"group":"SBE","pages":[{"title":"Derivatives SBE Overview","sidebarTitle":"Overview","href":"/derivatives/sbe/overview"},{"title":"Derivatives SBE Header Message","sidebarTitle":"Header","href":"/derivatives/sbe/header"},{"title":"Derivatives SBE Session Messages","sidebarTitle":"Session","href":"/derivatives/sbe/session"},{"title":"Derivatives SBE Order Entry Messages","sidebarTitle":"Order Entry","href":"/derivatives/sbe/order-entry"}]},{"group":"UDP","pages":[{"title":"Derivatives UDP Overview","href":"/derivatives/udp/overview"},{"sidebarTitle":"Message Structure","title":null,"href":"/derivatives/udp/message-structure"},{"title":"Derivatives UDP Realtime Incremental Updates","sidebarTitle":"Incrementals","href":"/derivatives/udp/incrementals"},{"title":"Derivatives UDP Periodic Snapshots","sidebarTitle":"Snapshots","href":"/derivatives/udp/snapshots"},{"title":"Derivatives UDP Retransmits","sidebarTitle":"Retransmits","href":"/derivatives/udp/retransmits"}]}]},{"dropdown":"CDE: Predictions API","icon":"https://mintlify-assets.b-cdn.net/derivativesProduct-2.svg","groups":[{"group":"REST API Overview","pages":[{"title":"Welcome to the Coinbase Derivatives: Predictions REST API","sidebarTitle":"Overview","href":"/api-reference/derivatives-predictions-api/rest-api/introduction"},{"title":"Coinbase Derivatives: Predictions REST API Authentication","sidebarTitle":"Authentication","href":"/api-reference/derivatives-predictions-api/rest-api/authentication"}]},{"group":"REST Endpoints","pages":[{"group":"Account","pages":[{"title":"Get FCM balance","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/balances","href":"/api-reference/derivatives-predictions-api/rest-api/account/get-fcm-balance"},{"title":"Get the caller's own FCM","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/fcms/{id}","href":"/api-reference/derivatives-predictions-api/rest-api/account/get-the-callers-own-fcm"},{"title":"Get fill history","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/fills","href":"/api-reference/derivatives-predictions-api/rest-api/account/get-fill-history"},{"title":"Get the caller's own trading firm","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/firms/{id}","href":"/api-reference/derivatives-predictions-api/rest-api/account/get-the-callers-own-trading-firm"}]},{"group":"MarketData","pages":[{"title":"Get the L2 order book snapshot","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/orderbook/{instrument_id}","href":"/api-reference/derivatives-predictions-api/rest-api/marketdata/get-the-l2-order-book-snapshot"},{"title":"Get the ticker snapshot","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/ticker/{instrument_id}","href":"/api-reference/derivatives-predictions-api/rest-api/marketdata/get-the-ticker-snapshot"},{"title":"Get recent trades","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/trades/{instrument_id}","href":"/api-reference/derivatives-predictions-api/rest-api/marketdata/get-recent-trades"}]},{"group":"Orders","pages":[{"title":"Get open orders","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/orders","href":"/api-reference/derivatives-predictions-api/rest-api/orders/get-open-orders"},{"title":"Place an order","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json post /api/orders","href":"/api-reference/derivatives-predictions-api/rest-api/orders/place-an-order"},{"title":"Cancel an order by client order id","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json delete /api/orders","href":"/api-reference/derivatives-predictions-api/rest-api/orders/cancel-an-order-by-client-order-id"},{"title":"Cancel an order by order id","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json delete /api/orders/{order_id}","href":"/api-reference/derivatives-predictions-api/rest-api/orders/cancel-an-order-by-order-id"}]},{"group":"Health","pages":[{"title":"Liveness probe","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/ping","href":"/api-reference/derivatives-predictions-api/rest-api/health/liveness-probe"}]},{"group":"Positions","pages":[{"title":"Get open positions","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/positions","href":"/api-reference/derivatives-predictions-api/rest-api/positions/get-open-positions"}]},{"group":"Trading Controls","pages":[{"title":"Kill trading for a scope within the caller's hierarchy","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json post /api/trading/kill-switch","href":"/api-reference/derivatives-predictions-api/rest-api/trading-controls/kill-trading-for-a-scope-within-the-callers-hierarchy"},{"title":"Unlock trading for a scope within the caller's hierarchy","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json post /api/trading/unlock","href":"/api-reference/derivatives-predictions-api/rest-api/trading-controls/unlock-trading-for-a-scope-within-the-callers-hierarchy"}]},{"group":"Reference","pages":[{"title":"List events","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/v1/events","href":"/api-reference/derivatives-predictions-api/rest-api/reference/list-events"},{"title":"Get an event by id or ticker","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/v1/events/{id_or_ticker}","href":"/api-reference/derivatives-predictions-api/rest-api/reference/get-an-event-by-id-or-ticker"},{"title":"List instruments","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/v1/instruments","href":"/api-reference/derivatives-predictions-api/rest-api/reference/list-instruments"},{"title":"Get an instrument by id or ticker","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/v1/instruments/{id_or_ticker}","href":"/api-reference/derivatives-predictions-api/rest-api/reference/get-an-instrument-by-id-or-ticker"},{"title":"List series","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/v1/series","href":"/api-reference/derivatives-predictions-api/rest-api/reference/list-series"},{"title":"Get a series by id or ticker","deprecated":false,"version":null,"openapi":"/api-reference/derivatives-predictions-api/rest-api/cpm-spec.json get /api/v1/series/{id_or_ticker}","href":"/api-reference/derivatives-predictions-api/rest-api/reference/get-a-series-by-id-or-ticker"}]}]},{"group":"FIX","pages":[{"title":"Coinbase Derivatives: Predictions FIX Overview","sidebarTitle":"Overview","href":"/derivatives-predictions/fix/overview"},{"title":"Coinbase Derivatives: Predictions FIX Header/Trailer Messages","sidebarTitle":"Header/Trailer","href":"/derivatives-predictions/fix/header-trailer"},{"title":"Coinbase Derivatives: Predictions FIX Session Messages","sidebarTitle":"Session","href":"/derivatives-predictions/fix/session"},{"title":"Coinbase Derivatives: Predictions FIX Market Data Messages","sidebarTitle":"Market Data","href":"/derivatives-predictions/fix/market-data"},{"title":"Coinbase Derivatives: Predictions FIX Order Entry Messages","sidebarTitle":"Order Entry","href":"/derivatives-predictions/fix/order-entry"},{"title":"Coinbase Derivatives: Predictions FIX Drop Copy Messages","sidebarTitle":"Drop Copy","href":"/derivatives-predictions/fix/drop-copy"}]},{"group":"WebSocket","pages":[{"title":"Coinbase Derivatives: Predictions WebSocket Overview","sidebarTitle":"Overview","href":"/derivatives-predictions/websocket/overview"},{"title":"Coinbase Derivatives: Predictions WebSocket Authentication","sidebarTitle":"Authentication","href":"/derivatives-predictions/websocket/authentication"},{"title":"Coinbase Derivatives: Predictions WebSocket Commands","sidebarTitle":"Commands","href":"/derivatives-predictions/websocket/commands"},{"title":"Coinbase Derivatives: Predictions WebSocket Channels","sidebarTitle":"Channels","href":"/derivatives-predictions/websocket/channels"}]}]},{"dropdown":"CDP API V1","icon":"https://mintlify-assets.b-cdn.net/layerNetworks-3.svg","groups":[{"group":"CDP API V1","pages":[{"title":"Welcome to CDP APIs","sidebarTitle":"Overview","href":"/api-reference/introduction"},{"title":"API Authentication","sidebarTitle":"Authentication","href":"/api-reference/authentication"},{"title":"Networks","href":"/api-reference/networks"}]},{"group":"REST API","pages":[{"group":"Staking","pages":[{"title":"Build a new staking operation","openapi":"POST /v1/stake/build","href":"/api-reference/rest-api/staking/build-a-new-staking-operation"},{"title":"Fetch historical staking balances","openapi":"GET /v1/networks/{network_id}/addresses/{address_id}/stake/balances","href":"/api-reference/rest-api/staking/fetch-historical-staking-balances"},{"title":"Fetch staking rewards","openapi":"POST /v1/stake/rewards/search","href":"/api-reference/rest-api/staking/fetch-staking-rewards"},{"title":"Get latest staking operation","openapi":"GET /v1/networks/{network_id}/addresses/{address_id}/staking_operations/{staking_operation_id}","href":"/api-reference/rest-api/staking/get-latest-staking-operation"},{"title":"Get staking context","openapi":"POST /v1/stake/context","href":"/api-reference/rest-api/staking/get-staking-context"},{"title":"Get validator by ID","openapi":"GET /v1/networks/{network_id}/assets/{asset_id}/validators/{validator_id}","href":"/api-reference/rest-api/staking/get-validator-by-id"},{"title":"List validators","openapi":"GET /v1/networks/{network_id}/assets/{asset_id}/validators","href":"/api-reference/rest-api/staking/list-validators"}]},{"group":"Onramp/Offramp","pages":[{"title":"Create buy quote","openapi":"POST /v1/buy/quote","href":"/api-reference/rest-api/onramp-offramp/create-buy-quote"},{"title":"Create sell quote","openapi":"POST /v1/sell/quote","href":"/api-reference/rest-api/onramp-offramp/create-sell-quote"},{"title":"Create session token","openapi":"POST /v1/token","href":"/api-reference/rest-api/onramp-offramp/create-session-token"},{"title":"Get all offramp transactions","openapi":"GET /v1/sell/transactions","href":"/api-reference/rest-api/onramp-offramp/get-all-offramp-transactions"},{"title":"Get all onramp transactions","openapi":"GET /v1/buy/transactions","href":"/api-reference/rest-api/onramp-offramp/get-all-onramp-transactions"},{"title":"Get buy config","openapi":"GET /v1/buy/config","href":"/api-reference/rest-api/onramp-offramp/get-buy-config"},{"title":"Get buy options","openapi":"GET /v1/buy/options","href":"/api-reference/rest-api/onramp-offramp/get-buy-options"},{"title":"Get offramp transactions by ID","openapi":"GET /v1/sell/user/{partnerUserRef}/transactions","href":"/api-reference/rest-api/onramp-offramp/get-offramp-transactions-by-id"},{"title":"Get onramp transactions by ID","openapi":"GET /v1/buy/user/{partnerUserRef}/transactions","href":"/api-reference/rest-api/onramp-offramp/get-onramp-transactions-by-id"},{"title":"Get sell config","openapi":"GET /v1/sell/config","href":"/api-reference/rest-api/onramp-offramp/get-sell-config"},{"title":"Get sell options","openapi":"GET /v1/sell/options","href":"/api-reference/rest-api/onramp-offramp/get-sell-options"}]}]},{"group":"JSON-RPC API","pages":[{"title":"Core JSON-RPC Methods","sidebarTitle":"Core","href":"/api-reference/json-rpc-api/core"},{"title":"Paymaster JSON-RPC Methods","sidebarTitle":"Paymaster","href":"/api-reference/json-rpc-api/paymaster"},{"title":"Address History JSON-RPC Methods","sidebarTitle":"Address History","href":"/api-reference/json-rpc-api/address-history"}]}]}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks"}]},{"tab":"Recipes","pages":[{"title":"Recipes","href":"/recipes/settle-customer-stablecoins-as-usd"}]},{"tab":"Changelogs","pages":[{"title":"Changelogs","href":"/get-started/changelog"}]}]},"title":"Sign EIP-712 typed data via end user EVM account - Coinbase Developer Documentation","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}