Return a handle immediately (false, default) or hold the connection for collected quotes (true).
Body
application/json
Request body for opening a quote-request batch. Structurally the existing PaymentRequest
with sender_auth omitted (the spend authorization is deferred to the award call); see
schemas/declarations/PaymentRequest/v1/schema.json.
Semver-shaped declaration version (MAJOR.MINOR), locked to major 1 for v1. Producers emit
the canonical value exported by the bindings' Version constant.
Client-supplied idempotency key for this quote-request. The same request_id from the
same originator returns the same quote_request_id. Independent of the award-call request_id.
Array of destination assets for the settlement agent to choose from (at least one required, at most 16).
The ceiling bounds the fan-out one request can buy: every consumer iterates this list.
Required. End of the collection window. After this point no new quotes are accepted.
The gateway injects no default and never mutates the originator-supplied body, so the
value is carried through verbatim to the award call. It must be supplied and must be in
the future. Must be strictly earlier than fulfillment_deadline.
Keep this window short. A settler holds its quoted price for a limited period of its
own choosing, and the gateway selects only once the window has closed, so a deadline
set beyond that hold leaves no quote still awardable and the request is declined with
QUOTE_WINDOW_TOO_LONG. That hold is set by each settler and is not part of this
contract, so treat 60 seconds as a practical upper bound and prefer a shorter window
where your integration allows.
Required. The time by which the payout to the recipient must be mined on the
destination chain. If no payout is mined by then, your escrowed funds are refunded.
The payout does not have to be final by then: completed
follows once the destination chain judges it final. The gateway injects no default and
never mutates the originator-supplied body, so the value is carried through verbatim to
the award call. It must be supplied and must be in the future. Must be strictly later
than quote_deadline.
The verification service that confirms the payment was delivered before the escrow
releases the source funds, and the account it signs with. Required on every chain:
the gateway's /v1/defaults response supplies it for each chain.
Escrow contract on the source chain that holds the source funds until proof of
fulfillment has been verified. Required on every chain: the gateway's /v1/defaults
response supplies it for each chain (escrow_contract).
Optional cap on what the originator is willing to spend from source (smallest unit).
Quotes with source_amount above this are filtered. No cap applied if omitted.
Optional identity verification using cryptographic credentials.
DEPRECATED. Credentials are moving to a holder-signed W3C VerifiablePresentation that
travels alongside a request rather than inside it. That envelope is not part of this
HTTP contract, so there is nothing here to move them to yet: treat this as a legacy
carrier, and do not build a new integration on it.
Optional settler filtering. If whitelist is present, only whitelisted settlers may win.
If blacklist is present, blacklisted settlers are excluded. Both can be specified;
blacklist takes precedence (a settler in both is rejected).
Optional JSON-LD context URLs — present when the originator wraps the request in a W3C
Data Integrity envelope so a downstream verifier can recover the signer identity.
W3C Data Integrity proof conforming to the Data Integrity 1.0 specification. Which of jws or proofValue is required depends on the cryptosuite named in type, and that pairing is checked where the proof is verified rather than by this schema, so a document can satisfy the schema and still be refused at verification.
Optional document-level W3C Verifiable Credentials (e.g. KnownToAtum about the request producer).
Show child attributes
Response
Quote-request resolved synchronously. status is ready when quotes were collected,
or collecting when the sync wait cap fired before the quote deadline.
Synchronous response to POST /v1/payments/quote-requests. Self-contained — the corridor
fields are echoed at the response root so a drop-recovery client can build the award call
without retaining the original request body.
The corridor echoed here describes the batch you actually receive. On an idempotent
replay that is the ORIGINAL batch's corridor and window, which may differ from what you
just sent in the ways a retry is allowed to differ (the deadlines, and address casing).
ready — collection complete; quotes populated. If no settler bid, this is still
ready with an empty quotes array (a successful "no quotes available" result —
distinct from expired, which only applies to collected quotes that later lapse).
collecting — the sync wait cap fired before the quote deadline; poll the status endpoint for quotes.
The awarded and expired lifecycle states are observed only via the status endpoint, not here.
Whether this response describes a batch that already existed, rather than one opened
by this request. true means the request_id had been used before and you are being
handed the ORIGINAL batch — no second batch was opened and no second broadcast went
out to settlement agents.
Re-attempting a quote-request. Re-submit the same request and you get the same
batch back. You may re-send the original bytes unchanged: quote_deadline bounds the
collection window and is short, so it will usually have expired by the time you
retry, and an expired deadline on a re-submission is not an error — the request is
resolved onto the batch that already exists rather than used to open one.
Re-signing with fresh deadlines is equally fine and returns the same batch.
The window is NOT extended either way: it belongs to the batch, and quote_deadline
in this response is the batch's own. Read status to see whether collection is
still running.
What you must not change under one request_id is the corridor's economics —
accounts, assets, or amounts — which are rejected with 409
IDEMPOTENCY_TERMS_MISMATCH rather than resolved onto the first batch. A genuinely
different corridor needs a new request_id.
Present on every response, false for a newly opened batch. A response without the
field is from a gateway predating it, not a newly opened batch.
How many agents the request was broadcast to, so silence is distinguishable from a
decline without a second call. Same meaning and same absence rule as on the status
endpoint: absent means unknown, never zero.
Why the request drew few or no quotes, carried here so that a ready response with an
empty quotes array explains itself rather than requiring a follow-up read.
Same counting rules as the status endpoint: every declining agent counted exactly once
under its most recent reason, empty when nobody declined, absent when the detail could not
be read. Provisional while status is collecting, because agents are still responding.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Atum Docs","description":"Documentation for Atum, an open payments network for tokenized-currency payments. You submit a signed payment request; Atum selects a settlement operator's price quote, the operator delivers on the destination rail, and Atum verifies delivery.","colors":{"primary":"#24450d","light":"#b3e78d","dark":"#7fcb49"},"logo":{"light":"https://mintcdn.com/atumlabs/eBwMdhd0uJ6cwbY0/images/assets/wordmark-light.svg?fit=max\u0026auto=format\u0026n=eBwMdhd0uJ6cwbY0\u0026q=85\u0026s=6ba7458a7e4528e698e48cbf8e15c375","dark":"https://mintcdn.com/atumlabs/eBwMdhd0uJ6cwbY0/images/assets/wordmark-dark.svg?fit=max\u0026auto=format\u0026n=eBwMdhd0uJ6cwbY0\u0026q=85\u0026s=023ac107f39c390813f415746157f405"},"favicon":"https://mintcdn.com/atumlabs/eBwMdhd0uJ6cwbY0/favicon.svg?fit=max\u0026auto=format\u0026n=eBwMdhd0uJ6cwbY0\u0026q=85\u0026s=0d5cc391c59a2f5739384e8520536a1a","api":{"playground":{"display":"simple"}},"appearance":{"default":"dark"},"background":{"color":{"light":"#f1f0e9","dark":"#171d15"}},"navbar":{"primary":{"type":"button","label":"Community chat","href":"https://discord.gg/a5mbNjnDNj"}},"footer":{"socials":{"discord":"https://discord.gg/a5mbNjnDNj"},"links":[{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://atum.xyz/privacy-policy"}]}]},"fonts":{"heading":{"family":"Newsreader"},"body":{"family":"Public Sans"}},"styling":{"codeblocks":{"theme":"github-dark"},"latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"variables":{"paymentGatewayTestnet":"https://payment-gw.production-testnet.atum.xyz","paymentGatewayMainnet":"https://payment-gw.production-mainnet.atum.xyz","x402FacilitatorTestnet":"https://payment-gw.production-testnet.atum.xyz/x402/v1","x402FacilitatorMainnet":"https://payment-gw.production-mainnet.atum.xyz/x402/v1","veriFillTestnet":"https://veri-fill.production-testnet.atum.xyz","veriFillMainnet":"https://veri-fill.production-mainnet.atum.xyz"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"atumlabs","hasAudioNarration":false,"actualSubdomain":"atumlabs","customDomains":["docs.atum.xyz"],"gitSource":{"type":"github","owner":"atum-labs","repo":"atum-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae8b017ca78e468455a2e68","collectionId":"f90bb902-a0bb-4b51-a5f6-05f506a97595","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae8b017ca78e468455a2e68"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aed33e649d4102da1fae20b","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"Get started","count":35},{"language":"default","tag":"Overview","count":24},{"language":"default","tag":"Settle payments","count":21},{"language":"default","tag":"API Reference","count":17},{"language":"default","tag":"Core concepts","count":15},{"language":"default","tag":"Start building","count":14},{"language":"default","tag":"Payment protocols","count":13},{"language":"default","tag":"Payment Gateway","count":8},{"language":"default","tag":"Settlement Reference","count":6},{"language":"default","tag":"Configuration","count":6}]},"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":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@import url(\"https://fonts.googleapis.com/css2?family=Host+Grotesk:wght@300..800\u0026display=swap\");@import url(\"https://use.typekit.net/xnt1dnq.css\");:root{--color-dark-charcoal: #2b2a28;--color-tofu: #f1f0e9;--color-tofu-light: #f1efe7;--color-young-green: #97e162;--color-young-green-deep: #7fcb49;--color-green-house: #24450d;--color-dark-teal: #2f6460;--color-pale-green: #f0fbe8;--color-full-white: #ffffff;--color-dark-charcoal-12: rgb(43 42 40 / 12%);--color-dark-charcoal-40: rgb(43 42 40 / 40%);--color-dark-charcoal-65: rgb(43 42 40 / 65%);--ink: #171d15;--ink-2: #1e261c;--ink-line: #2c342b;--ink-muted: #9aa396;--ink-dim: #6b7266;--ink-green: #b3e78d;--ink-fg: #f7f6f2;--font-display: \"hardcover-vf\", \"Newsreader\", \"Iowan Old Style\", Georgia, serif;--font-ui: \"Host Grotesk\", \"host-grotesk\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif;--font-prose: \"Public Sans\", \"public-sans\", var(--font-ui);--font-mono: ui-monospace, \"SF Mono\", SFMono-Regular, Menlo, Consolas, monospace;--ring: 0 0 0 3px rgb(151 225 98 / 45%);--radius-field: 6px;--fg: var(--color-dark-charcoal);--fg-2: #3a3936;--fg-3: #605f5b;--fg-muted: #83827c;--fg-dim: #b0afa8;--bg: var(--color-tofu);--bg-nav: var(--color-tofu);--hairline: var(--color-dark-charcoal-12);--surface: var(--color-full-white);--surface-line: var(--color-dark-charcoal-12);--label-fg: var(--color-dark-charcoal-65);--link-fg: var(--color-dark-teal);--link-hover: var(--color-green-house);--accent-text: var(--color-green-house);--inline-code-bg: var(--color-full-white);--ok-fg: var(--color-green-house);--ok-bg: var(--color-pale-green);--ok-line: rgb(36 69 13 / 22%);--info-fg: var(--color-dark-teal);--info-bg: #e9f0ef;--info-line: rgb(47 100 96 / 25%);--warn-fg: #7a4e00;--warn-bg: #fbf3e0;--warn-line: rgb(122 78 0 / 25%);--err-fg: #9b2c2c;--err-bg: #fbeae7;--err-line: rgb(155 44 44 / 25%);--muted-fg: var(--color-dark-charcoal-65);--muted-line: var(--color-dark-charcoal-12);--shadow-lg: 0 24px 48px rgb(43 42 40 / 18%)}html.dark{--fg: var(--ink-fg);--fg-2: #e3e4dd;--fg-3: #c9ccc2;--fg-muted: var(--ink-muted);--fg-dim: var(--ink-dim);--bg: var(--ink);--bg-nav: var(--ink-2);--hairline: var(--ink-line);--surface: var(--ink-2);--surface-line: var(--ink-line);--label-fg: var(--ink-muted);--link-fg: var(--ink-green);--link-hover: var(--color-young-green);--accent-text: var(--ink-green);--inline-code-bg: var(--ink-2);--ok-fg: var(--ink-green);--ok-bg: rgb(151 225 98 / 12%);--ok-line: rgb(151 225 98 / 35%);--info-fg: #9fd3ce;--info-bg: rgb(47 100 96 / 25%);--info-line: rgb(47 100 96 / 60%);--warn-fg: #f0c674;--warn-bg: rgb(122 78 0 / 28%);--warn-line: rgb(240 198 116 / 40%);--err-fg: #f3b7b7;--err-bg: rgb(155 44 44 / 30%);--err-line: rgb(243 183 183 / 40%);--muted-fg: var(--ink-muted);--muted-line: var(--ink-line);--shadow-lg: 0 24px 48px rgb(0 0 0 / 45%)}body{-webkit-font-smoothing:antialiased;font-family:var(--font-ui)}::selection{background:var(--color-young-green);color:var(--color-dark-charcoal)}:root{--gray-50: 247 246 242;--gray-100: 241 239 231;--gray-200: 229 228 221;--gray-300: 215 214 207;--gray-400: 176 175 168;--gray-500: 131 130 124;--gray-600: 96 95 91;--gray-700: 58 57 54;--gray-800: 43 42 40;--gray-900: 30 29 27;--gray-950: 21 20 18}html.dark{--gray-50: 247 246 242;--gray-100: 227 228 221;--gray-200: 201 204 194;--gray-300: 181 185 174;--gray-400: 154 163 150;--gray-500: 107 114 102;--gray-600: 76 84 73;--gray-700: 58 67 56;--gray-800: 44 52 43;--gray-900: 30 38 28;--gray-950: 23 29 21}#content,#content .prose,#header .prose{font-family:var(--font-prose);font-weight:400}#content a.link,#header .prose a{color:var(--link-fg);border-bottom:0;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}#content a.link:hover,#header .prose a:hover{color:var(--link-hover)}#page-title,#content h1,#content h2:not([data-component-part]),#content h3:not([data-component-part]){font-family:var(--font-display);font-weight:300;letter-spacing:-0.02em;color:var(--fg)}#content h4,#content h5,#content h6{font-family:var(--font-ui);font-weight:600;letter-spacing:-0.01em;color:var(--fg)}#page-title{font-size:clamp(2rem, 4vw, 2.75rem);line-height:1.08}#page-title::before{content:\"\";display:block;width:28px;height:3px;margin-bottom:16px;background:var(--color-young-green)}#page-title code{font:500 0.68em/1 var(--font-mono);letter-spacing:0;background:transparent;border:0;padding:0;vertical-align:0.06em}#content h2:not([data-component-part]){font-size:1.75rem;margin-top:2.5rem;padding-top:1.25rem;border-top:1px solid var(--hairline)}#content h2#overview:not([data-component-part]){margin-top:0;padding-top:0;border-top:0}#content h3:not([data-component-part]){font-size:1.35rem}#content :is(h2,h3,h4)>div>a>div{background:transparent;box-shadow:none;--tw-ring-color: transparent;color:var(--label-fg)}#content :is(h2,h3,h4)>div>a>div svg{display:none}#content :is(h2,h3,h4)>div>a>div::before{content:\"¶\";font:400 0.9rem/1 var(--font-ui)}#content :is(h2,h3,h4)>div>a:hover>div::before{color:var(--color-young-green-deep)}#header .prose p{font-family:var(--font-prose);font-weight:300;color:var(--fg-3)}.eyebrow{font:600 10.5px/1.3 var(--font-mono);letter-spacing:0.08em;text-transform:uppercase;color:var(--accent-text)!important;height:auto}.sidebar-group-header,#table-of-contents h2 button,#content th{font:600 10.5px/1.3 var(--font-mono)!important;letter-spacing:0.08em;text-transform:uppercase;color:var(--label-fg)!important}#navbar>div:first-child{background:var(--bg-nav)!important;border-bottom:1px solid var(--hairline)!important;backdrop-filter:none}#navbar a:has(img.nav-logo){display:inline-flex;align-items:center;gap:12px;text-decoration:none;white-space:nowrap}#navbar img.nav-logo,#footer img.nav-logo{height:20px!important;width:auto!important;max-width:none}#navbar a:has(img.nav-logo)::after{content:\"Docs\";display:inline-block;font:600 10.5px/1 var(--font-mono);letter-spacing:0.08em;text-transform:uppercase;color:var(--label-fg);border:1px solid var(--surface-line);border-radius:999px;padding:6px 10px;white-space:nowrap}@media (max-width: 50rem){#navbar a:has(img.nav-logo)::after{display:none}}#navbar .nav-tabs-item,#navbar .navbar-link,#navbar a,#navbar button{font-family:var(--font-ui)}#navbar .nav-tabs-item{font-weight:500;text-shadow:none!important}#navbar .nav-tabs-item[class*=\"text-gray-800\"]{color:var(--fg)}#navbar .nav-tabs-item>div[class*=\"bg-primary\"],#navbar .nav-tabs-item>span[class*=\"bg-primary\"]{background:var(--color-young-green)!important}#search-bar-entry,#search-bar-entry-mobile{background:var(--surface)!important;border:1px solid var(--surface-line);border-radius:999px;color:var(--label-fg);box-shadow:none!important;--tw-ring-color: transparent !important;filter:none!important}#search-bar-entry:hover{border-color:var(--color-dark-charcoal-40)}html.dark #search-bar-entry:hover{border-color:var(--ink-dim)}#search-bar-entry kbd{background:transparent;border:1px solid var(--surface-line);font-family:var(--font-mono)}#topbar-cta-button a{font-family:var(--font-ui);font-weight:500;letter-spacing:-0.01em}#topbar-cta-button a>span[class*=\"absolute\"]{background:var(--color-young-green)!important;border-radius:999px!important;opacity:1!important}#topbar-cta-button a:hover>span[class*=\"absolute\"]{background:var(--color-young-green-deep)!important}#topbar-cta-button a span[class*=\"text-white\"],#topbar-cta-button a svg{color:var(--color-dark-charcoal)!important}#sidebar{border-inline-end:1px solid var(--hairline)}.sidebar-group-header{padding-top:0.4rem;padding-bottom:0.4rem}#sidebar-content a,#sidebar-content button{font-family:var(--font-ui);border-radius:0!important}#sidebar-content a{color:var(--fg-3)}#sidebar-content a[aria-current=\"page\"],#sidebar-content a[aria-current=\"page\"]:hover,#sidebar-content a[aria-current=\"page\"]:focus{background:transparent!important;box-shadow:inset 3px 0 0 var(--color-young-green);color:var(--fg)!important;font-weight:500;text-shadow:none!important}#sidebar-content a:hover:not([aria-current=\"page\"]){background:transparent!important;color:var(--fg);box-shadow:inset 3px 0 0 var(--hairline)}#sidebar-content [class*=\"border-l\"],#sidebar-content ul ul{border-color:var(--hairline)}#table-of-contents-layout{border-inline-start:1px solid var(--hairline)}#table-of-contents a{font-family:var(--font-ui);color:var(--fg-3);text-shadow:none!important}#table-of-contents li[data-active]>a{color:var(--fg)!important;font-weight:500}#table-of-contents h2 button svg{color:var(--label-fg)}#page-context-menu>button,#page-context-menu>div>button{background:var(--surface)!important;border-color:var(--surface-line)!important;color:var(--fg);font:500 13px/1.2 var(--font-ui);letter-spacing:-0.01em}#page-context-menu>button:first-child{border-radius:999px 0 0 999px!important}#page-context-menu>:last-child,#page-context-menu>:last-child button{border-radius:0 999px 999px 0!important}#page-context-menu button:hover{border-color:var(--color-young-green-deep)!important}.code-block,.code-block [data-component-part=\"code-block-root\"],.code-block pre.shiki,.code-group{border-radius:0!important;box-shadow:none!important}.code-block{border:1px solid var(--ink-line);background-color:var(--ink)!important;--tw-ring-color: transparent !important}.code-block [data-component-part=\"code-block-root\"],.code-block pre.shiki,.code-block pre.shiki code{background-color:var(--ink)!important;--shiki-dark-bg: var(--ink) !important;color:var(--ink-fg)}.code-block pre.shiki,.code-block pre.shiki code,.code-block .font-mono{font-family:var(--font-mono)!important;font-size:0.85rem;line-height:1.65}.code-block pre.shiki ::selection{background:rgb(151 225 98 / 30%);color:inherit}.code-block [data-component-part=\"code-block-header\"],.code-group>div:first-child{background:var(--ink-2)!important;border-bottom:1px solid var(--ink-line);border-radius:0!important;color:var(--ink-muted);font:500 0.75rem/1.4 var(--font-ui)}.code-group [role=\"tab\"][aria-selected=\"true\"]{color:var(--ink-fg)!important;box-shadow:inset 0 2px 0 var(--color-young-green)}.code-block-copy-button button,.code-block [data-floating-buttons] button{border-radius:999px!important;background:var(--ink-2)!important;border:1px solid var(--ink-line);color:#c9ccc2!important}.code-block [data-floating-buttons] button:hover{border-color:var(--color-young-green-deep)}#ask-assistant-code-block-button{border-radius:999px!important}#content code:not(pre code),#header .prose code{font-family:var(--font-mono);font-size:0.86em;font-weight:500;color:var(--fg)!important;background:var(--inline-code-bg)!important;border:1px solid var(--surface-line);border-radius:4px;padding:0.1em 0.35em}#content code:not(pre code)::before,#content code:not(pre code)::after{content:none}#content .callout{position:relative;display:grid;grid-template-columns:16px minmax(0, 1fr);column-gap:0.55rem;row-gap:0.45rem;align-items:center;margin-block:1.25rem;padding:0.9rem 1.1rem 0.9rem 1.25rem;border:1px solid var(--aside-line)!important;border-inline-start:3px solid var(--aside-rule)!important;border-radius:0!important;background:var(--aside-bg)!important;color:var(--fg)!important;--aside-rule: var(--color-dark-teal);--aside-fg: var(--info-fg);--aside-bg: var(--info-bg);--aside-line: var(--info-line);--aside-glyph: \"i\";--aside-badge-fg: #fff}#content .callout[data-callout-type=\"tip\"],#content .callout[data-callout-type=\"check\"]{--aside-rule: var(--color-young-green-deep);--aside-fg: var(--ok-fg);--aside-bg: var(--ok-bg);--aside-line: var(--ok-line);--aside-glyph: \"✓\";--aside-badge-fg: var(--color-dark-charcoal)}#content .callout[data-callout-type=\"warning\"]{--aside-rule: #d99a2b;--aside-fg: var(--warn-fg);--aside-bg: var(--warn-bg);--aside-line: var(--warn-line);--aside-glyph: \"!\"}#content .callout[data-callout-type=\"danger\"]{--aside-rule: #c94c4c;--aside-fg: var(--err-fg);--aside-bg: var(--err-bg);--aside-line: var(--err-line);--aside-glyph: \"✕\"}#content .callout>[data-component-part=\"callout-icon\"]{grid-column:1;grid-row:1;width:16px;height:16px;margin:0;border-radius:999px;background:var(--aside-rule);color:var(--aside-badge-fg);font:700 10px/16px var(--font-ui);text-align:center}#content .callout>[data-component-part=\"callout-icon\"] svg{display:none}#content .callout>[data-component-part=\"callout-icon\"]::before{content:var(--aside-glyph)}#content .callout::before{content:attr(aria-label);grid-column:2;grid-row:1;font:600 10.5px/1.3 var(--font-mono);letter-spacing:0.08em;text-transform:uppercase;color:var(--aside-fg)}#content .callout>[data-component-part=\"callout-content\"]{grid-column:1 / -1;grid-row:2;color:var(--fg)!important;font-size:0.875rem;line-height:1.6}#content .callout a{color:var(--link-fg)!important;border-color:currentColor}#content .callout a:hover{color:var(--link-hover)!important}#content .callout strong{color:var(--fg)!important}#content .callout code:not(pre code){background:var(--surface)!important}#content .card,.card{position:relative;border-radius:0!important;background:var(--surface)!important;border:1px solid var(--surface-line)!important;box-shadow:none!important;--tw-ring-color: transparent !important;transition:border-color 0.15s}.card::before{content:\"\";position:absolute;top:10px;left:10px;width:5px;height:5px;background:var(--surface-line);z-index:1}.card:hover{border-color:var(--color-young-green-deep)!important}.card h2,.card h3,.card [class*=\"font-semibold\"]{font-family:var(--font-ui);font-weight:600;letter-spacing:-0.01em;color:var(--fg)}.card [data-component-part=\"card-icon\"] svg,.card svg[style*=\"mask\"]{background-color:var(--accent-text)}details.accordion,.accordion-group{border-radius:0!important;border:1px solid var(--surface-line)!important;background:var(--surface)!important;box-shadow:none!important}.accordion-group details.accordion{border:0!important;border-top:1px solid var(--surface-line)!important}.accordion-group details.accordion:first-child{border-top:0!important}details.accordion>summary{font:500 0.875rem/1.4 var(--font-ui);color:var(--fg);background:transparent!important}details.accordion>summary:hover{color:var(--link-hover)}details.accordion>summary [data-component-part=\"accordion-title\"]{font:inherit;color:inherit}details.accordion>summary [data-component-part=\"accordion-caret-right\"]{color:var(--color-young-green-deep)}details.accordion>summary::after{content:\"show\";margin-left:auto;font:600 10.5px/1 var(--font-mono);letter-spacing:0.08em;text-transform:uppercase;color:var(--label-fg)}details.accordion[open]>summary::after{content:\"hide\"}details.accordion[open]>summary{border-bottom:1px solid var(--surface-line)}details.accordion>[data-component-part=\"accordion-content\"]{padding-top:0.9rem}.tabs [role=\"tablist\"]{border-color:var(--hairline)!important}.tabs [data-component-part=\"tab-button\"]{font-family:var(--font-ui);font-weight:500;color:var(--fg-3)}.tabs [data-component-part=\"tab-button\"][data-active=\"true\"]{color:var(--fg)!important;border-color:var(--color-young-green)!important;border-bottom-width:2px}.steps [data-component-part=\"step-indicator\"]{background:var(--surface)!important;border:1px solid var(--surface-line);color:var(--fg)!important;font:600 11px/1 var(--font-mono)}.steps [data-component-part=\"step-line\"]{background:var(--hairline)!important}.steps [data-component-part=\"step-title\"]{font-family:var(--font-ui);font-weight:600;letter-spacing:-0.01em;color:var(--fg)!important}#content table{font-family:var(--font-ui);font-size:0.875rem;border-collapse:collapse}#content th,#content td{border:0;border-bottom:1px solid var(--hairline);padding:0.6rem 1rem 0.6rem 0;vertical-align:top}#content th{white-space:nowrap}#content tr:nth-child(2n){background:transparent}#content tbody tr:hover{background:transparent}.frame,#content img,.expandable,.tile{border-radius:0!important}.frame{background:var(--surface)!important;border:1px solid var(--surface-line)!important;box-shadow:none!important}#pagination{font-family:var(--font-ui);font-weight:500}#pagination [data-component-part=\"pagination-title\"]{color:var(--fg-3)}#pagination a:hover [data-component-part=\"pagination-title\"]{color:var(--fg)!important}.feedback-toolbar button,#feedback-thumbs-up,#feedback-thumbs-down{border-radius:999px!important;border:1px solid var(--surface-line);background:var(--surface);color:var(--fg-3)}.method-pill,.method-nav-pill{font-family:var(--font-mono);letter-spacing:0.04em;border-radius:999px!important}#footer{background:var(--bg-nav);border-top:1px solid var(--hairline)!important;font-family:var(--font-ui);position:relative;z-index:25}#footer .footer-inner>.h-px,#footer .footer-inner>[class*=\"h-[1px]\"]{display:none!important}#footer .footer-inner,footer .footer-inner{max-width:none!important;width:100%;padding-top:1.25rem!important;padding-bottom:1.25rem!important;gap:0!important}#footer .footer-divider,footer .footer-divider{display:none!important}#footer .footer-mintlify,footer .footer-mintlify{display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-end!important;gap:0.75rem!important;flex:0 0 auto!important;width:auto!important;min-width:0!important}#footer .footer-row,footer .footer-row{display:flex!important;flex-direction:row!important;flex-wrap:wrap;align-items:center!important;justify-content:flex-start!important;gap:1rem 1.5rem!important;width:100%}#footer .footer-row>:not(.audited-by),footer .footer-row>:not(.audited-by){flex:0 0 auto!important;min-width:0!important;max-width:none!important;width:auto!important}#footer .footer-row>:nth-child(3),footer .footer-row>:nth-child(3){margin-left:auto}.audited-by{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:0.75rem 1rem;flex:0 0 auto;width:auto;min-width:0;padding:0}.audited-by-label{font:600 10.5px/1.3 var(--font-mono);letter-spacing:0.08em;text-transform:uppercase;color:var(--label-fg);text-decoration:none;box-shadow:none}a.audited-by-label:hover{color:var(--fg);opacity:1}.audited-by a[data-auditor]{display:inline-flex;align-items:center;line-height:0;opacity:0.9;text-decoration:none;box-shadow:none}.audited-by a[data-auditor] button,.audited-by a[data-auditor]+button,.audited-by button{display:none}.audited-by a[data-auditor]:hover{opacity:1}.audited-by-logo{width:auto;max-width:none}.audited-by a[data-auditor=\"cantina\"] .audited-by-logo{height:22px}.audited-by a[data-auditor=\"cyfrin\"] .audited-by-logo{height:28px}.audited-by .logo-dark{display:none}.dark .audited-by .logo-light,[data-theme=\"dark\"] .audited-by .logo-light{display:none}.dark .audited-by .logo-dark,[data-theme=\"dark\"] .audited-by .logo-dark{display:block}.pay-timeline{--p1: 12.5%;--p2: 37.5%;--p3: 62.5%;--p4: 87.5%;--rail: var(--fg-dim);--dot-event: var(--fg);--dot-quote: var(--warn-fg);--dot-delivery: var(--err-fg);--bar-quote: var(--ok-fg);--bar-process: var(--warn-fg);--bar-settle: var(--info-fg);margin:1.25rem 0 1.5rem;padding:1.5rem 1.25rem 1.2rem;background:var(--surface);border:1px solid var(--surface-line);border-radius:16px}.pay-timeline-title{margin:0 0 1.75rem;text-align:center;font-family:var(--font-ui);font-size:1.05rem;font-weight:600;color:var(--fg)}.pay-timeline-stage{position:relative;height:196px}.pay-timeline-label,.pay-timeline-caption{position:absolute;margin:0;transform:translateX(-50%);text-align:center;font-family:var(--font-ui);font-weight:500;line-height:1.25}.pay-timeline-label{top:0;font-size:0.78rem;color:var(--fg-2)}.pay-timeline-label--1{left:var(--p1)}.pay-timeline-label--2{left:var(--p2)}.pay-timeline-label--3{left:var(--p3)}.pay-timeline-label--4{left:var(--p4)}.pay-timeline-guide{position:absolute;top:36px;bottom:52px;width:0;border-left:1px dashed var(--fg-dim)}.pay-timeline-guide--1{left:var(--p1)}.pay-timeline-guide--2{left:var(--p2);border-left-color:var(--dot-quote)}.pay-timeline-guide--3{left:var(--p3);border-left-color:var(--dot-delivery)}.pay-timeline-guide--4{left:var(--p4)}.pay-timeline-rail{position:absolute;top:70px;left:var(--p1);width:calc(var(--p4) - var(--p1));height:3px;background:var(--rail);border-radius:2px}.pay-timeline-dot{position:absolute;top:64px;z-index:2;width:14px;height:14px;border-radius:50%;transform:translateX(-50%);background:var(--dot-event)}.pay-timeline-dot--1{left:var(--p1)}.pay-timeline-dot--2{left:var(--p2);background:var(--dot-quote)}.pay-timeline-dot--3{left:var(--p3);background:var(--dot-delivery)}.pay-timeline-dot--4{left:var(--p4)}.pay-timeline-bar{position:absolute;top:92px;height:14px;border-radius:3px}.pay-timeline-bar--quote{left:var(--p1);width:calc(var(--p2) - var(--p1));background:var(--bar-quote)}.pay-timeline-bar--process{left:var(--p2);width:calc(var(--p3) - var(--p2));background:var(--bar-process)}.pay-timeline-bar--settle{left:var(--p3);width:calc(var(--p4) - var(--p3));background:var(--bar-settle)}.pay-timeline-caption{top:114px;font-size:0.75rem;color:var(--fg-3)}.pay-timeline-caption--quote{left:calc((var(--p1) + var(--p2)) / 2)}.pay-timeline-caption--process{left:calc((var(--p2) + var(--p3)) / 2)}.pay-timeline-caption--settle{left:calc((var(--p3) + var(--p4)) / 2)}.pay-timeline-note{margin:0.5rem 0 0;text-align:left;font-family:var(--font-ui);font-size:0.86rem;line-height:1.45;color:var(--fg-3)}.pay-timeline-note p{margin:0}.pay-timeline-note ul{margin:0.4rem 0 0;padding-left:1.15rem}.pay-timeline-note li{margin:0.35rem 0 0}.pay-timeline-note li:first-child{margin-top:0}.changelog-toc{margin:0.25rem 0 0.5rem 1.75rem;padding-left:0.75rem;border-left:1px solid var(--surface-line);list-style:none}.changelog-toc-date{margin:0.6rem 0 0.2rem;font-family:var(--font-ui);font-size:0.72rem;letter-spacing:0.04em;color:var(--fg-muted)}.changelog-toc-date:first-child{margin-top:0.2rem}.changelog-toc a{display:block;padding:0.2rem 0;font-size:0.82rem;line-height:1.35;color:var(--fg-2)}.changelog-toc a:hover{color:var(--accent-text)}.update-container [data-component-part=\"update-tag\"]{padding:0.1rem 0.55rem;border:1px solid var(--surface-line);border-radius:999px;font-family:var(--font-ui);font-size:0.78rem;white-space:nowrap;color:var(--fg-2);cursor:pointer;transition:border-color 120ms ease, color 120ms ease}.update-container [data-component-part=\"update-tag\"]:hover{border-color:var(--accent-text);color:var(--accent-text)}.update-container [data-component-part=\"update-tag\"][aria-pressed=\"true\"]{border-color:rgb(var(--primary));background:rgb(var(--primary));color:rgb(255 255 255 / 0.9)}.update-container [data-component-part=\"update-tag\"]:focus-visible{outline:none;box-shadow:var(--ring)}@media (min-width: 1280px){[class*=\"max-w-8xl\"]{max-width:1600px!important}body:has(#table-of-contents,#changelog-filters) #content-area{width:calc(100% - 20rem)!important;max-width:none!important}}#header :is(h1,p),#content :is(p,ul,ol,blockquote,h1,h2,h3,h4,h5,h6):not(td *,th *,li *){max-width:38em}@media (min-width: 1024px){.update-container>div:first-child{width:150px!important}}.update-container .prose-sm{font-size:1rem;line-height:1.75}"}],"page":{"pagePath":"api-reference/payment-gateway/create-quote-request","slug":"/api-reference/payment-gateway/create-quote-request","pageMetadata":{"title":"Create a quote-request","description":"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.","openapi":"POST /v1/payments/quote-requests","href":"/api-reference/payment-gateway/create-quote-request"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.\"\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":{"codeStyling":{"theme":"github-dark"},"config":{},"pageMetadata":{"title":"Create a quote-request","description":"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.","openapi":"POST /v1/payments/quote-requests","href":"/api-reference/payment-gateway/create-quote-request"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/atumlabs/ea8598561a186193/audited-by.js","/_mintlify/custom/atumlabs/946086a3f73c7db3/webmcp.js","/_mintlify/custom/atumlabs/28a7e63cae1e14fd/changelog-tags.js","/_mintlify/custom/atumlabs/f97675e153f577c9/changelog-toc.js"],"openApiReferenceData":{"operation":{"summary":"Create a quote-request batch","description":"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.","operationId":"createQuoteRequest","tags":["Quote Requests"],"parameters":["1123a897-0f66-4dc6-9d1c-222a563f94c3"],"requestBody":"82243ea6-2db6-4171-8a99-c75814079f3c","responses":{"200":"4d0fb9d2-9ddc-4b14-b88d-e284e6b346fd","202":"f05bec6a-f904-4111-909a-7619cc14b39c","400":"cc449e97-dc87-46b3-96f4-6cef4c779e36","409":"ee362a72-f179-446a-bfe3-69f0ea9da128","500":"588728fa-05ec-43bc-8e14-359dbbddb136","503":"8689a005-8f8b-4dae-9ca7-e5acc76b1700"},"method":"post","type":"path","servers":["33df3309-b84e-48a9-94c1-aac200cf674f","fa558170-4e9e-4663-9e9b-39906523216e"],"security":[],"path":"/v1/payments/quote-requests","baseUrlOptions":["https://payment-gw.production-mainnet.atum.xyz","https://payment-gw.production-testnet.atum.xyz"],"title":"Create a quote-request batch","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"1123a897-0f66-4dc6-9d1c-222a563f94c3":{"name":"wait","in":"query","required":false,"description":"Return a handle immediately (`false`, default) or hold the connection for collected quotes (`true`).","schema":{"type":"boolean","default":false,"isRequired":false,"description":"Return a handle immediately (`false`, default) or hold the connection for collected quotes (`true`).","uniqueKey":"","typeLabel":"boolean"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body for opening a quote-request batch. Structurally the existing PaymentRequest\nwith `sender_auth` omitted (the spend authorization is deferred to the award call); see\nschemas/declarations/PaymentRequest/v1/schema.json.\n","required":["version","request_id","source","destination","fulfillment_amount","quote_deadline","fulfillment_deadline","fulfillment_verifier","escrow_contract_address"],"properties":{"version":{"type":"string","description":"Semver-shaped declaration version (MAJOR.MINOR), locked to major 1 for v1. Producers emit\nthe canonical value exported by the bindings' Version constant.\n","pattern":"^1\\.[0-9]+$","example":"1.0","isRequired":true,"uniqueKey":"version","typeLabel":"string"},"request_id":{"type":"string","description":"Client-supplied idempotency key for this quote-request. The same request_id from the\nsame originator returns the same quote_request_id. Independent of the award-call request_id.\n","example":"qr-2026-04-29-001","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"source":{"type":"object","description":"Represents a cryptocurrency or token in a specific wallet. This tells the system what asset you're sending/receiving and which wallet to use.","required":["asset_identifier","account"],"properties":{"asset_identifier":{"type":"string","description":"A unique identifier for the asset using CAIP-19 format.\nCAIP-19 is a standard way to identify blockchain assets: {chain_id}/{asset_namespace}:{asset_reference}\nExamples:\n- Ethereum USDC: \"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n- Arbitrum USDC: \"eip155:42161/erc20:0xaf88d065e77c8cC2239327C5EDb3A432268e5831\"\n- Solana USDC: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n- Tron USDT: \"tron:mainnet/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\"","pattern":"^[a-z0-9]+:[a-zA-Z0-9_-]+/[a-z0-9-]{3,8}:[-.%a-zA-Z0-9]{1,128}(/[-.%a-zA-Z0-9]{1,78})?$","example":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","isRequired":true,"uniqueKey":"source.asset_identifier","typeLabel":"string"},"account":{"type":"string","description":"The wallet address that owns this asset.\nFormat depends on the blockchain:\n- Ethereum/EVM: 0x-prefixed hex address (42 characters)\n- Solana: Base58 encoded address\n- Tron: T-prefixed Base58 address\n\nA destination account is checked at ingress and must be payable on the chain named by\nits `asset_identifier`: it parses for that chain, carries a valid EIP-55 checksum when\nmixed-case, has no surrounding whitespace, and is not the zero address. A receiver that\nfails any of these is refused with `INVALID_DESTINATION_ACCOUNT`, before any funds move.","minLength":1,"maxLength":128,"example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","isRequired":true,"uniqueKey":"source.account","typeLabel":"string"}},"isRequired":true,"uniqueKey":"source","typeLabel":"object"},"destination":{"type":"array","description":"Array of destination assets for the settlement agent to choose from (at least one required, at most 16).\nThe ceiling bounds the fan-out one request can buy: every consumer iterates this list.\n","minItems":1,"maxItems":16,"items":{"type":"object","description":"Represents a cryptocurrency or token in a specific wallet. This tells the system what asset you're sending/receiving and which wallet to use.","required":["asset_identifier","account"],"properties":{"asset_identifier":{"type":"string","description":"A unique identifier for the asset using CAIP-19 format.\nCAIP-19 is a standard way to identify blockchain assets: {chain_id}/{asset_namespace}:{asset_reference}\nExamples:\n- Ethereum USDC: \"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n- Arbitrum USDC: \"eip155:42161/erc20:0xaf88d065e77c8cC2239327C5EDb3A432268e5831\"\n- Solana USDC: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n- Tron USDT: \"tron:mainnet/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\"","pattern":"^[a-z0-9]+:[a-zA-Z0-9_-]+/[a-z0-9-]{3,8}:[-.%a-zA-Z0-9]{1,128}(/[-.%a-zA-Z0-9]{1,78})?$","example":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","isRequired":true,"uniqueKey":"destination.items.[INDEX].asset_identifier","typeLabel":"string"},"account":{"type":"string","description":"The wallet address that owns this asset.\nFormat depends on the blockchain:\n- Ethereum/EVM: 0x-prefixed hex address (42 characters)\n- Solana: Base58 encoded address\n- Tron: T-prefixed Base58 address\n\nA destination account is checked at ingress and must be payable on the chain named by\nits `asset_identifier`: it parses for that chain, carries a valid EIP-55 checksum when\nmixed-case, has no surrounding whitespace, and is not the zero address. A receiver that\nfails any of these is refused with `INVALID_DESTINATION_ACCOUNT`, before any funds move.","minLength":1,"maxLength":128,"example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","isRequired":true,"uniqueKey":"destination.items.[INDEX].account","typeLabel":"string"}},"uniqueKey":"destination.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"destination","typeLabel":"object[]"},"fulfillment_amount":{"type":"string","description":"The exact amount to be received at the destination (smallest unit, e.g. wei or cents).","example":"100000000","isRequired":true,"uniqueKey":"fulfillment_amount","typeLabel":"string"},"quote_deadline":{"type":"string","format":"date-time","description":"Required. End of the collection window. After this point no new quotes are accepted.\nThe gateway injects no default and never mutates the originator-supplied body, so the\nvalue is carried through verbatim to the award call. It must be supplied and must be in\nthe future. Must be strictly earlier than fulfillment_deadline.\n\nKeep this window short. A settler holds its quoted price for a limited period of its\nown choosing, and the gateway selects only once the window has closed, so a deadline\nset beyond that hold leaves no quote still awardable and the request is declined with\nQUOTE_WINDOW_TOO_LONG. That hold is set by each settler and is not part of this\ncontract, so treat 60 seconds as a practical upper bound and prefer a shorter window\nwhere your integration allows.\n","example":"2026-04-29T12:00:03Z","isRequired":true,"uniqueKey":"quote_deadline","typeLabel":"string\u003cdate-time>"},"fulfillment_deadline":{"type":"string","format":"date-time","description":"Required. The time by which the payout to the recipient must be mined on the\ndestination chain. If no payout is mined by then, your escrowed funds are refunded.\nThe payout does not have to be final by then: `completed`\nfollows once the destination chain judges it final. The gateway injects no default and\nnever mutates the originator-supplied body, so the value is carried through verbatim to\nthe award call. It must be supplied and must be in the future. Must be strictly later\nthan quote_deadline.\n","example":"2026-04-29T12:30:00Z","isRequired":true,"uniqueKey":"fulfillment_deadline","typeLabel":"string\u003cdate-time>"},"fulfillment_verifier":{"type":"object","description":"The verification service that confirms the payment was delivered before the escrow\nreleases the source funds, and the account it signs with. Required on every chain:\nthe gateway's `/v1/defaults` response supplies it for each chain.\n","required":["account","endpoint"],"properties":{"account":{"type":"string","description":"The wallet address or public key of the verification service","example":"0x892BB2e4F6b14a2B5b82Ba8d33E5925D42D4431F","isRequired":true,"uniqueKey":"fulfillment_verifier.account","typeLabel":"string"},"endpoint":{"type":"string","format":"uri","description":"Origin of the fulfillment verifier service, with no path — the caller\nappends the verifier's own API paths. The gateway's `/v1/defaults` response\nsupplies the default fulfillment verifier for each chain.\n","example":"https://veri-fill.production-testnet.atum.xyz","isRequired":true,"uniqueKey":"fulfillment_verifier.endpoint","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"fulfillment_verifier","typeLabel":"object"},"escrow_contract_address":{"type":"string","description":"Escrow contract on the source chain that holds the source funds until proof of\nfulfillment has been verified. Required on every chain: the gateway's `/v1/defaults`\nresponse supplies it for each chain (`escrow_contract`).\n","example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","isRequired":true,"uniqueKey":"escrow_contract_address","typeLabel":"string"},"max_source_amount":{"type":"string","description":"Optional cap on what the originator is willing to spend from source (smallest unit).\nQuotes with source_amount above this are filtered. No cap applied if omitted.\n","example":"101000000","uniqueKey":"max_source_amount","typeLabel":"string"},"settler_auth_required":{"type":"object","description":"Policy requirements for settler authentication. Keys are policy names, values indicate if required.","additionalProperties":{"type":"boolean","uniqueKey":"settler_auth_required.additionalProperties","typeLabel":"boolean"},"uniqueKey":"settler_auth_required","typeLabel":"object"},"originator_auth":{"type":"object","description":"Optional identity verification using cryptographic credentials.\n\nDEPRECATED. Credentials are moving to a holder-signed W3C VerifiablePresentation that\ntravels alongside a request rather than inside it. That envelope is not part of this\nHTTP contract, so there is nothing here to move them to yet: treat this as a legacy\ncarrier, and do not build a new integration on it.","required":["verifiable_credential","verification_method_id","signature"],"properties":{"verifiable_credential":{"type":"object","description":"W3C Verifiable Credential structure conforming to the W3C Verifiable Credentials Data Model v1.1","required":["@context","id","type","issuer","issuanceDate","credentialSubject","proof"],"properties":{"@context":{"type":"array","description":"JSON-LD context array, must include 'https://www.w3.org/2018/credentials/v1'","items":{"type":"string","uniqueKey":"originator_auth.verifiable_credential.@context.items.[INDEX]","typeLabel":"string"},"example":["https://www.w3.org/2018/credentials/v1"],"isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.@context","typeLabel":"string[]"},"id":{"type":"string","description":"Unique identifier for this credential","isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.id","typeLabel":"string"},"type":{"type":"array","description":"Credential types, must include 'VerifiableCredential'","items":{"type":"string","uniqueKey":"originator_auth.verifiable_credential.type.items.[INDEX]","typeLabel":"string"},"example":["VerifiableCredential","KYCVerifiedCredential"],"isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.type","typeLabel":"string[]"},"issuer":{"oneOf":[{"type":"string","description":"DID or issuer object of the credential issuer","isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.issuer.oneOf.0","typeLabel":"string"},{"type":"object","description":"DID or issuer object of the credential issuer","isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.issuer.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.issuer","typeLabel":"string | object"},"issuanceDate":{"type":"string","format":"date-time","description":"When the credential was issued","isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.issuanceDate","typeLabel":"string\u003cdate-time>"},"credentialSubject":{"type":"object","description":"Claims about the credential subject (structure varies by issuer)","additionalProperties":true,"isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.credentialSubject","typeLabel":"object"},"proof":{"type":"object","description":"Cryptographic proof of credential integrity","additionalProperties":true,"isRequired":true,"uniqueKey":"originator_auth.verifiable_credential.proof","typeLabel":"object"},"expirationDate":{"type":"string","format":"date-time","description":"When the credential expires","uniqueKey":"originator_auth.verifiable_credential.expirationDate","typeLabel":"string\u003cdate-time>"},"credentialStatus":{"type":"object","description":"Information for credential revocation checking. Not consulted by the verifier today.","additionalProperties":true,"uniqueKey":"originator_auth.verifiable_credential.credentialStatus","typeLabel":"object"}},"isRequired":true,"uniqueKey":"originator_auth.verifiable_credential","typeLabel":"object"},"verification_method_id":{"type":"string","description":"Reference to verification method from the DID Document","isRequired":true,"uniqueKey":"originator_auth.verification_method_id","typeLabel":"string"},"signature":{"type":"string","description":"Cryptographic signature matching the verification method type","isRequired":true,"uniqueKey":"originator_auth.signature","typeLabel":"string"}},"uniqueKey":"originator_auth","typeLabel":"object"},"quote_selector":{"type":"string","description":"Wallet address or public key of a trusted service that auto-selects the best rate.\nLeave empty to use the default selector.\n","example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","uniqueKey":"quote_selector","typeLabel":"string"},"fulfillment_proxy":{"type":"string","description":"Optional fulfillment-proxy contract address on the destination chain. Leave empty to use the default.","example":"0x892BB2e4F6b14a2B5b82Ba8d33E5925D42D4431F","uniqueKey":"fulfillment_proxy","typeLabel":"string"},"settler_requirements":{"type":"object","description":"Optional settler filtering. If whitelist is present, only whitelisted settlers may win.\nIf blacklist is present, blacklisted settlers are excluded. Both can be specified;\nblacklist takes precedence (a settler in both is rejected).\n","properties":{"whitelist":{"type":"array","description":"Settler DIDs permitted to fulfill this request (W3C DID format). If present, only these may win.","minItems":1,"maxItems":100,"uniqueItems":true,"items":{"type":"string","pattern":"^did:[a-z][a-z0-9]*:[a-zA-Z0-9._:%-]+$","uniqueKey":"settler_requirements.whitelist.items.[INDEX]","typeLabel":"string"},"example":["did:pkh:eip155:1:0x742D35cC6634c0532925a3b844Bc9e7595F41360"],"uniqueKey":"settler_requirements.whitelist","typeLabel":"string[]"},"blacklist":{"type":"array","description":"Settler DIDs excluded from fulfilling this request (W3C DID format).","minItems":1,"maxItems":100,"uniqueItems":true,"items":{"type":"string","pattern":"^did:[a-z][a-z0-9]*:[a-zA-Z0-9._:%-]+$","uniqueKey":"settler_requirements.blacklist.items.[INDEX]","typeLabel":"string"},"example":["did:pkh:eip155:1:0x892bb2E4F6b14a2B5b82bA8D33e5925d42d4432f"],"uniqueKey":"settler_requirements.blacklist","typeLabel":"string[]"}},"uniqueKey":"settler_requirements","typeLabel":"object"},"@context":{"type":"array","description":"Optional JSON-LD context URLs — present when the originator wraps the request in a W3C\nData Integrity envelope so a downstream verifier can recover the signer identity.\n","items":{"type":"string","uniqueKey":"@context.items.[INDEX]","typeLabel":"string"},"uniqueKey":"@context","typeLabel":"string[]"},"proof":{"type":"object","description":"W3C Data Integrity proof conforming to the Data Integrity 1.0 specification. Which of jws or proofValue is required depends on the cryptosuite named in type, and that pairing is checked where the proof is verified rather than by this schema, so a document can satisfy the schema and still be refused at verification.","required":["type","created","verificationMethod","proofPurpose"],"properties":{"type":{"type":"string","description":"Proof type identifier. ECDSA-secp256k1 (recoverable, EVM-compatible) for did:pkh:eip155:* signers; Ed25519 for did:pkh:solana:* signers.","example":"EcdsaSecp256k1RecoverySignature2020","isRequired":true,"uniqueKey":"proof.type","typeLabel":"string"},"created":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the proof was created. Canonicalize the value exactly as it appears in the raw JSON: parsing it into a date-time and re-serializing can change the spelling (Z versus +00:00), and a different spelling canonicalizes to different bytes, so the signature no longer verifies.","example":"2026-04-29T12:00:00Z","isRequired":true,"uniqueKey":"proof.created","typeLabel":"string\u003cdate-time>"},"verificationMethod":{"type":"string","description":"DID URL identifying the verification method, e.g., 'did:pkh:eip155:1:0x...#blockchainAccountId' for ECDSA or 'did:pkh:solana:\u003cchain>:\u003caddr>#SolanaMethod2021' for Ed25519 on Solana.","example":"did:pkh:eip155:42161:0xabc...#blockchainAccountId","isRequired":true,"uniqueKey":"proof.verificationMethod","typeLabel":"string"},"proofPurpose":{"type":"string","description":"Purpose of the proof (e.g., assertionMethod, authentication).","example":"assertionMethod","isRequired":true,"uniqueKey":"proof.proofPurpose","typeLabel":"string"},"jws":{"type":"string","description":"Detached JWS signature in \u003cbase64url(header)>..\u003cbase64url(sig)> form, header {alg:ES256K-R, b64:false, crit:[b64]}. Required at runtime for EcdsaSecp256k1RecoverySignature2020.","uniqueKey":"proof.jws","typeLabel":"string"},"proofValue":{"type":"string","description":"Multibase-encoded raw signature bytes. Required at runtime for Ed25519Signature2020; mutually exclusive with jws in practice.","uniqueKey":"proof.proofValue","typeLabel":"string"}},"uniqueKey":"proof","typeLabel":"object"},"verifiableCredential":{"type":"array","description":"Optional document-level W3C Verifiable Credentials (e.g. KnownToAtum about the request producer).","items":{"type":"object","description":"W3C Verifiable Credential structure conforming to the W3C Verifiable Credentials Data Model v1.1","required":["@context","id","type","issuer","issuanceDate","credentialSubject","proof"],"properties":{"@context":{"type":"array","description":"JSON-LD context array, must include 'https://www.w3.org/2018/credentials/v1'","items":{"type":"string","uniqueKey":"verifiableCredential.items.[INDEX].@context.items.[INDEX]","typeLabel":"string"},"example":["https://www.w3.org/2018/credentials/v1"],"isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].@context","typeLabel":"string[]"},"id":{"type":"string","description":"Unique identifier for this credential","isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].id","typeLabel":"string"},"type":{"type":"array","description":"Credential types, must include 'VerifiableCredential'","items":{"type":"string","uniqueKey":"verifiableCredential.items.[INDEX].type.items.[INDEX]","typeLabel":"string"},"example":["VerifiableCredential","KYCVerifiedCredential"],"isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].type","typeLabel":"string[]"},"issuer":{"oneOf":[{"type":"string","description":"DID or issuer object of the credential issuer","isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].issuer.oneOf.0","typeLabel":"string"},{"type":"object","description":"DID or issuer object of the credential issuer","isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].issuer.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].issuer","typeLabel":"string | object"},"issuanceDate":{"type":"string","format":"date-time","description":"When the credential was issued","isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].issuanceDate","typeLabel":"string\u003cdate-time>"},"credentialSubject":{"type":"object","description":"Claims about the credential subject (structure varies by issuer)","additionalProperties":true,"isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].credentialSubject","typeLabel":"object"},"proof":{"type":"object","description":"Cryptographic proof of credential integrity","additionalProperties":true,"isRequired":true,"uniqueKey":"verifiableCredential.items.[INDEX].proof","typeLabel":"object"},"expirationDate":{"type":"string","format":"date-time","description":"When the credential expires","uniqueKey":"verifiableCredential.items.[INDEX].expirationDate","typeLabel":"string\u003cdate-time>"},"credentialStatus":{"type":"object","description":"Information for credential revocation checking. Not consulted by the verifier today.","additionalProperties":true,"uniqueKey":"verifiableCredential.items.[INDEX].credentialStatus","typeLabel":"object"}},"uniqueKey":"verifiableCredential.items.[INDEX]","typeLabel":"object"},"uniqueKey":"verifiableCredential","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"version":"1.0","request_id":"qr-2026-04-29-001","source":{"asset_identifier":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","account":"0x742D35cC6634c0532925a3b844Bc9e7595F41360"},"destination":[{"asset_identifier":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","account":"0x742D35cC6634c0532925a3b844Bc9e7595F41360"}],"fulfillment_amount":"100000000","quote_deadline":"2026-04-29T12:00:03Z","fulfillment_deadline":"2026-04-29T12:30:00Z","fulfillment_verifier":{"account":"0x892BB2e4F6b14a2B5b82Ba8d33E5925D42D4431F","endpoint":"https://veri-fill.production-testnet.atum.xyz"},"escrow_contract_address":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","max_source_amount":"101000000","settler_auth_required":{},"quote_selector":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","fulfillment_proxy":"0x892BB2e4F6b14a2B5b82Ba8d33E5925D42D4431F","settler_requirements":{"whitelist":["did:pkh:eip155:1:0x742D35cC6634c0532925a3b844Bc9e7595F41360"],"blacklist":["did:pkh:eip155:1:0x892bb2E4F6b14a2B5b82bA8D33e5925d42d4432f"]},"@context":["\u003cstring>"],"verifiableCredential":[{"@context":["https://www.w3.org/2018/credentials/v1"],"id":"\u003cstring>","type":["VerifiableCredential","KYCVerifiedCredential"],"issuer":"\u003cstring>","issuanceDate":"2023-11-07T05:31:56Z","credentialSubject":{},"proof":{},"expirationDate":"2023-11-07T05:31:56Z","credentialStatus":{}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"4d0fb9d2-9ddc-4b14-b88d-e284e6b346fd":{"description":"Quote-request resolved synchronously. `status` is `ready` when quotes were collected,\nor `collecting` when the sync wait cap fired before the quote deadline.\n","content":{"application/json":{"schema":{"type":"object","description":"Synchronous response to POST /v1/payments/quote-requests. Self-contained — the corridor\nfields are echoed at the response root so a drop-recovery client can build the award call\nwithout retaining the original request body.\n\nThe corridor echoed here describes the batch you actually receive. On an idempotent\nreplay that is the ORIGINAL batch's corridor and window, which may differ from what you\njust sent in the ways a retry is allowed to differ (the deadlines, and address casing).\n","required":["quote_request_id","status","idempotent_replay"],"properties":{"quote_request_id":{"type":"string","description":"Gateway-generated resource ID for the batch, used in subsequent status reads and awards.","example":"qr_a1b2c3d4-5678-90ef-1234-567890abcdef","isRequired":true,"uniqueKey":"quote_request_id","typeLabel":"string"},"status":{"type":"string","enum":["collecting","ready"],"description":"Collection-phase outcome of the create call:\n- `ready` — collection complete; `quotes` populated. If no settler bid, this is still\n `ready` with an empty `quotes` array (a successful \"no quotes available\" result —\n distinct from `expired`, which only applies to collected quotes that later lapse).\n- `collecting` — the sync wait cap fired before the quote deadline; poll the status endpoint for quotes.\nThe `awarded` and `expired` lifecycle states are observed only via the status endpoint, not here.\n","example":"ready","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"idempotent_replay":{"type":"boolean","description":"Whether this response describes a batch that already existed, rather than one opened\nby this request. `true` means the `request_id` had been used before and you are being\nhanded the ORIGINAL batch — no second batch was opened and no second broadcast went\nout to settlement agents.\n\n**Re-attempting a quote-request.** Re-submit the same request and you get the same\nbatch back. You may re-send the original bytes unchanged: `quote_deadline` bounds the\ncollection window and is short, so it will usually have expired by the time you\nretry, and an expired deadline on a re-submission is not an error — the request is\nresolved onto the batch that already exists rather than used to open one.\nRe-signing with fresh deadlines is equally fine and returns the same batch.\n\nThe window is NOT extended either way: it belongs to the batch, and `quote_deadline`\nin this response is the batch's own. Read `status` to see whether collection is\nstill running.\n\nWhat you must not change under one `request_id` is the corridor's economics —\naccounts, assets, or amounts — which are rejected with 409\nIDEMPOTENCY_TERMS_MISMATCH rather than resolved onto the first batch. A genuinely\ndifferent corridor needs a new `request_id`.\n\nPresent on every response, `false` for a newly opened batch. A response without the\nfield is from a gateway predating it, not a newly opened batch.\n","isRequired":true,"uniqueKey":"idempotent_replay","typeLabel":"boolean"},"source":{"type":"object","description":"Represents a cryptocurrency or token in a specific wallet. This tells the system what asset you're sending/receiving and which wallet to use.","required":["asset_identifier","account"],"properties":{"asset_identifier":{"type":"string","description":"A unique identifier for the asset using CAIP-19 format.\nCAIP-19 is a standard way to identify blockchain assets: {chain_id}/{asset_namespace}:{asset_reference}\nExamples:\n- Ethereum USDC: \"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n- Arbitrum USDC: \"eip155:42161/erc20:0xaf88d065e77c8cC2239327C5EDb3A432268e5831\"\n- Solana USDC: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n- Tron USDT: \"tron:mainnet/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\"","pattern":"^[a-z0-9]+:[a-zA-Z0-9_-]+/[a-z0-9-]{3,8}:[-.%a-zA-Z0-9]{1,128}(/[-.%a-zA-Z0-9]{1,78})?$","example":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","isRequired":true,"uniqueKey":"source.asset_identifier","typeLabel":"string"},"account":{"type":"string","description":"The wallet address that owns this asset.\nFormat depends on the blockchain:\n- Ethereum/EVM: 0x-prefixed hex address (42 characters)\n- Solana: Base58 encoded address\n- Tron: T-prefixed Base58 address\n\nA destination account is checked at ingress and must be payable on the chain named by\nits `asset_identifier`: it parses for that chain, carries a valid EIP-55 checksum when\nmixed-case, has no surrounding whitespace, and is not the zero address. A receiver that\nfails any of these is refused with `INVALID_DESTINATION_ACCOUNT`, before any funds move.","minLength":1,"maxLength":128,"example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","isRequired":true,"uniqueKey":"source.account","typeLabel":"string"}},"uniqueKey":"source","typeLabel":"object"},"destination":{"type":"array","items":{"type":"object","description":"Represents a cryptocurrency or token in a specific wallet. This tells the system what asset you're sending/receiving and which wallet to use.","required":["asset_identifier","account"],"properties":{"asset_identifier":{"type":"string","description":"A unique identifier for the asset using CAIP-19 format.\nCAIP-19 is a standard way to identify blockchain assets: {chain_id}/{asset_namespace}:{asset_reference}\nExamples:\n- Ethereum USDC: \"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n- Arbitrum USDC: \"eip155:42161/erc20:0xaf88d065e77c8cC2239327C5EDb3A432268e5831\"\n- Solana USDC: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n- Tron USDT: \"tron:mainnet/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\"","pattern":"^[a-z0-9]+:[a-zA-Z0-9_-]+/[a-z0-9-]{3,8}:[-.%a-zA-Z0-9]{1,128}(/[-.%a-zA-Z0-9]{1,78})?$","example":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","isRequired":true,"uniqueKey":"destination.items.[INDEX].asset_identifier","typeLabel":"string"},"account":{"type":"string","description":"The wallet address that owns this asset.\nFormat depends on the blockchain:\n- Ethereum/EVM: 0x-prefixed hex address (42 characters)\n- Solana: Base58 encoded address\n- Tron: T-prefixed Base58 address\n\nA destination account is checked at ingress and must be payable on the chain named by\nits `asset_identifier`: it parses for that chain, carries a valid EIP-55 checksum when\nmixed-case, has no surrounding whitespace, and is not the zero address. A receiver that\nfails any of these is refused with `INVALID_DESTINATION_ACCOUNT`, before any funds move.","minLength":1,"maxLength":128,"example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","isRequired":true,"uniqueKey":"destination.items.[INDEX].account","typeLabel":"string"}},"uniqueKey":"destination.items.[INDEX]","typeLabel":"object"},"uniqueKey":"destination","typeLabel":"object[]"},"fulfillment_amount":{"type":"string","example":"100000000","uniqueKey":"fulfillment_amount","typeLabel":"string"},"max_source_amount":{"type":"string","example":"101000000","uniqueKey":"max_source_amount","typeLabel":"string"},"fulfillment_deadline":{"type":"string","format":"date-time","example":"2026-04-29T12:30:00Z","uniqueKey":"fulfillment_deadline","typeLabel":"string\u003cdate-time>"},"quote_deadline":{"type":"string","format":"date-time","example":"2026-04-29T12:00:03Z","uniqueKey":"quote_deadline","typeLabel":"string\u003cdate-time>"},"quotes":{"type":"array","description":"Collected quotes. Present when status is `ready` — an empty array if no settler bid.","items":{"type":"object","description":"One collected quote — the content-hash identifier plus the verbatim settler-signed FulfillmentQuote.","required":["quote_id","fulfillment_quote"],"properties":{"quote_id":{"type":"string","description":"Canonical content-hash of the signed quote bytes; identifies the quote server-side at\naward time. Provided as a convenience — the gateway re-derives it from\nbid_award.fulfillment_quote_json.\n","example":"0x4e7f...c2a1","isRequired":true,"uniqueKey":"quotes.items.[INDEX].quote_id","typeLabel":"string"},"fulfillment_quote":{"type":"object","description":"The settler-signed FulfillmentQuote (structurally the canonical FulfillmentQuote/v1\ndeclaration at https://schemas.atum.xyz/declarations/FulfillmentQuote/v1), returned\nverbatim as an opaque signed document. A client recomputes quote_hash over the returned\nbytes and verifies the settler signature, then re-embeds them into\nbid_award.fulfillment_quote_json at award. quote_hash is canonicalization-based\n(URDNA2015), so it is stable across JSON key-order/whitespace normalization. The\nreturned bytes are hash-equivalent to, but not necessarily byte-identical with, what the\nsettler emitted (quotes are stored as JSONB, which normalizes on write). The gateway\nstill never re-serializes the quote through a typed struct (that renormalizes timestamp\nvalues and WOULD change quote_hash), so the Go binding exposes it as a raw JSON passthrough.\n","isRequired":true,"uniqueKey":"quotes.items.[INDEX].fulfillment_quote","typeLabel":"object"}},"uniqueKey":"quotes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"quotes","typeLabel":"object[]"},"requested_count":{"type":"integer","description":"How many agents the request was broadcast to, so silence is distinguishable from a\ndecline without a second call. Same meaning and same absence rule as on the status\nendpoint: absent means unknown, never zero.\n","example":8,"uniqueKey":"requested_count","typeLabel":"integer"},"decline_summary":{"type":"array","description":"Why the request drew few or no quotes, carried here so that a `ready` response with an\nempty `quotes` array explains itself rather than requiring a follow-up read.\n\nSame counting rules as the status endpoint: every declining agent counted exactly once\nunder its most recent reason, empty when nobody declined, absent when the detail could not\nbe read. Provisional while `status` is `collecting`, because agents are still responding.\n","items":{"type":"object","required":["reason","count"],"properties":{"reason":{"type":"string","description":"A settler's reason for not bidding, projected from its internal reason code through\nthe shared decline catalog (`apis/decline/v1/catalog.json`), which is the single\nsource of truth for the reason set. Several internal codes may map to one public\nreason.\n\nDeliberately a pattern-constrained string rather than a closed enum. The set grows\nwhenever a settler gains a cause worth naming, and a consumer whose generated client\ncloses the set rejects the whole response on a value it has not seen. Treat an\nunrecognised value as `OTHER`.\n\n`OTHER` covers a reason whose detail is settler-authored free text, and any reason\nthis gateway does not recognise. Both are counted so the summary stays exhaustive,\nwithout relaying text we neither author nor validate.\n","pattern":"^[A-Z][A-Z0-9_]*$","example":"INSUFFICIENT_LIQUIDITY","isRequired":true,"uniqueKey":"decline_summary.items.[INDEX].reason","typeLabel":"string"},"count":{"type":"integer","description":"Agents whose most recent decline reason was this one. Counts agents, never rows, and an\nagent appears under one reason only.\n","example":4,"isRequired":true,"uniqueKey":"decline_summary.items.[INDEX].count","typeLabel":"integer"},"retry_classification":{"type":"string","description":"What would have to change for a settler giving this reason to submit a price quote,\ndrawn from the same closed set as the `retry_classification` on an error response so\na caller reads one vocabulary.\n\nIt describes the decline only. The authoritative instruction for the payment is the\n`retry_classification` on its own error response: a payment can fail for a reason no\nsettler named, and it can succeed while some settlers declined.\n\nOptional, and a pattern-constrained string for the same reason `DeclineReason` is.\n","pattern":"^[A-Z][A-Z0-9_]*$","example":"RETRY_AFTER_DELAY","uniqueKey":"decline_summary.items.[INDEX].retry_classification","typeLabel":"string"},"docs_url":{"type":"string","format":"uri","description":"Link to the documentation for this reason. Absent rather than empty when no page is\npublished, so a reader never follows a link to the site root.\n","example":"https://docs.atum.xyz/decline-reasons#insufficient-liquidity","uniqueKey":"decline_summary.items.[INDEX].docs_url","typeLabel":"string\u003curi>"}},"uniqueKey":"decline_summary.items.[INDEX]","typeLabel":"object"},"uniqueKey":"decline_summary","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"quote_request_id":"qr_a1b2c3d4-5678-90ef-1234-567890abcdef","status":"ready","idempotent_replay":true,"source":{"asset_identifier":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","account":"0x742D35cC6634c0532925a3b844Bc9e7595F41360"},"destination":[{"asset_identifier":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","account":"0x742D35cC6634c0532925a3b844Bc9e7595F41360"}],"fulfillment_amount":"100000000","max_source_amount":"101000000","fulfillment_deadline":"2026-04-29T12:30:00Z","quote_deadline":"2026-04-29T12:00:03Z","quotes":[{"quote_id":"0x4e7f...c2a1","fulfillment_quote":{}}],"requested_count":8,"decline_summary":[{"reason":"INSUFFICIENT_LIQUIDITY","count":4,"retry_classification":"RETRY_AFTER_DELAY","docs_url":"https://docs.atum.xyz/decline-reasons#insufficient-liquidity"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"f05bec6a-f904-4111-909a-7619cc14b39c":{"description":"Quote-request accepted; collection continues asynchronously.","content":{"application/json":{"schema":{"type":"object","description":"Asynchronous (202) response to POST /v1/payments/quote-requests. Returns the batch handle\nplus the echoed corridor; quotes are retrieved via the status endpoint.\n\nThe corridor echoed here describes the batch you actually receive. On an idempotent\nreplay that is the ORIGINAL batch's corridor and window, which may differ from what you\njust sent in the ways a retry is allowed to differ (the deadlines, and address casing).\n","required":["quote_request_id","status","idempotent_replay"],"properties":{"quote_request_id":{"type":"string","example":"qr_a1b2c3d4-5678-90ef-1234-567890abcdef","isRequired":true,"uniqueKey":"quote_request_id","typeLabel":"string"},"status":{"type":"string","enum":["collecting"],"description":"Always `collecting` — a constant on this response, not a report of the batch's state.\nOn an idempotent replay the batch's window may already have closed; read\nGET /v1/payments/quote-requests/{quoteRequestId} for its actual state.\n","example":"collecting","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"idempotent_replay":{"type":"boolean","description":"Whether this response describes a batch that already existed, rather than one opened\nby this request. `true` means the `request_id` had been used before and you are being\nhanded the ORIGINAL batch — no second batch was opened and no second broadcast went\nout to settlement agents.\n\nThe idempotency contract is the same as on the synchronous (200) response: a\nre-submission may carry expired deadlines and is resolved onto the existing batch\nrather than rejected, the collection window is the batch's own and is not extended,\nand differing economics are rejected with 409 IDEMPOTENCY_TERMS_MISMATCH rather than\ncollapsed onto the first batch.\n\nPresent on every response, `false` for a newly opened batch. A response without the\nfield is from a gateway predating it, not a newly opened batch.\n","isRequired":true,"uniqueKey":"idempotent_replay","typeLabel":"boolean"},"source":{"type":"object","description":"Represents a cryptocurrency or token in a specific wallet. This tells the system what asset you're sending/receiving and which wallet to use.","required":["asset_identifier","account"],"properties":{"asset_identifier":{"type":"string","description":"A unique identifier for the asset using CAIP-19 format.\nCAIP-19 is a standard way to identify blockchain assets: {chain_id}/{asset_namespace}:{asset_reference}\nExamples:\n- Ethereum USDC: \"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n- Arbitrum USDC: \"eip155:42161/erc20:0xaf88d065e77c8cC2239327C5EDb3A432268e5831\"\n- Solana USDC: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n- Tron USDT: \"tron:mainnet/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\"","pattern":"^[a-z0-9]+:[a-zA-Z0-9_-]+/[a-z0-9-]{3,8}:[-.%a-zA-Z0-9]{1,128}(/[-.%a-zA-Z0-9]{1,78})?$","example":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","isRequired":true,"uniqueKey":"source.asset_identifier","typeLabel":"string"},"account":{"type":"string","description":"The wallet address that owns this asset.\nFormat depends on the blockchain:\n- Ethereum/EVM: 0x-prefixed hex address (42 characters)\n- Solana: Base58 encoded address\n- Tron: T-prefixed Base58 address\n\nA destination account is checked at ingress and must be payable on the chain named by\nits `asset_identifier`: it parses for that chain, carries a valid EIP-55 checksum when\nmixed-case, has no surrounding whitespace, and is not the zero address. A receiver that\nfails any of these is refused with `INVALID_DESTINATION_ACCOUNT`, before any funds move.","minLength":1,"maxLength":128,"example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","isRequired":true,"uniqueKey":"source.account","typeLabel":"string"}},"uniqueKey":"source","typeLabel":"object"},"destination":{"type":"array","items":{"type":"object","description":"Represents a cryptocurrency or token in a specific wallet. This tells the system what asset you're sending/receiving and which wallet to use.","required":["asset_identifier","account"],"properties":{"asset_identifier":{"type":"string","description":"A unique identifier for the asset using CAIP-19 format.\nCAIP-19 is a standard way to identify blockchain assets: {chain_id}/{asset_namespace}:{asset_reference}\nExamples:\n- Ethereum USDC: \"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n- Arbitrum USDC: \"eip155:42161/erc20:0xaf88d065e77c8cC2239327C5EDb3A432268e5831\"\n- Solana USDC: \"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n- Tron USDT: \"tron:mainnet/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\"","pattern":"^[a-z0-9]+:[a-zA-Z0-9_-]+/[a-z0-9-]{3,8}:[-.%a-zA-Z0-9]{1,128}(/[-.%a-zA-Z0-9]{1,78})?$","example":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","isRequired":true,"uniqueKey":"destination.items.[INDEX].asset_identifier","typeLabel":"string"},"account":{"type":"string","description":"The wallet address that owns this asset.\nFormat depends on the blockchain:\n- Ethereum/EVM: 0x-prefixed hex address (42 characters)\n- Solana: Base58 encoded address\n- Tron: T-prefixed Base58 address\n\nA destination account is checked at ingress and must be payable on the chain named by\nits `asset_identifier`: it parses for that chain, carries a valid EIP-55 checksum when\nmixed-case, has no surrounding whitespace, and is not the zero address. A receiver that\nfails any of these is refused with `INVALID_DESTINATION_ACCOUNT`, before any funds move.","minLength":1,"maxLength":128,"example":"0x742D35cC6634c0532925a3b844Bc9e7595F41360","isRequired":true,"uniqueKey":"destination.items.[INDEX].account","typeLabel":"string"}},"uniqueKey":"destination.items.[INDEX]","typeLabel":"object"},"uniqueKey":"destination","typeLabel":"object[]"},"fulfillment_amount":{"type":"string","example":"100000000","uniqueKey":"fulfillment_amount","typeLabel":"string"},"max_source_amount":{"type":"string","example":"101000000","uniqueKey":"max_source_amount","typeLabel":"string"},"fulfillment_deadline":{"type":"string","format":"date-time","example":"2026-04-29T12:30:00Z","uniqueKey":"fulfillment_deadline","typeLabel":"string\u003cdate-time>"},"quote_deadline":{"type":"string","format":"date-time","example":"2026-04-29T12:00:03Z","uniqueKey":"quote_deadline","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"quote_request_id":"qr_a1b2c3d4-5678-90ef-1234-567890abcdef","status":"collecting","idempotent_replay":true,"source":{"asset_identifier":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","account":"0x742D35cC6634c0532925a3b844Bc9e7595F41360"},"destination":[{"asset_identifier":"eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","account":"0x742D35cC6634c0532925a3b844Bc9e7595F41360"}],"fulfillment_amount":"100000000","max_source_amount":"101000000","fulfillment_deadline":"2026-04-29T12:30:00Z","quote_deadline":"2026-04-29T12:00:03Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"cc449e97-dc87-46b3-96f4-6cef4c779e36":{"description":"Invalid request. `QUOTE_DEADLINE_NOT_FUTURE` is the one worth planning for: a NEW\nquote-request whose `quote_deadline` has already passed is refused, because there is\nno window left to collect quotes in. It does not apply to a re-submission — an\nalready-used `request_id` resolves onto the batch that exists and its expired\ndeadline is ignored, which is what makes a retry recoverable.\n","content":{"application/json":{"schema":{"type":"object","description":"Safe, outward-facing error. Derived from an internal error through the shared error catalog. The public code identifies the category and the message is a curated, safe description.\n\nA panic is caught by shared middleware that responds `{\"error\": \"Internal server error occurred\"}` instead, so a 500 is not guaranteed to carry this shape.","required":["code","message"],"properties":{"code":{"type":"string","description":"Public, machine-readable error category in SCREAMING_SNAKE_CASE.","pattern":"^[A-Z][A-Z0-9_]*$","example":"INVALID_SOURCE_ASSET","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Curated, safe, human-readable message.","maxLength":500,"example":"The source asset identifier is not a valid CAIP-19 asset.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","description":"Correlation id to quote to support to locate the internal error record.","example":"req_123456789","uniqueKey":"request_id","typeLabel":"string"},"payment_id":{"type":"string","description":"The payment this error was raised against. Absent when the error is not about a specific payment.","example":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","uniqueKey":"payment_id","typeLabel":"string"},"docs_url":{"type":"string","format":"uri","description":"Link to the documentation page for this public code.","uniqueKey":"docs_url","typeLabel":"string\u003curi>"},"domain":{"type":"string","description":"Originating service domain.","example":"PAYMENT_GATEWAY","uniqueKey":"domain","typeLabel":"string"},"retry_classification":{"type":"string","description":"What the caller should do next. Absent means the condition has not been classified, which is not the same as safe to retry.\nRe-sending the same `request_id` is an idempotent replay and always safe. This value is about submitting a new one, which starts a new operation. See https://docs.atum.xyz/errors for the value set.","example":"RECONCILE_THEN_DECIDE","uniqueKey":"retry_classification","typeLabel":"string"},"request_id_reusable":{"type":"boolean","description":"Whether the caller may re-send this same request_id. True means no payment was created for it, so the id is still free. False means a payment exists for it, so the id is spent and re-sending only replays this outcome. Absent means undetermined, which a caller should read as false. Separate from retry_classification, which answers what the caller must change rather than whether the id survived.","example":false,"uniqueKey":"request_id_reusable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"INVALID_SOURCE_ASSET","message":"The source asset identifier is not a valid CAIP-19 asset.","request_id":"req_123456789","payment_id":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","docs_url":"\u003cstring>","domain":"PAYMENT_GATEWAY","retry_classification":"RECONCILE_THEN_DECIDE","request_id_reusable":false}}},"exampleType":"generated"}},"exampleType":"generated"},"ee362a72-f179-446a-bfe3-69f0ea9da128":{"description":"The `request_id` has already been used for a quote-request with different\neconomics (`IDEMPOTENCY_TERMS_MISMATCH`). Re-submitting one `request_id` is how a\nretry is made safe, so it must identify one batch; use a distinct `request_id`\nper quote-request.\n","content":{"application/json":{"schema":{"type":"object","description":"Safe, outward-facing error. Derived from an internal error through the shared error catalog. The public code identifies the category and the message is a curated, safe description.\n\nA panic is caught by shared middleware that responds `{\"error\": \"Internal server error occurred\"}` instead, so a 500 is not guaranteed to carry this shape.","required":["code","message"],"properties":{"code":{"type":"string","description":"Public, machine-readable error category in SCREAMING_SNAKE_CASE.","pattern":"^[A-Z][A-Z0-9_]*$","example":"INVALID_SOURCE_ASSET","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Curated, safe, human-readable message.","maxLength":500,"example":"The source asset identifier is not a valid CAIP-19 asset.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","description":"Correlation id to quote to support to locate the internal error record.","example":"req_123456789","uniqueKey":"request_id","typeLabel":"string"},"payment_id":{"type":"string","description":"The payment this error was raised against. Absent when the error is not about a specific payment.","example":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","uniqueKey":"payment_id","typeLabel":"string"},"docs_url":{"type":"string","format":"uri","description":"Link to the documentation page for this public code.","uniqueKey":"docs_url","typeLabel":"string\u003curi>"},"domain":{"type":"string","description":"Originating service domain.","example":"PAYMENT_GATEWAY","uniqueKey":"domain","typeLabel":"string"},"retry_classification":{"type":"string","description":"What the caller should do next. Absent means the condition has not been classified, which is not the same as safe to retry.\nRe-sending the same `request_id` is an idempotent replay and always safe. This value is about submitting a new one, which starts a new operation. See https://docs.atum.xyz/errors for the value set.","example":"RECONCILE_THEN_DECIDE","uniqueKey":"retry_classification","typeLabel":"string"},"request_id_reusable":{"type":"boolean","description":"Whether the caller may re-send this same request_id. True means no payment was created for it, so the id is still free. False means a payment exists for it, so the id is spent and re-sending only replays this outcome. Absent means undetermined, which a caller should read as false. Separate from retry_classification, which answers what the caller must change rather than whether the id survived.","example":false,"uniqueKey":"request_id_reusable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"INVALID_SOURCE_ASSET","message":"The source asset identifier is not a valid CAIP-19 asset.","request_id":"req_123456789","payment_id":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","docs_url":"\u003cstring>","domain":"PAYMENT_GATEWAY","retry_classification":"RECONCILE_THEN_DECIDE","request_id_reusable":false}}},"exampleType":"generated"}},"exampleType":"generated"},"588728fa-05ec-43bc-8e14-359dbbddb136":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","description":"Safe, outward-facing error. Derived from an internal error through the shared error catalog. The public code identifies the category and the message is a curated, safe description.\n\nA panic is caught by shared middleware that responds `{\"error\": \"Internal server error occurred\"}` instead, so a 500 is not guaranteed to carry this shape.","required":["code","message"],"properties":{"code":{"type":"string","description":"Public, machine-readable error category in SCREAMING_SNAKE_CASE.","pattern":"^[A-Z][A-Z0-9_]*$","example":"INVALID_SOURCE_ASSET","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Curated, safe, human-readable message.","maxLength":500,"example":"The source asset identifier is not a valid CAIP-19 asset.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","description":"Correlation id to quote to support to locate the internal error record.","example":"req_123456789","uniqueKey":"request_id","typeLabel":"string"},"payment_id":{"type":"string","description":"The payment this error was raised against. Absent when the error is not about a specific payment.","example":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","uniqueKey":"payment_id","typeLabel":"string"},"docs_url":{"type":"string","format":"uri","description":"Link to the documentation page for this public code.","uniqueKey":"docs_url","typeLabel":"string\u003curi>"},"domain":{"type":"string","description":"Originating service domain.","example":"PAYMENT_GATEWAY","uniqueKey":"domain","typeLabel":"string"},"retry_classification":{"type":"string","description":"What the caller should do next. Absent means the condition has not been classified, which is not the same as safe to retry.\nRe-sending the same `request_id` is an idempotent replay and always safe. This value is about submitting a new one, which starts a new operation. See https://docs.atum.xyz/errors for the value set.","example":"RECONCILE_THEN_DECIDE","uniqueKey":"retry_classification","typeLabel":"string"},"request_id_reusable":{"type":"boolean","description":"Whether the caller may re-send this same request_id. True means no payment was created for it, so the id is still free. False means a payment exists for it, so the id is spent and re-sending only replays this outcome. Absent means undetermined, which a caller should read as false. Separate from retry_classification, which answers what the caller must change rather than whether the id survived.","example":false,"uniqueKey":"request_id_reusable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"INVALID_SOURCE_ASSET","message":"The source asset identifier is not a valid CAIP-19 asset.","request_id":"req_123456789","payment_id":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","docs_url":"\u003cstring>","domain":"PAYMENT_GATEWAY","retry_classification":"RECONCILE_THEN_DECIDE","request_id_reusable":false}}},"exampleType":"generated"}},"exampleType":"generated"},"8689a005-8f8b-4dae-9ca7-e5acc76b1700":{"description":"The request was not accepted: a dependency is temporarily unavailable, or this operation is paused (`SERVICE_PAUSED`). Nothing was submitted, so the request is safe to retry.","content":{"application/json":{"schema":{"type":"object","description":"Safe, outward-facing error. Derived from an internal error through the shared error catalog. The public code identifies the category and the message is a curated, safe description.\n\nA panic is caught by shared middleware that responds `{\"error\": \"Internal server error occurred\"}` instead, so a 500 is not guaranteed to carry this shape.","required":["code","message"],"properties":{"code":{"type":"string","description":"Public, machine-readable error category in SCREAMING_SNAKE_CASE.","pattern":"^[A-Z][A-Z0-9_]*$","example":"INVALID_SOURCE_ASSET","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Curated, safe, human-readable message.","maxLength":500,"example":"The source asset identifier is not a valid CAIP-19 asset.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","description":"Correlation id to quote to support to locate the internal error record.","example":"req_123456789","uniqueKey":"request_id","typeLabel":"string"},"payment_id":{"type":"string","description":"The payment this error was raised against. Absent when the error is not about a specific payment.","example":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","uniqueKey":"payment_id","typeLabel":"string"},"docs_url":{"type":"string","format":"uri","description":"Link to the documentation page for this public code.","uniqueKey":"docs_url","typeLabel":"string\u003curi>"},"domain":{"type":"string","description":"Originating service domain.","example":"PAYMENT_GATEWAY","uniqueKey":"domain","typeLabel":"string"},"retry_classification":{"type":"string","description":"What the caller should do next. Absent means the condition has not been classified, which is not the same as safe to retry.\nRe-sending the same `request_id` is an idempotent replay and always safe. This value is about submitting a new one, which starts a new operation. See https://docs.atum.xyz/errors for the value set.","example":"RECONCILE_THEN_DECIDE","uniqueKey":"retry_classification","typeLabel":"string"},"request_id_reusable":{"type":"boolean","description":"Whether the caller may re-send this same request_id. True means no payment was created for it, so the id is still free. False means a payment exists for it, so the id is spent and re-sending only replays this outcome. Absent means undetermined, which a caller should read as false. Separate from retry_classification, which answers what the caller must change rather than whether the id survived.","example":false,"uniqueKey":"request_id_reusable","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"INVALID_SOURCE_ASSET","message":"The source asset identifier is not a valid CAIP-19 asset.","request_id":"req_123456789","payment_id":"0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c","docs_url":"\u003cstring>","domain":"PAYMENT_GATEWAY","retry_classification":"RECONCILE_THEN_DECIDE","request_id_reusable":false}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{},"servers":{"33df3309-b84e-48a9-94c1-aac200cf674f":{"url":"https://payment-gw.production-mainnet.atum.xyz","description":"Mainnet"},"fa558170-4e9e-4663-9e9b-39906523216e":{"url":"https://payment-gw.production-testnet.atum.xyz","description":"Testnet"}}},"originalFileLocation":"api-reference/payment-gateway/openapi.yaml"},"subdomain":"atumlabs","siteName":"Atum Docs","title":"Create a quote-request - Atum Docs","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-22T00:03:17.749Z","originalFileLocation":"api-reference/payment-gateway/create-quote-request.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=\"dark\"}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=\"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Atum Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/atumlabs/Pqh0GSDdyRfy-YKa/_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/atumlabs/Pqh0GSDdyRfy-YKa/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/atumlabs/Pqh0GSDdyRfy-YKa/_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/atumlabs/Pqh0GSDdyRfy-YKa/_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/atumlabs/Pqh0GSDdyRfy-YKa/_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/atumlabs/Pqh0GSDdyRfy-YKa/_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/atumlabs/Pqh0GSDdyRfy-YKa/_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/atumlabs/Pqh0GSDdyRfy-YKa/_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/atumlabs/Pqh0GSDdyRfy-YKa/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a quote-request - Atum Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Atum Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://atumlabs.mintlify.site/_mintlify/api/og/v2?division=Payment+Gateway\u0026amp;title=Create+a+quote-request\u0026amp;description=Open+a+quote-request+batch+and+collect+price+quotes+for+a+corridor%2C+without+committing+to+a+payment.\u0026amp;theme=2455e481a76f39e16fb336fe\u0026amp;signature=f7097944ea5d9c3eb6600b8478f0a85334845f56a4da91c87d3d3af33446af83\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create a quote-request - Atum Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://atumlabs.mintlify.site/_mintlify/api/og/v2?division=Payment+Gateway\u0026amp;title=Create+a+quote-request\u0026amp;description=Open+a+quote-request+batch+and+collect+price+quotes+for+a+corridor%2C+without+committing+to+a+payment.\u0026amp;theme=2455e481a76f39e16fb336fe\u0026amp;signature=f7097944ea5d9c3eb6600b8478f0a85334845f56a4da91c87d3d3af33446af83\">\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/atumlabs/Pqh0GSDdyRfy-YKa/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Atum Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#24450d\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/payment-gateway/create-quote-request.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.atum.xyz/#organization\",\"name\":\"Atum Docs\",\"url\":\"https://docs.atum.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/atumlabs/eBwMdhd0uJ6cwbY0/images/assets/wordmark-light.svg?fit=max\u0026auto=format\u0026n=eBwMdhd0uJ6cwbY0\u0026q=85\u0026s=6ba7458a7e4528e698e48cbf8e15c375\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.atum.xyz#website\",\"name\":\"Atum Docs\",\"url\":\"https://docs.atum.xyz\",\"publisher\":{\"@id\":\"https://docs.atum.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request#webpage\",\"url\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request\",\"name\":\"Create a quote-request\",\"description\":\"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.\",\"dateModified\":\"2026-09-22T00:03:17.749Z\",\"isPartOf\":{\"@id\":\"https://docs.atum.xyz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Payment Gateway\",\"item\":\"https://docs.atum.xyz/api-reference/payment-gateway/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create a quote-request\",\"item\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request#apireference\",\"headline\":\"Create a quote-request\",\"name\":\"Create a quote-request\",\"description\":\"Open a quote-request batch and collect price quotes for a corridor, without committing to a payment.\",\"url\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request\",\"mainEntityOfPage\":{\"@id\":\"https://docs.atum.xyz/api-reference/payment-gateway/create-quote-request#webpage\"},\"dateModified\":\"2026-09-22T00:03:17.749Z\",\"publisher\":{\"@id\":\"https://docs.atum.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.atum.xyz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Atum Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Atum Docs","nav":{"global":null,"tabs":[{"tab":"Get started","icon":"rocket","pages":[{"title":"Get started","href":"/get-started/overview/what-is-atum"}]},{"tab":"Payment protocols","icon":"route","pages":[{"title":"Payment protocols","href":"/payment-protocols/overview"}]},{"tab":"Settle payments","icon":"handshake","pages":[{"title":"Settle payments","href":"/settle-payments/what-is-an-atum-settlement"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Introduction","pages":[{"title":"API Reference","sidebarTitle":"Overview","icon":"code","href":"/api-reference/overview"},{"title":"auth.md","sidebarTitle":"How agents authenticate","hidden":true,"href":"/auth"},{"title":"Idempotency","sidebarTitle":"Idempotency","icon":"arrows-rotate","href":"/api-reference/idempotency"}]},{"group":"Error handling","icon":"circle-exclamation","pages":[{"title":"Error codes","icon":"circle-exclamation","href":"/errors"},{"title":"Decline reasons","icon":"hand","href":"/decline-reasons"}]},{"group":"Payment Gateway","pages":[{"title":"Overview","href":"/api-reference/payment-gateway/introduction"},{"title":"Submit payment request","openapi":"POST /v1/payments","href":"/api-reference/payment-gateway/submit-payment"},{"title":"Get payment status","openapi":"GET /v1/payments/{paymentId}/status","href":"/api-reference/payment-gateway/get-payment-status"},{"title":"Resolve a payment request","openapi":"GET /v1/payments/resolve","href":"/api-reference/payment-gateway/resolve-payment"},{"title":"Get payment timeline","description":"Read the step-by-step settlement record for one payment. Use it for reconciliation and support, not to decide what to do next.","openapi":"GET /v1/payments/{paymentId}/timeline","href":"/api-reference/payment-gateway/payment-timeline"},{"title":"Create a quote-request","openapi":"POST /v1/payments/quote-requests","href":"/api-reference/payment-gateway/create-quote-request"},{"title":"Get quote-request status","description":"Read a quote-request batch and the quotes collected for it so far.","openapi":"GET /v1/payments/quote-requests/{quoteRequestId}","href":"/api-reference/payment-gateway/quote-request-status"},{"title":"Get chain defaults","openapi":"GET /v1/defaults","href":"/api-reference/payment-gateway/chain-defaults"}]},{"group":"x402 Facilitator","pages":[{"title":"Overview","href":"/api-reference/x402/introduction"},{"title":"Verify payment","openapi":"POST /verify","href":"/api-reference/x402/verify"},{"title":"Settle payment","openapi":"POST /settle","href":"/api-reference/x402/settle"},{"title":"Supported kinds","openapi":"GET /supported","href":"/api-reference/x402/supported"}]},{"group":"Veri-Fill","pages":[{"title":"Veri-Fill API","sidebarTitle":"Overview","href":"/api-reference/veri-fill/introduction"}]}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Create a quote-request - Atum Docs","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}