Quotes a redemption of $GOLD tokens for a physical-gold denomination and returns the transaction the user must sign to transfer the tokens into GRAIL’s escrow.Unlike trades, a redemption does write a row at quote time — with status quoted (internal-only, not returned via Get Redemption until the indexer advances it to submitted after the user’s transaction confirms on-chain).Only the user wallet needs to co-sign — there is no partner signature on redemptions. The transaction transfers tokens_required$GOLD from the user’s wallet to GRAIL’s escrow.
The partial-signed transaction expires in ~60 seconds (Solana recentBlockhash TTL). Re-quote if you miss the window.
Headers
string
required
A valid PARTNER scope key.
Request Body
string
required
GRAIL user ID (prefixed gu_). User must belong to the authenticated partner, be active, and have kyc_level: "full".
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Oro Grail","colors":{"primary":"#00261c","light":"#00261c","dark":"#00261c"},"favicon":"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3","logo":{"light":"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3","dark":"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3"},"api":{"openapi":"openapi.json","mdx":{"server":"https://grail-stack-dev.onrender.com"}},"appearance":{"default":"light","strict":true},"navbar":{"links":[{"label":"Support","href":"mailto:support@oro.finance"}],"primary":{"type":"button","label":"Get Started","href":"https://grail.oro.finance"}},"footer":{"socials":{"website":"https://oro.finance","discord":"https://discord.gg/kb3buk7pgR","x":"https://x.com/orogoldapp"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"oro-a5494d30","hasAudioNarration":false,"actualSubdomain":"oro-a5494d30","customDomains":["docs.grail.oro.finance"],"gitSource":{"type":"github","owner":"oroweb3","repo":"oro-grail-docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae946832b3cf0697cfc9908:success","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API Reference","count":22},{"language":"default","tag":"Documentation","count":10},{"language":"default","tag":"Grail Overview","count":7},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"Trades","count":6},{"language":"default","tag":"Redemptions","count":5},{"language":"default","tag":"Integration Guides","count":5},{"language":"default","tag":"Users","count":3},{"language":"default","tag":"Authentication","count":2},{"language":"default","tag":"Partner","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/redemptions/quote-redemption","slug":"/api-reference/redemptions/quote-redemption","pageMetadata":{"title":"Quote Redemption","api":"POST /v1/redemptions","description":"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.","href":"/api-reference/redemptions/quote-redemption"},"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: \"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Expandable,Heading,ParamField,ResponseField,Table,Warning}=_components;if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Quotes a redemption of `,_jsx(_components.code,{children:`$GOLD`}),` tokens for a physical-gold denomination and returns the transaction the user must sign to transfer the tokens into GRAIL’s escrow.`]}),`\n`,_jsxs(_components.p,{children:[`Unlike trades, a redemption `,_jsx(_components.strong,{children:`does`}),` write a row at quote time — with status `,_jsx(_components.code,{children:`quoted`}),` (internal-only, not returned via `,_jsx(_components.a,{href:`/api-reference/redemptions/get-redemption`,children:`Get Redemption`}),` until the indexer advances it to `,_jsx(_components.code,{children:`submitted`}),` after the user’s transaction confirms on-chain).`]}),`\n`,_jsxs(_components.p,{children:[`Only the `,_jsx(_components.strong,{children:`user wallet`}),` needs to co-sign — there is no partner signature on redemptions. The transaction transfers `,_jsx(_components.code,{children:`tokens_required`}),` `,_jsx(_components.code,{children:`$GOLD`}),` from the user’s wallet to GRAIL’s escrow.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The partial-signed transaction expires in `,_jsx(_components.strong,{children:`~60 seconds`}),` (Solana `,_jsx(_components.code,{children:`recentBlockhash`}),` TTL). Re-quote if you miss the window.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`headers`,children:`Headers`}),`\n`,_jsx(ParamField,{header:`x-api-key`,type:`string`,required:true,id:`param-x-api-key`,children:_jsxs(_components.p,{children:[`A valid `,_jsx(_components.code,{children:`PARTNER`}),` scope key.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request Body`}),`\n`,_jsx(ParamField,{body:`grail_user_id`,type:`string`,required:true,id:`param-grail-user-id`,children:_jsxs(_components.p,{children:[`GRAIL user ID (prefixed `,_jsx(_components.code,{children:`gu_`}),`). User must belong to the authenticated partner, be `,_jsx(_components.code,{children:`active`}),`, and have `,_jsx(_components.code,{children:`kyc_level: \"full\"`}),`.`]})}),`\n`,_jsx(ParamField,{body:`denomination_id`,type:`string`,required:true,id:`param-denomination-id`,children:_jsxs(_components.p,{children:[`Denomination ID from `,_jsx(_components.a,{href:`/api-reference/denominations/list-denominations`,children:`List Denominations`}),`, e.g., `,_jsx(_components.code,{children:`\"pk_tola_1\"`}),`.`]})}),`\n`,_jsx(ParamField,{body:`city`,type:`string`,required:true,id:`param-city`,children:_jsxs(_components.p,{children:[`City of pickup. Must match the denomination’s registered `,_jsx(_components.code,{children:`city`}),` (case-insensitive).`]})}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsx(ResponseField,{name:`redemption_id`,type:`string`,id:`param-redemption-id`,children:_jsxs(_components.p,{children:[`Redemption identifier, prefixed `,_jsx(_components.code,{children:`red_`}),`. Use with `,_jsx(_components.a,{href:`/api-reference/redemptions/submit-redemption`,children:`Submit Redemption`}),`, `,_jsx(_components.a,{href:`/api-reference/redemptions/get-redemption`,children:`Get Redemption`}),`, and `,_jsx(_components.a,{href:`/api-reference/redemptions/cancel-redemption`,children:`Cancel Redemption`}),`.`]})}),`\n`,_jsx(ResponseField,{name:`quote`,type:`object`,id:`param-quote`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(ResponseField,{name:`denomination`,type:`string`,id:`param-denomination`,children:_jsxs(_components.p,{children:[`Denomination label, e.g., `,_jsx(_components.code,{children:`\"1 Tola\"`}),`.`]})}),_jsx(ResponseField,{name:`weight_g`,type:`number`,id:`param-weight-g`,children:_jsx(_components.p,{children:`Weight of the denomination in grams.`})}),_jsx(ResponseField,{name:`spot_price_usd`,type:`number`,id:`param-spot-price-usd`,children:_jsx(_components.p,{children:`Gold spot price in USD per troy ounce at quote time.`})}),_jsx(ResponseField,{name:`gold_value_usd`,type:`number`,id:`param-gold-value-usd`,children:_jsx(_components.p,{children:`USD value of the gold at spot.`})}),_jsx(ResponseField,{name:`fee_usd`,type:`number`,id:`param-fee-usd`,children:_jsxs(_components.p,{children:[`Partner redemption fee in USD (partner’s `,_jsx(_components.code,{children:`fee_percentage`}),` × `,_jsx(_components.code,{children:`gold_value_usd`}),`).`]})}),_jsx(ResponseField,{name:`total_usd`,type:`number`,id:`param-total-usd`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`gold_value_usd + fee_usd`}),`. The USD value of `,_jsx(_components.code,{children:`tokens_required`}),`.`]})}),_jsx(ResponseField,{name:`tokens_required`,type:`string`,id:`param-tokens-required`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`$GOLD`}),` tokens the user must transfer, formatted to 6 decimal places. `,_jsx(_components.strong,{children:`This is a token amount, not USD`}),` — do not confuse with `,_jsx(_components.code,{children:`total_usd`}),`.`]})})]})}),`\n`,_jsx(ResponseField,{name:`partially_signed_transaction`,type:`string`,id:`param-partially-signed-transaction`,children:_jsxs(_components.p,{children:[`Base64-encoded Solana transaction, signed by GRAIL. Co-sign with the `,_jsx(_components.strong,{children:`user wallet only`}),` (no partner signature on redemptions).`]})}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`error`})}),_jsx(_components.th,{children:`When`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_request`})}),_jsxs(_components.td,{children:[`Missing `,_jsx(_components.code,{children:`grail_user_id`}),`, `,_jsx(_components.code,{children:`denomination_id`}),`, or `,_jsx(_components.code,{children:`city`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_denomination`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`denomination_id`}),` not found or inactive`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_city`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`city`}),` doesn’t match the denomination’s registered city`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`kyc_level_insufficient`})}),_jsxs(_components.td,{children:[`User’s KYC level is not `,_jsx(_components.code,{children:`full`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`partner_mismatch`})}),_jsx(_components.td,{children:`User belongs to a different partner`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user_suspended`})}),_jsxs(_components.td,{children:[`User status is `,_jsx(_components.code,{children:`suspended`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user_not_found`})}),_jsxs(_components.td,{children:[`No user with the given `,_jsx(_components.code,{children:`grail_user_id`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`503`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing_unavailable`})}),_jsx(_components.td,{children:`Gold price oracle unreachable or returned stale data`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Quote Redemption","api":"POST /v1/redemptions","description":"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.","href":"/api-reference/redemptions/quote-redemption"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,ParamField,RequestExample,ResponseExample,ResponseField,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Quotes a redemption of `,_jsx(_components.code,{children:`$GOLD`}),` tokens for a physical-gold denomination and returns the transaction the user must sign to transfer the tokens into GRAIL’s escrow.`]}),`\n`,_jsxs(_components.p,{children:[`Unlike trades, a redemption `,_jsx(_components.strong,{children:`does`}),` write a row at quote time — with status `,_jsx(_components.code,{children:`quoted`}),` (internal-only, not returned via `,_jsx(_components.a,{href:`/api-reference/redemptions/get-redemption`,children:`Get Redemption`}),` until the indexer advances it to `,_jsx(_components.code,{children:`submitted`}),` after the user’s transaction confirms on-chain).`]}),`\n`,_jsxs(_components.p,{children:[`Only the `,_jsx(_components.strong,{children:`user wallet`}),` needs to co-sign — there is no partner signature on redemptions. The transaction transfers `,_jsx(_components.code,{children:`tokens_required`}),` `,_jsx(_components.code,{children:`$GOLD`}),` from the user’s wallet to GRAIL’s escrow.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`The partial-signed transaction expires in `,_jsx(_components.strong,{children:`~60 seconds`}),` (Solana `,_jsx(_components.code,{children:`recentBlockhash`}),` TTL). Re-quote if you miss the window.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`headers`,children:`Headers`}),`\n`,_jsx(ParamField,{header:`x-api-key`,type:`string`,required:true,id:`param-x-api-key`,children:_jsxs(_components.p,{children:[`A valid `,_jsx(_components.code,{children:`PARTNER`}),` scope key.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request Body`}),`\n`,_jsx(ParamField,{body:`grail_user_id`,type:`string`,required:true,id:`param-grail-user-id`,children:_jsxs(_components.p,{children:[`GRAIL user ID (prefixed `,_jsx(_components.code,{children:`gu_`}),`). User must belong to the authenticated partner, be `,_jsx(_components.code,{children:`active`}),`, and have `,_jsx(_components.code,{children:`kyc_level: \"full\"`}),`.`]})}),`\n`,_jsx(ParamField,{body:`denomination_id`,type:`string`,required:true,id:`param-denomination-id`,children:_jsxs(_components.p,{children:[`Denomination ID from `,_jsx(_components.a,{href:`/api-reference/denominations/list-denominations`,children:`List Denominations`}),`, e.g., `,_jsx(_components.code,{children:`\"pk_tola_1\"`}),`.`]})}),`\n`,_jsx(ParamField,{body:`city`,type:`string`,required:true,id:`param-city`,children:_jsxs(_components.p,{children:[`City of pickup. Must match the denomination’s registered `,_jsx(_components.code,{children:`city`}),` (case-insensitive).`]})}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsx(ResponseField,{name:`redemption_id`,type:`string`,id:`param-redemption-id`,children:_jsxs(_components.p,{children:[`Redemption identifier, prefixed `,_jsx(_components.code,{children:`red_`}),`. Use with `,_jsx(_components.a,{href:`/api-reference/redemptions/submit-redemption`,children:`Submit Redemption`}),`, `,_jsx(_components.a,{href:`/api-reference/redemptions/get-redemption`,children:`Get Redemption`}),`, and `,_jsx(_components.a,{href:`/api-reference/redemptions/cancel-redemption`,children:`Cancel Redemption`}),`.`]})}),`\n`,_jsx(ResponseField,{name:`quote`,type:`object`,id:`param-quote`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(ResponseField,{name:`denomination`,type:`string`,id:`param-denomination`,children:_jsxs(_components.p,{children:[`Denomination label, e.g., `,_jsx(_components.code,{children:`\"1 Tola\"`}),`.`]})}),_jsx(ResponseField,{name:`weight_g`,type:`number`,id:`param-weight-g`,children:_jsx(_components.p,{children:`Weight of the denomination in grams.`})}),_jsx(ResponseField,{name:`spot_price_usd`,type:`number`,id:`param-spot-price-usd`,children:_jsx(_components.p,{children:`Gold spot price in USD per troy ounce at quote time.`})}),_jsx(ResponseField,{name:`gold_value_usd`,type:`number`,id:`param-gold-value-usd`,children:_jsx(_components.p,{children:`USD value of the gold at spot.`})}),_jsx(ResponseField,{name:`fee_usd`,type:`number`,id:`param-fee-usd`,children:_jsxs(_components.p,{children:[`Partner redemption fee in USD (partner’s `,_jsx(_components.code,{children:`fee_percentage`}),` × `,_jsx(_components.code,{children:`gold_value_usd`}),`).`]})}),_jsx(ResponseField,{name:`total_usd`,type:`number`,id:`param-total-usd`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`gold_value_usd + fee_usd`}),`. The USD value of `,_jsx(_components.code,{children:`tokens_required`}),`.`]})}),_jsx(ResponseField,{name:`tokens_required`,type:`string`,id:`param-tokens-required`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`$GOLD`}),` tokens the user must transfer, formatted to 6 decimal places. `,_jsx(_components.strong,{children:`This is a token amount, not USD`}),` — do not confuse with `,_jsx(_components.code,{children:`total_usd`}),`.`]})})]})}),`\n`,_jsx(ResponseField,{name:`partially_signed_transaction`,type:`string`,id:`param-partially-signed-transaction`,children:_jsxs(_components.p,{children:[`Base64-encoded Solana transaction, signed by GRAIL. Co-sign with the `,_jsx(_components.strong,{children:`user wallet only`}),` (no partner signature on redemptions).`]})}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`HTTP`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`error`})}),_jsx(_components.th,{children:`When`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_request`})}),_jsxs(_components.td,{children:[`Missing `,_jsx(_components.code,{children:`grail_user_id`}),`, `,_jsx(_components.code,{children:`denomination_id`}),`, or `,_jsx(_components.code,{children:`city`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_denomination`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`denomination_id`}),` not found or inactive`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`invalid_city`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`city`}),` doesn’t match the denomination’s registered city`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`400`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`kyc_level_insufficient`})}),_jsxs(_components.td,{children:[`User’s KYC level is not `,_jsx(_components.code,{children:`full`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`partner_mismatch`})}),_jsx(_components.td,{children:`User belongs to a different partner`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`403`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user_suspended`})}),_jsxs(_components.td,{children:[`User status is `,_jsx(_components.code,{children:`suspended`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`404`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`user_not_found`})}),_jsxs(_components.td,{children:[`No user with the given `,_jsx(_components.code,{children:`grail_user_id`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`503`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`pricing_unavailable`})}),_jsx(_components.td,{children:`Gold price oracle unreachable or returned stale data`})]})]})]}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`8`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://grail-stack-dev.onrender.com/v1/redemptions`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"x-api-key: grail_partner_\u003chex>\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"grail_user_id\": \"gu_6b60956e-a8ee-4de2-8128-04c7fdf633c3\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"denomination_id\": \"pk_tola_1\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"city\": \"karachi\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`201 Created`,numberOfLines:`13`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"redemption_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"red_a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"quote\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"denomination\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1 Tola\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"weight_g\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`11.664`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"spot_price_usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4872.84`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"gold_value_usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1827.34`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"fee_usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"total_usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1827.34`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"tokens_required\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0.375006\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"partially_signed_transaction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"AQAAAAABAAEC...\u003cbase64>...\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Quote Redemption","api":"POST /v1/redemptions","description":"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.","href":"/api-reference/redemptions/quote-redemption"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Headers","slug":"headers","depth":2,"children":[]},{"title":"Request Body","slug":"request-body","depth":2,"children":[]},{"title":"Response","slug":"response","depth":2,"children":[]},{"title":"Errors","slug":"errors","depth":2,"children":[]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"cURL","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"shellscript\">\u003ccode language=\"shellscript\" numberOfLines=\"8\">\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">curl\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -X\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> POST\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> https://grail-stack-dev.onrender.com/v1/redemptions\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"x-api-key: grail_partner_\u0026#x3C;hex>\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Content-Type: application/json\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -d\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> '{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"grail_user_id\": \"gu_6b60956e-a8ee-4de2-8128-04c7fdf633c3\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"denomination_id\": \"pk_tola_1\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"city\": \"karachi\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }'\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"201 Created","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"13\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"redemption_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"red_a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"quote\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"denomination\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"1 Tola\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"weight_g\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">11.664\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"spot_price_usd\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">4872.84\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"gold_value_usd\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1827.34\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"fee_usd\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">0\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"total_usd\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1827.34\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"tokens_required\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"0.375006\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"partially_signed_transaction\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"AQAAAAABAAEC...\u0026#x3C;base64>...\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}},"endpoint":{"title":"Quote Redemption","path":"/v1/redemptions","servers":[{"url":"https://grail-stack-dev.onrender.com"}],"method":"post","request":{"security":[],"parameters":{"query":{},"header":{"x-api-key":{"schema":[{"type":"string","description":"A valid `PARTNER` scope key.","required":true}]}},"cookie":{},"path":{}},"body":{"application/json":{"schemaArray":[{"type":"object","properties":{"grail_user_id":[{"type":"string","description":"GRAIL user ID (prefixed `gu_` ). User must belong to the authenticated partner, be `active` , and have `kyc_level: \"full\"` .","required":true}],"denomination_id":[{"type":"string","description":"Denomination ID from List Denominations , e.g., `\"pk_tola_1\"` .","required":true}],"city":[{"type":"string","description":"City of pickup. Must match the denomination’s registered `city` (case-insensitive).","required":true}]}}],"examples":{"example":{"value":{"grail_user_id":"\u003cstring>","denomination_id":"\u003cstring>","city":"\u003cstring>"}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"redemption_id":[{"type":"string","description":"Redemption identifier, prefixed `red_` . Use with Submit Redemption , Get Redemption , and Cancel Redemption ."}],"quote":[{"type":"object","properties":{"denomination":[{"type":"string","description":"Denomination label, e.g., `\"1 Tola\"` ."}],"weight_g":[{"type":"number","description":"Weight of the denomination in grams."}],"spot_price_usd":[{"type":"number","description":"Gold spot price in USD per troy ounce at quote time."}],"gold_value_usd":[{"type":"number","description":"USD value of the gold at spot."}],"fee_usd":[{"type":"number","description":"Partner redemption fee in USD (partner’s `fee_percentage` × `gold_value_usd` )."}],"total_usd":[{"type":"number","description":"`gold_value_usd + fee_usd` . The USD value of `tokens_required` ."}],"tokens_required":[{"type":"string","description":"`$GOLD` tokens the user must transfer, formatted to 6 decimal places. This is a token amount, not USD — do not confuse with `total_usd` ."}]}}],"partially_signed_transaction":[{"type":"string","description":"Base64-encoded Solana transaction, signed by GRAIL. Co-sign with the user wallet only (no partner signature on redemptions)."}]}}],"examples":{"example":{"value":{"redemption_id":"\u003cstring>","quote":{"denomination":"\u003cstring>","weight_g":123,"spot_price_usd":123,"gold_value_usd":123,"fee_usd":123,"total_usd":123,"tokens_required":"\u003cstring>"},"partially_signed_transaction":"\u003cstring>"}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"oro-a5494d30","siteName":"Oro Grail","title":"Quote Redemption - Oro Grail","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-20T10:27:39.305Z","originalFileLocation":"api-reference/redemptions/quote-redemption.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Oro Grail\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Quote Redemption - Oro Grail\">\u003cmeta data-mint-head property=\"og:description\" content=\"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Oro Grail\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://oro-a5494d30.mintlify.site/_mintlify/api/og/v2?division=Redemptions\u0026amp;title=Quote+Redemption\u0026amp;description=Quotes+a+physical-gold+redemption.+Returns+a+partially-signed+transaction+for+the+user+to+co-sign.\u0026amp;theme=304c9bec0b792d02be331269\u0026amp;signature=91bce3af41517e0e605a893a3d3a9543d2ce1951e7905d87c39455e3a383530d\">\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=\"Quote Redemption - Oro Grail\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://oro-a5494d30.mintlify.site/_mintlify/api/og/v2?division=Redemptions\u0026amp;title=Quote+Redemption\u0026amp;description=Quotes+a+physical-gold+redemption.+Returns+a+partially-signed+transaction+for+the+user+to+co-sign.\u0026amp;theme=304c9bec0b792d02be331269\u0026amp;signature=91bce3af41517e0e605a893a3d3a9543d2ce1951e7905d87c39455e3a383530d\">\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/oro-a5494d30/zm95Ikh3MBH1y1Nr/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Oro Grail\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00261c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/redemptions/quote-redemption.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.grail.oro.finance/#organization\",\"name\":\"Oro Grail\",\"url\":\"https://docs.grail.oro.finance\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/oro-a5494d30/CRdlCQgjAt0bkkeb/images/oro-finance-logo.png?fit=max\u0026auto=format\u0026n=CRdlCQgjAt0bkkeb\u0026q=85\u0026s=a8a1d535fb3e82aecf71f61c154492c3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.grail.oro.finance#website\",\"name\":\"Oro Grail\",\"url\":\"https://docs.grail.oro.finance\",\"publisher\":{\"@id\":\"https://docs.grail.oro.finance/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption#webpage\",\"url\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption\",\"name\":\"Quote Redemption\",\"description\":\"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.\",\"dateModified\":\"2026-04-20T10:27:39.305Z\",\"isPartOf\":{\"@id\":\"https://docs.grail.oro.finance#website\"},\"breadcrumb\":{\"@id\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Oro Grail\",\"item\":\"https://docs.grail.oro.finance\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quote Redemption\",\"item\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption#apireference\",\"headline\":\"Quote Redemption\",\"name\":\"Quote Redemption\",\"description\":\"Quotes a physical-gold redemption. Returns a partially-signed transaction for the user to co-sign.\",\"url\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption\",\"mainEntityOfPage\":{\"@id\":\"https://docs.grail.oro.finance/api-reference/redemptions/quote-redemption#webpage\"},\"dateModified\":\"2026-04-20T10:27:39.305Z\",\"publisher\":{\"@id\":\"https://docs.grail.oro.finance/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.grail.oro.finance#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Oro Grail\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Oro Grail\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/redemptions/quote-redemption.md","siteName":"Oro Grail","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/overview"}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"API Overview","href":"/api-reference/overview"}]},{"group":"General","pages":[{"title":"Health Check","api":"GET /health","href":"/api-reference/general/health"}]},{"group":"Authentication","pages":[{"title":"Request API Key Challenge","api":"POST /v1/auth/challenge","href":"/api-reference/authentication/request-challenge"},{"title":"Create API Key","api":"POST /v1/auth/api-key","href":"/api-reference/authentication/create-api-key"}]},{"group":"Partner","pages":[{"title":"List API Keys","api":"GET /v1/partner/api-keys","href":"/api-reference/partner/list-api-keys"},{"title":"Revoke API Key","api":"POST /v1/partner/api-keys/{key_id}/revoke","href":"/api-reference/partner/revoke-api-key"}]},{"group":"Users","pages":[{"title":"Create User","api":"POST /v1/users","href":"/api-reference/users/create-user"},{"title":"List Users","api":"GET /v1/users","href":"/api-reference/users/list-users"},{"title":"Get User","api":"GET /v1/users/{grail_user_id}","href":"/api-reference/users/get-user"}]},{"group":"Denominations","pages":[{"title":"List Denominations","api":"GET /v1/denominations","href":"/api-reference/denominations/list-denominations"}]},{"group":"Trades","pages":[{"title":"Quote Buy","api":"POST /v1/buy","href":"/api-reference/trades/quote-buy"},{"title":"Submit Buy","api":"POST /v1/buy/{trade_id}/submit","href":"/api-reference/trades/submit-buy"},{"title":"Quote Sell","api":"POST /v1/sell","href":"/api-reference/trades/quote-sell"},{"title":"Submit Sell","api":"POST /v1/sell/{trade_id}/submit","href":"/api-reference/trades/submit-sell"},{"title":"Get Trade","api":"GET /v1/trades/{trade_id}","href":"/api-reference/trades/get-trade"},{"title":"List Trades","api":"GET /v1/trades","description":"Lists trades for the authenticated partner, with optional filters.","href":"/api-reference/trades/list-trades"}]},{"group":"Redemptions","pages":[{"title":"Quote Redemption","api":"POST /v1/redemptions","href":"/api-reference/redemptions/quote-redemption"},{"title":"Submit Redemption","api":"POST /v1/redemptions/{id}/submit","description":"Broadcasts the user-signed redemption transaction to Solana. Pure passthrough.","href":"/api-reference/redemptions/submit-redemption"},{"title":"Get Redemption","api":"GET /v1/redemptions/{id}","href":"/api-reference/redemptions/get-redemption"},{"title":"List Redemptions","api":"GET /v1/redemptions","href":"/api-reference/redemptions/list-redemptions"},{"title":"Cancel Redemption","api":"POST /v1/redemptions/{id}/cancel","href":"/api-reference/redemptions/cancel-redemption"}]}]}]},"basePath":"","title":"Quote Redemption - Oro Grail","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js"]}