{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-payments/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Quotes & FX","description":"Start today using our public API to power your next project."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"quotes--fx"},"children":["Quotes & FX"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["How rates are locked, what a quote costs you, and where the requote risk lives."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-quote-model"},"children":["The quote model"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A quote locks an FX rate for exactly one payment. It is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["destination-amount based"]},": you state what the beneficiary must receive, and Jeeves derives what you'll be debited."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X POST 'https://public-sandbox.tryjeeves.com/v1/quotes' \\\n  -H \"Authorization: Bearer $JEEVES_ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"sourceCurrency\": \"USD\",\n    \"destinationCurrency\": \"MXN\",\n    \"amount\": \"43035.00\",\n    \"productAccountType\": \"self-funded\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Destination"]}," amount, decimal string, in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["destinationCurrency"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["productAccountType"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The kind of account you'll actually pay from. Your FX rate and fees depend on it, so a quote priced for a different account type doesn't reflect what you'll pay."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sourceCurrency"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["destinationCurrency"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["One of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USD"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MXN"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BRL"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COP"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EUR"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GBP"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CAD"]},", or a stablecoin ticker (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USDB"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USDC"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USDT"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EURC"]},"); any other code returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 validation_failed"]},". Set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sourceCurrency"]}," to the funding account's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["productAccountCurrency"]}," — a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["crypto-wallet"]}," account is quoted in its ticker, for example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["USDC"]},". An unpriceable pair returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422 unsupported_pair"]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response derives the rest:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Response field"},"children":["Response field"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rate"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Decimal string — destination units per one source unit (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"17.2140\""]}," = 17.214 MXN per USD)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sourceAmount"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["What you'll be debited, ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["before fees"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expiresAt"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["When the locked rate stops being valid. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Read it, don't assume a window"]}," — the TTL is configured per company. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," means the quote doesn't expire."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All money fields are ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["decimal strings"]},", never floats — parse them with a decimal type."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"single-use-then-gone"},"children":["Single use, then gone"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A quote funds exactly one payment. Reusing a consumed quote — or presenting an expired one with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onQuoteExpiry: fail"]}," — returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422 quote_expired"]},". Create a fresh quote per payment attempt; don't pool them."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-requote-decision"},"children":["The requote decision"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If your quote may expire between showing a rate to a user and their confirmation, you have two honest choices:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"onQuoteExpiry"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onQuoteExpiry"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Behavior"},"children":["Behavior"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"When to use"},"children":["When to use"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fail"]}," (default)"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422 quote_expired"]},"; you re-quote and re-confirm with the user."]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["You show rates to users and they must approve what they pay."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requote"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["A new quote is priced at the current rate and used. Destination amount unchanged, ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["source amount moves"]},"."]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Machine-to-machine flows where delivering the exact destination amount matters more than the exact source cost."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requote"]},", always compare the response's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quoteId"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["originalQuoteId"]}," and check ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sourceAmount"]}," against your expectation — a requote is the one case where you pay a rate you were never shown, and no separate event announces it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"fees"},"children":["Fees"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sourceAmount"]}," is what the quote will debit ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["before fees"]},". Fees are set by your Jeeves pricing agreement and assessed on top; they are not itemized by this API today. They do count against your balance check — a payment fails with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422 insufficient_funds"]}," when the account balance is below the quoted amount ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["plus fees"]}," — so leave headroom on tightly-funded accounts."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"scheduled-payments-skip-the-quote"},"children":["Scheduled payments skip the quote"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A future-dated payment is quoted ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["on its execution date"]},", not at creation: omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quoteId"]},", send ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scheduledDate"]}," instead. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/payments/payment-flow/scheduled-payments"},"children":["Scheduled payments"]},"."]}]},"headings":[{"value":"Quotes & FX","id":"quotes--fx","depth":1},{"value":"The quote model","id":"the-quote-model","depth":2},{"value":"Single use, then gone","id":"single-use-then-gone","depth":2},{"value":"The requote decision","id":"the-requote-decision","depth":2},{"value":"Fees","id":"fees","depth":2},{"value":"Scheduled payments skip the quote","id":"scheduled-payments-skip-the-quote","depth":2}],"frontmatter":{"seo":{"title":"Quotes & FX"}},"lastModified":"2026-10-28T18:10:31.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/payments/payment-flow/quotes-and-fx","userData":{"isAuthenticated":false,"teams":["anonymous"]}}