{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}
{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}
{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}
{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}
{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}
{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}
{
"type": "https://docs.etherfuse.com/ramp/v2/errors/quote-expired",
"title": "Quote expired",
"status": 400,
"detail": "quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist",
"instance": "tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d",
"errors": [
{
"pointer": "#/accountDetails/clabe",
"detail": "This field is required."
}
],
"required": [
"<string>"
],
"missing": [
"<string>"
]
}
Quotes
Create quote
Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key’s organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote’s quoteId to POST /organization/{organizationId}/order with the same organizationId before expiresAt; a quote is valid for 2 minutes.
One side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported.
Rails. Each side moves on one rail. Omit sourceRail or destinationRail and we use the account’s default rail for that direction (the rail with isDefault: true in the account’s rails). When two of an account’s rails tie, name the rail. The account’s status for that direction on that rail must be ready, or the quote fails with 409payment-account-not-ready.
Assets. Send an asset from GET /supported_assets: a currency code such as MXN for a fiat side, a token’s asset for a crypto side. Filter that list by paymentAccountId to see what each account can use. For a cross-chain transfer, send the token’s asset on each chain, and pick a destination chain from the source token’s bridgeDestinations.
Approval. The organization must be approved, or the quote fails with 409organization-not-approved.
Decimal string. What the destination receives after fees. On an onramp into a stablebond, we price the bond at the end of the order's funding window, so this is slightly less than today's price gives. See Fees.
Total fee as a decimal string, in the source asset, rounded down to that asset's decimals. Each line in fees is in its own asset, so the lines do not add up to this total when their assets differ.
The mid-market FX rate, as a decimal string. Present only on quotes that convert between currencies.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Etherfuse API","colors":{"primary":"#141414","light":"#E4FF3F","dark":"#141414"},"logo":{"light":"https://mintcdn.com/etherfuse/XRSchVFGUgreQatD/img/logo-black.svg?fit=max\u0026auto=format\u0026n=XRSchVFGUgreQatD\u0026q=85\u0026s=92cf84eca27df4a19f7b032da398d110","dark":"https://mintcdn.com/etherfuse/XRSchVFGUgreQatD/img/logo-white.svg?fit=max\u0026auto=format\u0026n=XRSchVFGUgreQatD\u0026q=85\u0026s=7c87780c9a248347ffe6357ccf6762ed","href":"https://etherfuse.com"},"favicon":"https://mintcdn.com/etherfuse/pF4txuzXWQE790kS/img/favicon.png?fit=max\u0026auto=format\u0026n=pF4txuzXWQE790kS\u0026q=85\u0026s=ac74be5f7f4605e75bc961be0c6e5ff9","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python"],"autogenerate":true}},"navbar":{"links":[{"href":"https://cal.com/team/etherfuse/api-overview?overlayCalendar=true","label":"Book a demo"},{"href":"https://app.etherfuse.com","label":"App"}],"primary":{"type":"button","label":"Get sandbox keys","href":"https://sandbox.etherfuse.com/sign-in?returnTo=%2Faccount%2Fmanage"}},"footer":{"links":[{"items":[{"label":"Website","href":"https://etherfuse.com"},{"label":"App","href":"https://app.etherfuse.com"},{"label":"Book a demo","href":"https://cal.com/team/etherfuse/api-overview?overlayCalendar=true"}]}]},"fonts":{"family":"Figtree"},"integrations":{"posthog":{"apiKey":"phc_vJEpZk4aZr9PxdPqapjg8ZKWFybTTmDvAxZNg88LTuPu","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"etherfuse","hasAudioNarration":false,"actualSubdomain":"etherfuse","customDomains":["docs.etherfuse.com"],"gitSource":{"type":"github","owner":"etherfuse","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae547dfd382909612c83cf7","collectionId":"eee1a3e5-d040-4b45-980d-cc540ca77f29","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae547dfd382909612c83cf7"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae547dfd382909612c83cf7","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API Reference","count":151},{"language":"default","tag":"Ramp API","count":72},{"language":"default","tag":"Guides","count":65},{"language":"default","tag":"KYC","count":20},{"language":"default","tag":"Lookup API","count":18},{"language":"default","tag":"Orders","count":17},{"language":"default","tag":"Organizations","count":16},{"language":"default","tag":"User Authentication","count":12},{"language":"default","tag":"Blockchains","count":12},{"language":"default","tag":"Integration Guides","count":12}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"global.css","content":"body{scrollbar-gutter:stable}.sandbox-playground-cta{display:block;margin:1rem 0 1.25rem;padding:1rem 1.25rem;border-radius:.75rem;border:1px solid #141414;background-color:#e4ff3f;color:#141414!important;text-decoration:none;transition:background-color .15s ease,box-shadow .15s ease}.sandbox-playground-cta:hover{background-color:#d8f32f;box-shadow:0 2px 8px rgba(20,20,20,.12);color:#141414!important}.sandbox-playground-cta__body,.sandbox-playground-cta__detail,.sandbox-playground-cta__title{color:inherit!important}.dark .sandbox-playground-cta{border-color:#e4ff3f;background-color:#e4ff3f;color:#141414!important}.dark .sandbox-playground-cta:hover{background-color:#d8f32f;color:#141414!important}.sandbox-playground-cta__title{display:block;font-size:1rem;font-weight:600;margin-bottom:.35rem}.sandbox-playground-cta__body{display:block;font-size:.95rem;line-height:1.45;font-weight:500}.sandbox-playground-cta__detail{display:block;margin-top:.35rem;font-size:.85rem;line-height:1.45;opacity:.85}"}],"page":{"pagePath":"v2/api-reference/quotes/create-quote","slug":"/v2/api-reference/quotes/create-quote","pageMetadata":{"title":"Create quote","openapi":"openapi-v2.json POST /organization/{organizationId}/quote","description":"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key's organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote's `quoteId` to `POST /organization/{organizationId}/order` with the same `organizationId` before `expiresAt`; a quote is valid for 2 minutes.\n\nOne side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported.\n\n**Rails.** Each side moves on one rail. Omit `sourceRail` or `destinationRail` and we use the account's default rail for that direction (the rail with `isDefault: true` in the account's `rails`). When two of an account's rails tie, name the rail. The account's status for that direction on that rail must be `ready`, or the quote fails with `409` `payment-account-not-ready`.\n\n**Assets.** Send an `asset` from [`GET /supported_assets`](/v2/api-reference/assets/list-supported-assets): a currency code such as `MXN` for a fiat side, a token's `asset` for a crypto side. Filter that list by `paymentAccountId` to see what each account can use. For a cross-chain transfer, send the token's `asset` on each chain, and pick a destination chain from the source token's `bridgeDestinations`.\n\n**Approval.** The organization must be approved, or the quote fails with `409` `organization-not-approved`.","href":"/v2/api-reference/quotes/create-quote"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key’s organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote’s \", _jsx(_components.code, {\n children: \"quoteId\"\n }), \" to \", _jsx(_components.code, {\n children: \"POST /organization/{organizationId}/order\"\n }), \" with the same \", _jsx(_components.code, {\n children: \"organizationId\"\n }), \" before \", _jsx(_components.code, {\n children: \"expiresAt\"\n }), \"; a quote is valid for 2 minutes.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"One side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Rails.\"\n }), \" Each side moves on one rail. Omit \", _jsx(_components.code, {\n children: \"sourceRail\"\n }), \" or \", _jsx(_components.code, {\n children: \"destinationRail\"\n }), \" and we use the account’s default rail for that direction (the rail with \", _jsx(_components.code, {\n children: \"isDefault: true\"\n }), \" in the account’s \", _jsx(_components.code, {\n children: \"rails\"\n }), \"). When two of an account’s rails tie, name the rail. The account’s status for that direction on that rail must be \", _jsx(_components.code, {\n children: \"ready\"\n }), \", or the quote fails with \", _jsx(_components.code, {\n children: \"409\"\n }), \" \", _jsx(_components.code, {\n children: \"payment-account-not-ready\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Assets.\"\n }), \" Send an \", _jsx(_components.code, {\n children: \"asset\"\n }), \" from \", _jsx(_components.a, {\n href: \"/v2/api-reference/assets/list-supported-assets\",\n children: _jsx(_components.code, {\n children: \"GET /supported_assets\"\n })\n }), \": a currency code such as \", _jsx(_components.code, {\n children: \"MXN\"\n }), \" for a fiat side, a token’s \", _jsx(_components.code, {\n children: \"asset\"\n }), \" for a crypto side. Filter that list by \", _jsx(_components.code, {\n children: \"paymentAccountId\"\n }), \" to see what each account can use. For a cross-chain transfer, send the token’s \", _jsx(_components.code, {\n children: \"asset\"\n }), \" on each chain, and pick a destination chain from the source token’s \", _jsx(_components.code, {\n children: \"bridgeDestinations\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Approval.\"\n }), \" The organization must be approved, or the quote fails with \", _jsx(_components.code, {\n children: \"409\"\n }), \" \", _jsx(_components.code, {\n children: \"organization-not-approved\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create quote","openapi":"openapi-v2.json POST /organization/{organizationId}/quote","description":"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key's organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote's `quoteId` to `POST /organization/{organizationId}/order` with the same `organizationId` before `expiresAt`; a quote is valid for 2 minutes.\n\nOne side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported.\n\n**Rails.** Each side moves on one rail. Omit `sourceRail` or `destinationRail` and we use the account's default rail for that direction (the rail with `isDefault: true` in the account's `rails`). When two of an account's rails tie, name the rail. The account's status for that direction on that rail must be `ready`, or the quote fails with `409` `payment-account-not-ready`.\n\n**Assets.** Send an `asset` from [`GET /supported_assets`](/v2/api-reference/assets/list-supported-assets): a currency code such as `MXN` for a fiat side, a token's `asset` for a crypto side. Filter that list by `paymentAccountId` to see what each account can use. For a cross-chain transfer, send the token's `asset` on each chain, and pick a destination chain from the source token's `bridgeDestinations`.\n\n**Approval.** The organization must be approved, or the quote fails with `409` `organization-not-approved`.","href":"/v2/api-reference/quotes/create-quote"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Quotes"],"summary":"Create quote","operationId":"v2CreateQuote","parameters":["1eee80f5-597c-4f83-bff2-df0a1bd181ae"],"description":"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key's organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote's `quoteId` to `POST /organization/{organizationId}/order` with the same `organizationId` before `expiresAt`; a quote is valid for 2 minutes.\n\nOne side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported.\n\n**Rails.** Each side moves on one rail. Omit `sourceRail` or `destinationRail` and we use the account's default rail for that direction (the rail with `isDefault: true` in the account's `rails`). When two of an account's rails tie, name the rail. The account's status for that direction on that rail must be `ready`, or the quote fails with `409` `payment-account-not-ready`.\n\n**Assets.** Send an `asset` from [`GET /supported_assets`](/v2/api-reference/assets/list-supported-assets): a currency code such as `MXN` for a fiat side, a token's `asset` for a crypto side. Filter that list by `paymentAccountId` to see what each account can use. For a cross-chain transfer, send the token's `asset` on each chain, and pick a destination chain from the source token's `bridgeDestinations`.\n\n**Approval.** The organization must be approved, or the quote fails with `409` `organization-not-approved`.","requestBody":"5bee8357-dd4e-466b-a95f-8fffeb4dd127","responses":{"200":"e3887f2a-741d-4da5-b368-8729138ec7fe","400":"d037ede3-7d52-4ff0-8d8d-ba3c659aac5f","401":"23a4de2a-cef3-4f64-b431-907b7f92337b","404":"5c97e771-9d23-4fc3-9304-fd615ceafbad","409":"467b3df0-203e-4f3b-b9e5-644dab4e6326","413":"99913ccb-27c9-4dad-960f-10c3a2186725","422":"d6d6f7a2-20a2-48c4-b6c9-4e8fa368f09c","500":"2fa4a487-3294-41d8-a599-1a552ebc86d5"},"method":"post","type":"path","servers":["58ef8c25-fe99-4a3a-b3d6-63ae68d90d12"],"security":["e2afb556-03f4-4063-920b-822ee6d2cce7"],"path":"/organization/{organizationId}/quote","baseUrlOptions":["https://api.sand.etherfuse.com"],"title":"Create quote","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"1eee80f5-597c-4f83-bff2-df0a1bd181ae":{"name":"organizationId","in":"path","required":true,"description":"The organization this call acts for: your API key's organization or one of its customer organizations. Any other id returns `404` `not-found`.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The organization this call acts for: your API key's organization or one of its customer organizations. Any other id returns `404` `not-found`.","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source","destination","sourceAmount","sourceAsset","destinationAsset"],"properties":{"source":{"oneOf":[{"type":"object","title":"stored","description":"A payment account in a quote, tagged by `type`. Use `stored` with a registered account's `id`. `inline` is not supported yet and returns `400` `invalid-request`.","required":["type","id"],"properties":{"type":{"type":"string","const":"stored","isRequired":true,"uniqueKey":"source.oneOf.0.type","typeLabel":"string"},"id":{"type":"string","format":"uuid","description":"A payment account `id` held by the organization in the route, or by your own organization when the route names one of your customers.","isRequired":true,"uniqueKey":"source.oneOf.0.id","typeLabel":"string\u003cuuid>"}},"isRequired":true,"uniqueKey":"source.oneOf.0","typeLabel":"stored · object"},{"type":"object","title":"inline","description":"A payment account in a quote, tagged by `type`. Use `stored` with a registered account's `id`. `inline` is not supported yet and returns `400` `invalid-request`.","required":["type"],"properties":{"type":{"type":"string","const":"inline","isRequired":true,"uniqueKey":"source.oneOf.1.type","typeLabel":"string"}},"isRequired":true,"uniqueKey":"source.oneOf.1","typeLabel":"inline · object"}],"isRequired":true,"uniqueKey":"source","typeLabel":"stored · object | inline · object"},"destination":{"oneOf":[{"type":"object","title":"stored","description":"A payment account in a quote, tagged by `type`. Use `stored` with a registered account's `id`. `inline` is not supported yet and returns `400` `invalid-request`.","required":["type","id"],"properties":{"type":{"type":"string","const":"stored","isRequired":true,"uniqueKey":"destination.oneOf.0.type","typeLabel":"string"},"id":{"type":"string","format":"uuid","description":"A payment account `id` held by the organization in the route, or by your own organization when the route names one of your customers.","isRequired":true,"uniqueKey":"destination.oneOf.0.id","typeLabel":"string\u003cuuid>"}},"isRequired":true,"uniqueKey":"destination.oneOf.0","typeLabel":"stored · object"},{"type":"object","title":"inline","description":"A payment account in a quote, tagged by `type`. Use `stored` with a registered account's `id`. `inline` is not supported yet and returns `400` `invalid-request`.","required":["type"],"properties":{"type":{"type":"string","const":"inline","isRequired":true,"uniqueKey":"destination.oneOf.1.type","typeLabel":"string"}},"isRequired":true,"uniqueKey":"destination.oneOf.1","typeLabel":"inline · object"}],"isRequired":true,"uniqueKey":"destination","typeLabel":"stored · object | inline · object"},"sourceAmount":{"type":"string","description":"Amount the source sends, as a positive decimal string.","example":"1000","isRequired":true,"uniqueKey":"sourceAmount","typeLabel":"string"},"sourceAsset":{"type":"string","description":"An `asset` from `GET /supported_assets`: a currency code such as `MXN` for a fiat source, or a token's `asset` for a crypto source.","example":"MXN","isRequired":true,"uniqueKey":"sourceAsset","typeLabel":"string"},"destinationAsset":{"type":"string","description":"An `asset` from `GET /supported_assets`: a currency code for a fiat destination, or a token's `asset` for a crypto destination.","example":"USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN","isRequired":true,"uniqueKey":"destinationAsset","typeLabel":"string"},"sourceRail":{"type":"string","enum":["spei","pix","solana","base","polygon","monad","stellar","avalanche"],"description":"The rail the source moves on. Omit to use the source account's default rail.","uniqueKey":"sourceRail","typeLabel":"enum\u003cstring>"},"destinationRail":{"type":"string","enum":["spei","pix","solana","base","polygon","monad","stellar","avalanche"],"description":"The rail the destination moves on. Omit to use the destination account's default rail.","uniqueKey":"destinationRail","typeLabel":"enum\u003cstring>"},"partnerFeeBpsOverride":{"type":"integer","minimum":0,"description":"Partner fee for this quote in basis points, in place of your organization's default partner fee. Values above 500 are capped at 500.","uniqueKey":"partnerFeeBpsOverride","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"source":{"type":"stored","id":"3f9a2c1e-5b7d-4e8f-9a01-2b3c4d5e6f70"},"destination":{"type":"stored","id":"8c1d2e3f-4a5b-4c6d-8e7f-901a2b3c4d5e"},"sourceAmount":"1000","sourceAsset":"MXN","destinationAsset":"USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"},"examples":{"Example":{"title":"Example","value":{"source":{"type":"stored","id":"3f9a2c1e-5b7d-4e8f-9a01-2b3c4d5e6f70"},"destination":{"type":"stored","id":"8c1d2e3f-4a5b-4c6d-8e7f-901a2b3c4d5e"},"sourceAmount":"1000","sourceAsset":"MXN","destinationAsset":"USDC:GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"e3887f2a-741d-4da5-b368-8729138ec7fe":{"description":"The quote.","content":{"application/json":{"schema":{"type":"object","required":["quoteId","sourceAmount","destinationAmount","sourceAsset","destinationAsset","sourceRail","destinationRail","rateAfterFees","rateBeforeFees","feeBps","feeAmount","fees","createdAt","expiresAt"],"properties":{"quoteId":{"type":"string","format":"uuid","description":"Pass to `POST /organization/{organizationId}/order`. Becomes the order's `id`.","isRequired":true,"uniqueKey":"quoteId","typeLabel":"string\u003cuuid>"},"sourceAmount":{"type":"string","description":"Decimal string.","isRequired":true,"uniqueKey":"sourceAmount","typeLabel":"string"},"destinationAmount":{"type":"string","description":"Decimal string. What the destination receives after fees. On an onramp into a stablebond, we price the bond at the end of the order's funding window, so this is slightly less than today's price gives. See [Fees](/v2/fees).","isRequired":true,"uniqueKey":"destinationAmount","typeLabel":"string"},"sourceAsset":{"type":"string","isRequired":true,"uniqueKey":"sourceAsset","typeLabel":"string"},"destinationAsset":{"type":"string","isRequired":true,"uniqueKey":"destinationAsset","typeLabel":"string"},"sourceRail":{"type":"string","enum":["spei","pix","solana","base","polygon","monad","stellar","avalanche"],"description":"The network that moves the money. For a wallet, the rail is its chain.","isRequired":true,"uniqueKey":"sourceRail","typeLabel":"enum\u003cstring>"},"destinationRail":{"type":"string","enum":["spei","pix","solana","base","polygon","monad","stellar","avalanche"],"description":"The network that moves the money. For a wallet, the rail is its chain.","isRequired":true,"uniqueKey":"destinationRail","typeLabel":"enum\u003cstring>"},"rateAfterFees":{"type":"string","description":"The rate the customer gets after fees, as a decimal string.","isRequired":true,"uniqueKey":"rateAfterFees","typeLabel":"string"},"rateBeforeFees":{"type":"string","description":"The rate before our fee, as a decimal string.","isRequired":true,"uniqueKey":"rateBeforeFees","typeLabel":"string"},"feeBps":{"type":"integer","description":"Total fee in basis points.","isRequired":true,"uniqueKey":"feeBps","typeLabel":"integer"},"feeAmount":{"type":"string","description":"Total fee as a decimal string, in the source asset, rounded down to that asset's decimals. Each line in `fees` is in its own `asset`, so the lines do not add up to this total when their assets differ.","isRequired":true,"uniqueKey":"feeAmount","typeLabel":"string"},"fees":{"type":"array","description":"The fee lines. The order created from this quote returns the same lines.","items":{"type":"object","required":["type","amount","asset","bps"],"properties":{"type":{"type":"string","enum":["transactionFee","partnerFee","walletSponsor","bridge"],"isRequired":true,"uniqueKey":"fees.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"amount":{"type":"string","description":"Decimal string.","isRequired":true,"uniqueKey":"fees.items.[INDEX].amount","typeLabel":"string"},"asset":{"type":"string","description":"The asset the fee is charged in.","isRequired":true,"uniqueKey":"fees.items.[INDEX].asset","typeLabel":"string"},"bps":{"oneOf":[{"type":"integer","description":"The fee rate in basis points, when the fee has one. Always null on a quote.","isRequired":true,"uniqueKey":"fees.items.[INDEX].bps.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The fee rate in basis points, when the fee has one. Always null on a quote.","isRequired":true,"uniqueKey":"fees.items.[INDEX].bps.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"fees.items.[INDEX].bps","typeLabel":"integer | null"}},"uniqueKey":"fees.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"fees","typeLabel":"object[]"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"expiresAt":{"type":"string","format":"date-time","description":"Create the order before this time. 2 minutes after `createdAt`.","isRequired":true,"uniqueKey":"expiresAt","typeLabel":"string\u003cdate-time>"},"midMarketRate":{"type":"string","description":"The mid-market FX rate, as a decimal string. Present only on quotes that convert between currencies.","uniqueKey":"midMarketRate","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"quoteId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","sourceAmount":"\u003cstring>","destinationAmount":"\u003cstring>","sourceAsset":"\u003cstring>","destinationAsset":"\u003cstring>","sourceRail":"spei","destinationRail":"spei","rateAfterFees":"\u003cstring>","rateBeforeFees":"\u003cstring>","feeBps":123,"feeAmount":"\u003cstring>","fees":[{"type":"transactionFee","amount":"\u003cstring>","asset":"\u003cstring>","bps":123}],"createdAt":"2023-11-07T05:31:56Z","expiresAt":"2023-11-07T05:31:56Z","midMarketRate":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"d037ede3-7d52-4ff0-8d8d-ba3c659aac5f":{"description":"`invalid-request`: the body is malformed; `sourceAmount` is not a positive decimal or is too small to cover the fees; a side is `inline` or is not registered to the organization; the pair is fiat to fiat, two different tokens on different chains, or uses an unknown or unsupported asset; the named rail cannot carry that direction; or two rails tie and none was named. `amount-out-of-range`: the amount is below the minimum or above the maximum of a side's rail. `sandbox-limit-exceeded`: the sandbox limit for onramps was exceeded.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details. Every v2 error uses this body with content type `application/problem+json`. `errors` is present only on `validation-error`. `required` and `missing` are present only on `registration-info-required`.","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri","description":"`https://docs.etherfuse.com/ramp/v2/errors/` followed by the problem slug, for example `https://docs.etherfuse.com/ramp/v2/errors/quote-expired`. Switch on this value.","example":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","example":"Quote expired","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence. Do not parse it.","example":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"Unique identifier for this occurrence. Quote it to support.","example":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"errors":{"type":"array","description":"Present on `validation-error`. One entry per invalid field.","items":{"type":"object","required":["pointer","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer to the field in the request, for example `#/accountDetails/clabe`.","example":"#/accountDetails/clabe","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with the field.","example":"This field is required.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"required":{"type":"array","description":"Present on `registration-info-required`. Every registration field the route requires, as JSON Pointers into the request, for example `#/registrationInfo/taxId`.","items":{"type":"string","uniqueKey":"required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required","typeLabel":"string[]"},"missing":{"type":"array","description":"Present on `registration-info-required`. The required fields you must still send, as JSON Pointers into the request.","items":{"type":"string","uniqueKey":"missing.items.[INDEX]","typeLabel":"string"},"uniqueKey":"missing","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","title":"Quote expired","status":400,"detail":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","instance":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","errors":[{"pointer":"#/accountDetails/clabe","detail":"This field is required."}],"required":["\u003cstring>"],"missing":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"23a4de2a-cef3-4f64-b431-907b7f92337b":{"description":"`unauthorized`: the `Authorization` header is missing, not ASCII, or does not hold a valid API key.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details. Every v2 error uses this body with content type `application/problem+json`. `errors` is present only on `validation-error`. `required` and `missing` are present only on `registration-info-required`.","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri","description":"`https://docs.etherfuse.com/ramp/v2/errors/` followed by the problem slug, for example `https://docs.etherfuse.com/ramp/v2/errors/quote-expired`. Switch on this value.","example":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","example":"Quote expired","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence. Do not parse it.","example":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"Unique identifier for this occurrence. Quote it to support.","example":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"errors":{"type":"array","description":"Present on `validation-error`. One entry per invalid field.","items":{"type":"object","required":["pointer","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer to the field in the request, for example `#/accountDetails/clabe`.","example":"#/accountDetails/clabe","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with the field.","example":"This field is required.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"required":{"type":"array","description":"Present on `registration-info-required`. Every registration field the route requires, as JSON Pointers into the request, for example `#/registrationInfo/taxId`.","items":{"type":"string","uniqueKey":"required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required","typeLabel":"string[]"},"missing":{"type":"array","description":"Present on `registration-info-required`. The required fields you must still send, as JSON Pointers into the request.","items":{"type":"string","uniqueKey":"missing.items.[INDEX]","typeLabel":"string"},"uniqueKey":"missing","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","title":"Quote expired","status":400,"detail":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","instance":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","errors":[{"pointer":"#/accountDetails/clabe","detail":"This field is required."}],"required":["\u003cstring>"],"missing":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"5c97e771-9d23-4fc3-9304-fd615ceafbad":{"description":"`not-found`: your API key cannot act for this organization.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details. Every v2 error uses this body with content type `application/problem+json`. `errors` is present only on `validation-error`. `required` and `missing` are present only on `registration-info-required`.","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri","description":"`https://docs.etherfuse.com/ramp/v2/errors/` followed by the problem slug, for example `https://docs.etherfuse.com/ramp/v2/errors/quote-expired`. Switch on this value.","example":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","example":"Quote expired","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence. Do not parse it.","example":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"Unique identifier for this occurrence. Quote it to support.","example":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"errors":{"type":"array","description":"Present on `validation-error`. One entry per invalid field.","items":{"type":"object","required":["pointer","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer to the field in the request, for example `#/accountDetails/clabe`.","example":"#/accountDetails/clabe","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with the field.","example":"This field is required.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"required":{"type":"array","description":"Present on `registration-info-required`. Every registration field the route requires, as JSON Pointers into the request, for example `#/registrationInfo/taxId`.","items":{"type":"string","uniqueKey":"required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required","typeLabel":"string[]"},"missing":{"type":"array","description":"Present on `registration-info-required`. The required fields you must still send, as JSON Pointers into the request.","items":{"type":"string","uniqueKey":"missing.items.[INDEX]","typeLabel":"string"},"uniqueKey":"missing","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","title":"Quote expired","status":400,"detail":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","instance":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","errors":[{"pointer":"#/accountDetails/clabe","detail":"This field is required."}],"required":["\u003cstring>"],"missing":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"467b3df0-203e-4f3b-b9e5-644dab4e6326":{"description":"`organization-not-approved`: the organization is not approved. `payment-account-disabled`: a side's account is disabled. `payment-account-not-ready`: a side's account is not `ready` on the chosen rail in that direction, is not registered on the named rail, or has no rail that can carry that direction.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details. Every v2 error uses this body with content type `application/problem+json`. `errors` is present only on `validation-error`. `required` and `missing` are present only on `registration-info-required`.","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri","description":"`https://docs.etherfuse.com/ramp/v2/errors/` followed by the problem slug, for example `https://docs.etherfuse.com/ramp/v2/errors/quote-expired`. Switch on this value.","example":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","example":"Quote expired","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence. Do not parse it.","example":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"Unique identifier for this occurrence. Quote it to support.","example":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"errors":{"type":"array","description":"Present on `validation-error`. One entry per invalid field.","items":{"type":"object","required":["pointer","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer to the field in the request, for example `#/accountDetails/clabe`.","example":"#/accountDetails/clabe","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with the field.","example":"This field is required.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"required":{"type":"array","description":"Present on `registration-info-required`. Every registration field the route requires, as JSON Pointers into the request, for example `#/registrationInfo/taxId`.","items":{"type":"string","uniqueKey":"required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required","typeLabel":"string[]"},"missing":{"type":"array","description":"Present on `registration-info-required`. The required fields you must still send, as JSON Pointers into the request.","items":{"type":"string","uniqueKey":"missing.items.[INDEX]","typeLabel":"string"},"uniqueKey":"missing","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","title":"Quote expired","status":400,"detail":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","instance":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","errors":[{"pointer":"#/accountDetails/clabe","detail":"This field is required."}],"required":["\u003cstring>"],"missing":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"99913ccb-27c9-4dad-960f-10c3a2186725":{"description":"`payload-too-large`: the request body is too large.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details. Every v2 error uses this body with content type `application/problem+json`. `errors` is present only on `validation-error`. `required` and `missing` are present only on `registration-info-required`.","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri","description":"`https://docs.etherfuse.com/ramp/v2/errors/` followed by the problem slug, for example `https://docs.etherfuse.com/ramp/v2/errors/quote-expired`. Switch on this value.","example":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","example":"Quote expired","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence. Do not parse it.","example":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"Unique identifier for this occurrence. Quote it to support.","example":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"errors":{"type":"array","description":"Present on `validation-error`. One entry per invalid field.","items":{"type":"object","required":["pointer","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer to the field in the request, for example `#/accountDetails/clabe`.","example":"#/accountDetails/clabe","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with the field.","example":"This field is required.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"required":{"type":"array","description":"Present on `registration-info-required`. Every registration field the route requires, as JSON Pointers into the request, for example `#/registrationInfo/taxId`.","items":{"type":"string","uniqueKey":"required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required","typeLabel":"string[]"},"missing":{"type":"array","description":"Present on `registration-info-required`. The required fields you must still send, as JSON Pointers into the request.","items":{"type":"string","uniqueKey":"missing.items.[INDEX]","typeLabel":"string"},"uniqueKey":"missing","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","title":"Quote expired","status":400,"detail":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","instance":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","errors":[{"pointer":"#/accountDetails/clabe","detail":"This field is required."}],"required":["\u003cstring>"],"missing":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"d6d6f7a2-20a2-48c4-b6c9-4e8fa368f09c":{"description":"`quote-unavailable`: we cannot price this route right now. Retry later. `unsupported`: the route is not supported, for example a principal token on a chain that does not carry it, or a cross-chain transfer to a chain missing from the token's `bridgeDestinations`.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details. Every v2 error uses this body with content type `application/problem+json`. `errors` is present only on `validation-error`. `required` and `missing` are present only on `registration-info-required`.","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri","description":"`https://docs.etherfuse.com/ramp/v2/errors/` followed by the problem slug, for example `https://docs.etherfuse.com/ramp/v2/errors/quote-expired`. Switch on this value.","example":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","example":"Quote expired","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence. Do not parse it.","example":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"Unique identifier for this occurrence. Quote it to support.","example":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"errors":{"type":"array","description":"Present on `validation-error`. One entry per invalid field.","items":{"type":"object","required":["pointer","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer to the field in the request, for example `#/accountDetails/clabe`.","example":"#/accountDetails/clabe","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with the field.","example":"This field is required.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"required":{"type":"array","description":"Present on `registration-info-required`. Every registration field the route requires, as JSON Pointers into the request, for example `#/registrationInfo/taxId`.","items":{"type":"string","uniqueKey":"required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required","typeLabel":"string[]"},"missing":{"type":"array","description":"Present on `registration-info-required`. The required fields you must still send, as JSON Pointers into the request.","items":{"type":"string","uniqueKey":"missing.items.[INDEX]","typeLabel":"string"},"uniqueKey":"missing","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","title":"Quote expired","status":400,"detail":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","instance":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","errors":[{"pointer":"#/accountDetails/clabe","detail":"This field is required."}],"required":["\u003cstring>"],"missing":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"2fa4a487-3294-41d8-a599-1a552ebc86d5":{"description":"`internal-error`: an unexpected error on our side. Retry with backoff, and quote `instance` to support if it persists.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem details. Every v2 error uses this body with content type `application/problem+json`. `errors` is present only on `validation-error`. `required` and `missing` are present only on `registration-info-required`.","required":["type","title","status","detail","instance"],"properties":{"type":{"type":"string","format":"uri","description":"`https://docs.etherfuse.com/ramp/v2/errors/` followed by the problem slug, for example `https://docs.etherfuse.com/ramp/v2/errors/quote-expired`. Switch on this value.","example":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Short summary of the problem type.","example":"Quote expired","isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"The HTTP status code.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"detail":{"type":"string","description":"Human-readable explanation of this occurrence. Do not parse it.","example":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","isRequired":true,"uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"Unique identifier for this occurrence. Quote it to support.","example":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","isRequired":true,"uniqueKey":"instance","typeLabel":"string"},"errors":{"type":"array","description":"Present on `validation-error`. One entry per invalid field.","items":{"type":"object","required":["pointer","detail"],"properties":{"pointer":{"type":"string","description":"JSON Pointer to the field in the request, for example `#/accountDetails/clabe`.","example":"#/accountDetails/clabe","isRequired":true,"uniqueKey":"errors.items.[INDEX].pointer","typeLabel":"string"},"detail":{"type":"string","description":"What is wrong with the field.","example":"This field is required.","isRequired":true,"uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"required":{"type":"array","description":"Present on `registration-info-required`. Every registration field the route requires, as JSON Pointers into the request, for example `#/registrationInfo/taxId`.","items":{"type":"string","uniqueKey":"required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"required","typeLabel":"string[]"},"missing":{"type":"array","description":"Present on `registration-info-required`. The required fields you must still send, as JSON Pointers into the request.","items":{"type":"string","uniqueKey":"missing.items.[INDEX]","typeLabel":"string"},"uniqueKey":"missing","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.etherfuse.com/ramp/v2/errors/quote-expired","title":"Quote expired","status":400,"detail":"quote 5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b has expired or does not exist","instance":"tag:etherfuse.com,2026-08-28:R2-10120/0b1c2d3e-4f50-4a6b-8c7d-9e0f1a2b3c4d","errors":[{"pointer":"#/accountDetails/clabe","detail":"This field is required."}],"required":["\u003cstring>"],"missing":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e2afb556-03f4-4063-920b-822ee6d2cce7":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"API key sent in the Authorization header, with no `Bearer` prefix.","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"58ef8c25-fe99-4a3a-b3d6-63ae68d90d12":{"url":"https://api.sand.etherfuse.com","description":"Sandbox"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"Authorization","description":"API key sent in the Authorization header, with no `Bearer` prefix.","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"Authorization","type":"string","description":"API key sent in the Authorization header, with no `Bearer` prefix.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi-v2.json"},"subdomain":"etherfuse","siteName":"Etherfuse API","title":"Create quote - Etherfuse API","navMaps":{"firstHrefInVersion":{"v2 (beta)":{"href":"/v2/api-reference/quotes/create-quote","matchLevel":0},"v1 (legacy)":{"href":"/introduction","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T18:20:50.515Z","originalFileLocation":"v2/api-reference/quotes/create-quote.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key\u0026#x27;s organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote\u0026#x27;s quoteId to POST /organization/{organizationId}/order with the same organizationId before expiresAt; a quote is valid for 2 minutes. One side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported. Rails. Each side moves on one rail. Omit sourceRail or destinationRail and we use the account\u0026#x27;s default rail for that direction (the rail with isDefault: true in the account\u0026#x27;s rails). When two of an account\u0026#x27;s rails tie, name the rail. The account\u0026#x27;s status for that direction on that rail must be ready, or the quote fails with 409 payment-account-not-ready. Assets. Send an asset from GET /supported_assets: a currency code such as MXN for a fiat side, a token\u0026#x27;s asset for a crypto side. Filter that list by paymentAccountId to see what each account can use. For a cross-chain transfer, send the token\u0026#x27;s asset on each chain, and pick a destination chain from the source token\u0026#x27;s bridgeDestinations. Approval. The organization must be approved, or the quote fails with 409 organization-not-approved.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Etherfuse API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/etherfuse/2PYR-_ECBzhTGa_z/_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/etherfuse/2PYR-_ECBzhTGa_z/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/etherfuse/2PYR-_ECBzhTGa_z/_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/etherfuse/2PYR-_ECBzhTGa_z/_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/etherfuse/2PYR-_ECBzhTGa_z/_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/etherfuse/2PYR-_ECBzhTGa_z/_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/etherfuse/2PYR-_ECBzhTGa_z/_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/etherfuse/2PYR-_ECBzhTGa_z/_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/etherfuse/2PYR-_ECBzhTGa_z/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create quote - Etherfuse API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key\u0026#x27;s organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote\u0026#x27;s quoteId to POST /organization/{organizationId}/order with the same organizationId before expiresAt; a quote is valid for 2 minutes. One side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported. Rails. Each side moves on one rail. Omit sourceRail or destinationRail and we use the account\u0026#x27;s default rail for that direction (the rail with isDefault: true in the account\u0026#x27;s rails). When two of an account\u0026#x27;s rails tie, name the rail. The account\u0026#x27;s status for that direction on that rail must be ready, or the quote fails with 409 payment-account-not-ready. Assets. Send an asset from GET /supported_assets: a currency code such as MXN for a fiat side, a token\u0026#x27;s asset for a crypto side. Filter that list by paymentAccountId to see what each account can use. For a cross-chain transfer, send the token\u0026#x27;s asset on each chain, and pick a destination chain from the source token\u0026#x27;s bridgeDestinations. Approval. The organization must be approved, or the quote fails with 409 organization-not-approved.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Etherfuse API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://etherfuse.mintlify.app/_mintlify/api/og/v2?division=Quotes\u0026amp;title=Create+quote\u0026amp;description=Prices+a+transfer+from+one+payment+account+to+another.+Each+account+must+belong+to+the+organization+in+the+route+or+to+your+API+key%27s+organization.+The+quote+an\u0026amp;theme=a63046a1b6875a84019a21bc\u0026amp;signature=f96e71893d4cdf5b5b5037f1c1c4d77ff1cb81fda7989477ec87016a6cfb31ff\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create quote - Etherfuse API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key\u0026#x27;s organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote\u0026#x27;s quoteId to POST /organization/{organizationId}/order with the same organizationId before expiresAt; a quote is valid for 2 minutes. One side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported. Rails. Each side moves on one rail. Omit sourceRail or destinationRail and we use the account\u0026#x27;s default rail for that direction (the rail with isDefault: true in the account\u0026#x27;s rails). When two of an account\u0026#x27;s rails tie, name the rail. The account\u0026#x27;s status for that direction on that rail must be ready, or the quote fails with 409 payment-account-not-ready. Assets. Send an asset from GET /supported_assets: a currency code such as MXN for a fiat side, a token\u0026#x27;s asset for a crypto side. Filter that list by paymentAccountId to see what each account can use. For a cross-chain transfer, send the token\u0026#x27;s asset on each chain, and pick a destination chain from the source token\u0026#x27;s bridgeDestinations. Approval. The organization must be approved, or the quote fails with 409 organization-not-approved.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://etherfuse.mintlify.app/_mintlify/api/og/v2?division=Quotes\u0026amp;title=Create+quote\u0026amp;description=Prices+a+transfer+from+one+payment+account+to+another.+Each+account+must+belong+to+the+organization+in+the+route+or+to+your+API+key%27s+organization.+The+quote+an\u0026amp;theme=a63046a1b6875a84019a21bc\u0026amp;signature=f96e71893d4cdf5b5b5037f1c1c4d77ff1cb81fda7989477ec87016a6cfb31ff\">\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/etherfuse/2PYR-_ECBzhTGa_z/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Etherfuse API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#141414\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v2/api-reference/quotes/create-quote.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.etherfuse.com/#organization\",\"name\":\"Etherfuse API\",\"url\":\"https://docs.etherfuse.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/etherfuse/XRSchVFGUgreQatD/img/logo-black.svg?fit=max\u0026auto=format\u0026n=XRSchVFGUgreQatD\u0026q=85\u0026s=92cf84eca27df4a19f7b032da398d110\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.etherfuse.com#website\",\"name\":\"Etherfuse API\",\"url\":\"https://docs.etherfuse.com\",\"publisher\":{\"@id\":\"https://docs.etherfuse.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote#webpage\",\"url\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote\",\"name\":\"Create quote\",\"description\":\"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key's organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote's quoteId to POST /organization/{organizationId}/order with the same organizationId before expiresAt; a quote is valid for 2 minutes. One side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported. Rails. Each side moves on one rail. Omit sourceRail or destinationRail and we use the account's default rail for that direction (the rail with isDefault: true in the account's rails). When two of an account's rails tie, name the rail. The account's status for that direction on that rail must be ready, or the quote fails with 409 payment-account-not-ready. Assets. Send an asset from GET /supported_assets: a currency code such as MXN for a fiat side, a token's asset for a crypto side. Filter that list by paymentAccountId to see what each account can use. For a cross-chain transfer, send the token's asset on each chain, and pick a destination chain from the source token's bridgeDestinations. Approval. The organization must be approved, or the quote fails with 409 organization-not-approved.\",\"dateModified\":\"2026-10-27T18:20:50.515Z\",\"isPartOf\":{\"@id\":\"https://docs.etherfuse.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Etherfuse API\",\"item\":\"https://docs.etherfuse.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create quote\",\"item\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote#apireference\",\"headline\":\"Create quote\",\"name\":\"Create quote\",\"description\":\"Prices a transfer from one payment account to another. Each account must belong to the organization in the route or to your API key's organization. The quote and its order belong to the organization in the route, even when an account belongs to your organization, so quote under the organization you want the order reported under. Pass the quote's quoteId to POST /organization/{organizationId}/order with the same organizationId before expiresAt; a quote is valid for 2 minutes. One side must be a wallet. Supported shapes: fiat to crypto (onramp), crypto to fiat (offramp), a same-chain swap between two wallets, and a cross-chain transfer of the same token between wallets on two supported chains. Fiat to fiat is not supported. Rails. Each side moves on one rail. Omit sourceRail or destinationRail and we use the account's default rail for that direction (the rail with isDefault: true in the account's rails). When two of an account's rails tie, name the rail. The account's status for that direction on that rail must be ready, or the quote fails with 409 payment-account-not-ready. Assets. Send an asset from GET /supported_assets: a currency code such as MXN for a fiat side, a token's asset for a crypto side. Filter that list by paymentAccountId to see what each account can use. For a cross-chain transfer, send the token's asset on each chain, and pick a destination chain from the source token's bridgeDestinations. Approval. The organization must be approved, or the quote fails with 409 organization-not-approved.\",\"url\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote\",\"mainEntityOfPage\":{\"@id\":\"https://docs.etherfuse.com/v2/api-reference/quotes/create-quote#webpage\"},\"dateModified\":\"2026-10-27T18:20:50.515Z\",\"publisher\":{\"@id\":\"https://docs.etherfuse.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.etherfuse.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Etherfuse API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Etherfuse API","nav":{"global":null,"versions":[{"version":"v2 (beta)","default":true,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/v2"}]},{"tab":"API Reference","pages":[{"title":"Introduction","href":"/v2/api-reference/introduction"},{"title":"API Authentication","href":"/v2/authentication"},{"title":"Errors","href":"/v2/errors"},{"title":"Pagination","href":"/v2/pagination"},{"title":"Idempotency","href":"/v2/idempotency"},{"group":"User Authentication","icon":"key","pages":[{"openapi":"openapi-v2.json POST /auth/launch","title":"Launch a user into the app","href":"/v2/api-reference/authentication/launch-a-user-into-the-app"},{"openapi":"openapi-v2.json GET /auth/launch","title":"Launch a user via postMessage","href":"/v2/api-reference/authentication/launch-a-user-via-postmessage"},{"title":"Exchange a partner JWT","openapi":"openapi-v2.json POST /auth/token","href":"/v2/api-reference/authentication/exchange-a-partner-jwt"}]},{"group":"Payment Accounts","icon":"building-columns","pages":[{"title":"Register payment account","openapi":"openapi-v2.json POST /organization/{organizationId}/payment_account","href":"/v2/api-reference/payment-accounts/register-payment-account"},{"title":"Get registration requirements","openapi":"openapi-v2.json GET /organization/{organizationId}/payment_account/requirements","href":"/v2/api-reference/payment-accounts/get-registration-requirements"},{"title":"Get payment account","openapi":"openapi-v2.json GET /organization/{organizationId}/payment_account/{id}","href":"/v2/api-reference/payment-accounts/get-payment-account"},{"title":"Update payment account","openapi":"openapi-v2.json PATCH /organization/{organizationId}/payment_account/{id}","href":"/v2/api-reference/payment-accounts/update-payment-account"},{"title":"List payment accounts","openapi":"openapi-v2.json GET /organization/{organizationId}/payment_accounts","description":"Lists the organization's payment accounts, oldest first. Accounts the organization removed are not listed.","href":"/v2/api-reference/payment-accounts/list-payment-accounts"}]},{"group":"Quotes","icon":"tag","pages":[{"title":"Create quote","openapi":"openapi-v2.json POST /organization/{organizationId}/quote","href":"/v2/api-reference/quotes/create-quote"}]},{"group":"Orders","icon":"receipt","pages":[{"title":"Create order","openapi":"openapi-v2.json POST /organization/{organizationId}/order","description":"Creates an order from a quote and returns the full order. Use the `organizationId` the quote was created with. The order belongs to that organization, even when a payment account on it belongs to your API key's organization. The order's `organizationId`, `GET /orders` filtered by `organizationId`, and reporting all show it under that organization, so quote and order under the organization you want it reported under. The order's `id` is the `quoteId`.\n\nOne quote makes one order. Sending the same `quoteId` again returns the existing order with `200`, even after the quote has expired, so a retry never creates a second order. If two requests with the same `quoteId` arrive at the same time, one gets `201` and the other gets `409` `conflict`; read the order to get it.\n\n**One waiting order per amount.** On SPEI, a deposit is matched to an order by the account and the amount. If another order on the same source account is already waiting for the same amount, the request fails with `409` `pending-order-same-amount`. Fund or cancel that order, or quote a different amount.\n\nOn `spei` and `pix`, `fundingInstructions.reference` is set when the order is created. An order funded on a chain has no `reference`. `fundingInstructions.destination` is absent until the funding details are available. Subscribe to `orderUpdated` to receive the order when they arrive, or read the order again.","href":"/v2/api-reference/orders/create-order"},{"title":"Get order","openapi":"openapi-v2.json GET /organization/{organizationId}/order/{id}","href":"/v2/api-reference/orders/get-order"},{"title":"List orders","openapi":"openapi-v2.json GET /orders","href":"/v2/api-reference/orders/list-orders"},{"title":"Cancel order","openapi":"openapi-v2.json POST /organization/{organizationId}/order/{id}/cancel","href":"/v2/api-reference/orders/cancel-order"},{"title":"Refresh funding instructions","openapi":"openapi-v2.json POST /organization/{organizationId}/order/{id}/funding_instructions/refresh","href":"/v2/api-reference/orders/refresh-funding-instructions"},{"title":"Prepare claim","openapi":"openapi-v2.json POST /organization/{organizationId}/order/{id}/claim","href":"/v2/api-reference/orders/prepare-claim"},{"title":"Submit authorization","openapi":"openapi-v2.json POST /organization/{organizationId}/order/{id}/authorization","href":"/v2/api-reference/orders/submit-authorization"}]},{"group":"Webhook Subscriptions","icon":"bell","pages":[{"title":"Create webhook subscription","openapi":"openapi-v2.json POST /webhook_subscription","href":"/v2/api-reference/webhook-subscriptions/create-webhook-subscription"},{"title":"Get webhook subscription","openapi":"openapi-v2.json GET /webhook_subscription/{id}","href":"/v2/api-reference/webhook-subscriptions/get-webhook-subscription"},{"title":"Delete webhook subscription","openapi":"openapi-v2.json DELETE /webhook_subscription/{id}","href":"/v2/api-reference/webhook-subscriptions/delete-webhook-subscription"},{"title":"List webhook subscriptions","openapi":"openapi-v2.json GET /webhook_subscriptions","href":"/v2/api-reference/webhook-subscriptions/list-webhook-subscriptions"}]},{"group":"Webhook Events","icon":"tower-broadcast","pages":[{"title":"orderUpdated","openapi":"openapi-v2.json webhook orderUpdated","href":"/v2/api-reference/webhook-events/orderupdated"},{"title":"paymentAccountUpdated","openapi":"openapi-v2.json webhook paymentAccountUpdated","href":"/v2/api-reference/webhook-events/paymentaccountupdated"},{"title":"kycUpdated","openapi":"openapi-v2.json webhook kycUpdated","href":"/v2/api-reference/webhooks/kycupdated"},{"title":"kybUpdated","openapi":"openapi-v2.json webhook kybUpdated","href":"/v2/api-reference/webhook-events/kybupdated"}]},{"group":"Organizations","icon":"building","pages":[{"title":"Get your organization","openapi":"openapi-v2.json GET /me","href":"/v2/api-reference/organizations/get-me"},{"title":"Set your default partner fee","openapi":"openapi-v2.json PATCH /me","href":"/v2/api-reference/organizations/update-me"},{"title":"List customer organizations","openapi":"openapi-v2.json GET /organizations","href":"/v2/api-reference/organizations/list-organizations"},{"title":"Create customer organization","openapi":"openapi-v2.json POST /organization","href":"/v2/api-reference/organizations/create-organization"},{"title":"Get organization","openapi":"openapi-v2.json GET /organization/{organizationId}","href":"/v2/api-reference/organizations/get-organization"},{"title":"Rename organization","openapi":"openapi-v2.json PATCH /organization/{organizationId}","href":"/v2/api-reference/organizations/update-organization"}]},{"group":"Members","icon":"users","pages":[{"title":"Add organization member","openapi":"openapi-v2.json POST /organization/{organizationId}/member","href":"/v2/api-reference/members/add-organization-member"},{"title":"List organization members","openapi":"openapi-v2.json GET /organization/{organizationId}/members","href":"/v2/api-reference/members/list-organization-members"},{"title":"Remove organization member","openapi":"openapi-v2.json DELETE /organization/{organizationId}/member/{memberId}","href":"/v2/api-reference/members/remove-organization-member"},{"title":"Revoke organization invite","openapi":"openapi-v2.json DELETE /organization/{organizationId}/member_invite/{email}","href":"/v2/api-reference/members/revoke-organization-invite"},{"title":"List a member's organizations","openapi":"openapi-v2.json GET /member/{memberId}/organizations","href":"/v2/api-reference/members/list-member-organizations"}]},{"group":"KYC","icon":"id-card","pages":[{"title":"Get KYC status","openapi":"openapi-v2.json GET /organization/{organizationId}/kyc","href":"/v2/api-reference/kyc/get-kyc-status"},{"title":"Submit verification data","openapi":"openapi-v2.json POST /organization/{organizationId}/verification","href":"/v2/api-reference/kyc/submit-verification-data"},{"title":"Upload verification documents","openapi":"openapi-v2.json POST /organization/{organizationId}/verification/documents","href":"/v2/api-reference/kyc/upload-verification-documents"},{"title":"Submit a verification questionnaire","openapi":"openapi-v2.json POST /organization/{organizationId}/verification/questionnaire","href":"/v2/api-reference/kyc/submit-a-verification-questionnaire"},{"title":"Import a verified session","openapi":"openapi-v2.json POST /organization/{organizationId}/verification/import","href":"/v2/api-reference/kyc/import-a-verified-session"},{"title":"List occupation categories","openapi":"openapi-v2.json GET /verification/occupations","href":"/v2/api-reference/kyc/list-occupation-categories"}]},{"group":"KYB","icon":"briefcase","pages":[{"title":"Get KYB status","openapi":"openapi-v2.json GET /organization/{organizationId}/kyb","href":"/v2/api-reference/kyb/get-kyb-status"}]},{"group":"Assets","icon":"coins","pages":[{"title":"List supported assets","openapi":"openapi-v2.json GET /supported_assets","href":"/v2/api-reference/assets/list-supported-assets"},{"title":"Get payment account balances","openapi":"openapi-v2.json GET /organization/{organizationId}/payment_account/{id}/balances","href":"/v2/api-reference/assets/get-payment-account-balances"}]},{"group":"Statements","icon":"file-invoice-dollar","pages":[{"title":"List partner statements","openapi":"openapi-v2.json GET /partner_statements","href":"/v2/api-reference/statements/list-partner-statements"},{"title":"Download statement CSV","openapi":"openapi-v2.json GET /partner_statement/{year}-{month}/csv","href":"/v2/api-reference/statements/download-statement-csv"},{"title":"Download statement PDF","openapi":"openapi-v2.json GET /partner_statement/{year}-{month}/pdf","href":"/v2/api-reference/statements/download-statement-pdf"}]},{"group":"Sandbox","icon":"flask","pages":[{"title":"Simulate fiat received","openapi":"openapi-v2.json POST /organization/{organizationId}/order/{id}/fiat_received","href":"/v2/api-reference/sandbox/simulate-fiat-received"}]},{"group":"Lookup API","icon":"magnifying-glass","pages":[{"title":"List exchange rates","openapi":"openapi-v2.json GET /lookup/exchange_rate","href":"/v2/api-reference/lookup/list-exchange-rates"},{"title":"Get exchange rate","openapi":"openapi-v2.json GET /lookup/exchange_rate/usd_to_{currency}","href":"/v2/api-reference/lookup/get-exchange-rate"},{"title":"List stablebonds","openapi":"openapi-v2.json GET /lookup/stablebonds","href":"/v2/api-reference/lookup/list-stablebonds"},{"title":"Get stablebond","openapi":"openapi-v2.json GET /lookup/stablebond/{identifier}","href":"/v2/api-reference/lookup/get-stablebond"},{"title":"List token costs","openapi":"openapi-v2.json GET /lookup/tokens/cost","href":"/v2/api-reference/lookup/list-token-costs"},{"title":"Get token cost","openapi":"openapi-v2.json GET /lookup/tokens/cost/{identifier}","href":"/v2/api-reference/lookup/get-token-cost"},{"title":"List country codes","openapi":"openapi-v2.json GET /lookup/country-codes","href":"/v2/api-reference/lookup/list-country-codes"},{"title":"List restricted countries","openapi":"openapi-v2.json GET /lookup/restricted-countries","href":"/v2/api-reference/lookup/list-restricted-countries"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},{"version":"v1 (legacy)","pages":[{"title":"v1 (legacy)","href":"/introduction"}]}]},"basePath":"","title":"Create quote - Etherfuse API","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}