[{"data":1,"prerenderedAt":165},["ShallowReactive",2],{"content-\u002Fprompts\u002Fintegrate-quotes-fx":3,"prompts-category-integrations":99},{"id":4,"title":5,"author":6,"body":7,"categories":6,"category":83,"categoryType":6,"date":84,"description":85,"extension":86,"faq":6,"howto":6,"isBlog":87,"isChangelog":87,"meta":88,"navigation":89,"path":90,"pillar":87,"products":91,"rawbody":95,"seo":96,"stem":97,"thumbnail":6,"updated":6,"__hash__":98},"content\u002Fprompts\u002Fintegrate-quotes-fx.md","Integrate quotes and FX handling",null,{"type":8,"value":9,"toc":77},"minimark",[10,14,19,30,34,47,51],[11,12,13],"p",{},"Paste this prompt into your coding agent to build a correct quoting layer, the part of a payments integration where subtle mistakes cost real money.",[15,16,18],"h2",{"id":17},"prompt","Prompt",[20,21,27],"pre",{"className":22,"code":24,"language":25,"meta":26},[23],"language-text","You are building the quoting and FX layer for my BlindPay integration.\n\nBefore writing code, read these sources and follow them over any prior knowledge:\n- https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fllms.txt (read payin quotes, payout quotes, transfer quotes, and cut-off times)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nImplement:\n1. Payout quotes: POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fquotes with bank_account_id, network, and token. Here currency_type \"sender\" means the stablecoin side.\n2. Payin quotes: POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayin-quotes with wallet_id and payment_method. Here currency_type \"sender\" means the fiat side. Encode this asymmetry in named types or enums so call sites cannot mix them up.\n3. Transfer quotes (managed wallet to any address): POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Ftransfer-quotes with amount_reference sender or receiver; rate is fixed 1:1.\n4. Expiry: read expires_at (epoch milliseconds) on every quote and never hardcode a window. Standard quotes last about 5 minutes, BRL OTC payin quotes about 10 seconds. Build a re-quote path: if execution fails because the quote expired, fetch a fresh quote and surface the new rate for confirmation when it moved.\n5. Amounts and display: request_amount is an integer in minor units. From the response use commercial_quotation vs blindpay_quotation to show the user the rate and the spread, plus flat_fee and partner_fee_amount for a complete price breakdown. Respect cover_fees when the sender absorbs fees.\n6. Enforce documented per-currency minimums and maximums before quoting, so users get a validation error instead of an API error.\n\nConstraints:\n- Quotes are point-in-time server state: never cache or reuse one across payment attempts.\n- Store the quote ID (qu_) and its full response with each payment for reconciliation and support.\n\nDeliverables: a typed quote client distinguishing the three quote kinds, a re-quote-on-expiry helper, a price-breakdown formatter for UI display, and unit tests covering the currency_type conventions in both directions.\n","text","",[28,29,24],"code",{"__ignoreMap":26},[15,31,33],{"id":32},"how-to-use","How to use",[35,36,37,41,44],"ol",{},[38,39,40],"li",{},"Paste the prompt with your stack details.",[38,42,43],{},"Tell the agent which corridors you quote (for example USDC to BRL and MXN) so it can bake in the right minimums.",[38,45,46],{},"Check the rate-display output against the dashboard before shipping.",[15,48,50],{"id":49},"related-docs","Related docs",[52,53,54,63,70],"ul",{},[38,55,56],{},[57,58,62],"a",{"href":59,"rel":60},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayout-quotes",[61],"nofollow","Payout quotes",[38,64,65],{},[57,66,69],{"href":67,"rel":68},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayin-quotes",[61],"Payin quotes",[38,71,72],{},[57,73,76],{"href":74,"rel":75},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fkb\u002Fcut-off-times",[61],"Cut-off times and limits",{"title":26,"searchDepth":78,"depth":78,"links":79},2,[80,81,82],{"id":17,"depth":78,"text":18},{"id":32,"depth":78,"text":33},{"id":49,"depth":78,"text":50},"integrations","2026-08-26","Handle payin, payout, and transfer quotes correctly: expiry windows, currency_type conventions, fees, and displaying rates to users.","md",false,{},true,"\u002Fprompts\u002Fintegrate-quotes-fx",[92,93,94],"quotes","payouts","payins","---\ntitle: \"Integrate quotes and FX handling\"\ndescription: \"Handle payin, payout, and transfer quotes correctly: expiry windows, currency_type conventions, fees, and displaying rates to users.\"\ndate: \"2026-08-26\"\ncategory: \"integrations\"\nproducts: [\"quotes\", \"payouts\", \"payins\"]\n---\n\nPaste this prompt into your coding agent to build a correct quoting layer, the part of a payments integration where subtle mistakes cost real money.\n\n## Prompt\n\n```text\nYou are building the quoting and FX layer for my BlindPay integration.\n\nBefore writing code, read these sources and follow them over any prior knowledge:\n- https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fllms.txt (read payin quotes, payout quotes, transfer quotes, and cut-off times)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nImplement:\n1. Payout quotes: POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fquotes with bank_account_id, network, and token. Here currency_type \"sender\" means the stablecoin side.\n2. Payin quotes: POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayin-quotes with wallet_id and payment_method. Here currency_type \"sender\" means the fiat side. Encode this asymmetry in named types or enums so call sites cannot mix them up.\n3. Transfer quotes (managed wallet to any address): POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Ftransfer-quotes with amount_reference sender or receiver; rate is fixed 1:1.\n4. Expiry: read expires_at (epoch milliseconds) on every quote and never hardcode a window. Standard quotes last about 5 minutes, BRL OTC payin quotes about 10 seconds. Build a re-quote path: if execution fails because the quote expired, fetch a fresh quote and surface the new rate for confirmation when it moved.\n5. Amounts and display: request_amount is an integer in minor units. From the response use commercial_quotation vs blindpay_quotation to show the user the rate and the spread, plus flat_fee and partner_fee_amount for a complete price breakdown. Respect cover_fees when the sender absorbs fees.\n6. Enforce documented per-currency minimums and maximums before quoting, so users get a validation error instead of an API error.\n\nConstraints:\n- Quotes are point-in-time server state: never cache or reuse one across payment attempts.\n- Store the quote ID (qu_) and its full response with each payment for reconciliation and support.\n\nDeliverables: a typed quote client distinguishing the three quote kinds, a re-quote-on-expiry helper, a price-breakdown formatter for UI display, and unit tests covering the currency_type conventions in both directions.\n```\n\n## How to use\n\n1. Paste the prompt with your stack details.\n2. Tell the agent which corridors you quote (for example USDC to BRL and MXN) so it can bake in the right minimums.\n3. Check the rate-display output against the dashboard before shipping.\n\n## Related docs\n\n- [Payout quotes](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayout-quotes)\n- [Payin quotes](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayin-quotes)\n- [Cut-off times and limits](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fkb\u002Fcut-off-times)\n",{"title":5,"description":85},"prompts\u002Fintegrate-quotes-fx","oYT72nSTaMGuu0AZtTesA44yNQUbMRYXWS_PRVr1-5o",[100,104,108,112,116,120,124,128,132,136,140,144,148,149,153,157,161],{"path":101,"title":102,"description":103},"\u002Fprompts\u002Fbuild-contractor-payouts","Build a global contractor payout product","Compose onboarding, bank accounts, quotes, payouts, and reconciliation into a complete pay-your-contractors feature across Pix, SPEI, SEPA, and ACH.",{"path":105,"title":106,"description":107},"\u002Fprompts\u002Fconnect-ai-agent-mcp","Connect an AI agent with the MCP server","Wire Claude, Cursor, or any MCP-compatible host to the BlindPay API with the official MCP server and agent skills, with guardrails for money movement.",{"path":109,"title":110,"description":111},"\u002Fprompts\u002Fintegrate-external-wallet-payouts","Fund payouts from external wallets","Let customers pay out from their own EVM, Solana, or Stellar wallets: signed-message registration plus the on-chain authorization step per chain.",{"path":113,"title":114,"description":115},"\u002Fprompts\u002Fintegrate-circle-wallets","Integrate Circle wallets with BlindPay","Fund BlindPay payouts from Circle developer-controlled wallets: sign the registration challenge and the ERC-20 approve through Circle's API instead of a browser wallet.",{"path":117,"title":118,"description":119},"\u002Fprompts\u002Fintegrate-dfns","Integrate Dfns with BlindPay","Fund BlindPay stablecoin payouts from Dfns MPC wallets: sign the registration challenge and the ERC-20 approve through Dfns's User Action Signature flow.",{"path":121,"title":122,"description":123},"\u002Fprompts\u002Fintegrate-fireblocks","Integrate Fireblocks with BlindPay","Fund BlindPay stablecoin payouts from Fireblocks vault accounts: MPC-signed wallet registration and the ERC-20 approve through Fireblocks' transactions API.",{"path":125,"title":126,"description":127},"\u002Fprompts\u002Fintegrate-privy","Integrate Privy with BlindPay","Fund BlindPay stablecoin payouts from Privy Server Wallets: sign the registration challenge and the ERC-20 approve through Privy's wallet RPC endpoint.",{"path":129,"title":130,"description":131},"\u002Fprompts\u002Fintegrate-virtual-accounts","Integrate US virtual accounts","Give each customer a named US bank account with ACH, RTP, wire, and SWIFT details that settles automatically to USDC or USDT in their wallet.",{"path":133,"title":134,"description":135},"\u002Fprompts\u002Fintegrate-utila","Integrate Utila with BlindPay","Fund BlindPay payouts from Utila MPC vaults: sign the wallet-registration challenge and the ERC-20 approve through Utila's service-account API, with async transaction confirmation handled.",{"path":137,"title":138,"description":139},"\u002Fprompts\u002Fintegrate-customer-onboarding","Integrate customer onboarding with KYC and KYB","Build the full onboarding pipeline: terms of service, individual and business customers, document uploads, RFI handling, and status webhooks.",{"path":141,"title":142,"description":143},"\u002Fprompts\u002Fintegrate-offramp-wallets","Integrate offramp wallets for auto-conversion","Give each bank account a dedicated crypto deposit address: stablecoins sent to it convert and pay out to the linked bank account automatically.",{"path":145,"title":146,"description":147},"\u002Fprompts\u002Fintegrate-payins","Integrate payins from bank transfers to stablecoins","Accept Pix, ACH, wire, SPEI, and other local bank transfers and settle them as USDC or USDT in a wallet, with quotes, payment instructions, and webhooks.",{"path":90,"title":5,"description":85},{"path":150,"title":151,"description":152},"\u002Fprompts\u002Fintegrate-stablecoin-payouts","Integrate stablecoin payouts end to end","Build a complete stablecoin to fiat payout flow: customer onboarding, bank accounts, quotes, and payout execution over Pix, ACH, SPEI, SEPA, and more.",{"path":154,"title":155,"description":156},"\u002Fprompts\u002Fintegrate-wallet-transfers","Integrate wallet transfers and cross-chain USDC","Move stablecoins from managed wallets to any address with transfer quotes, including cross-chain USDC over Circle CCTP v2.",{"path":158,"title":159,"description":160},"\u002Fprompts\u002Fintegrate-webhooks","Integrate webhooks end to end","Register endpoints, verify Svix signatures correctly, deduplicate retries, and drive payment state from the full BlindPay event catalog.",{"path":162,"title":163,"description":164},"\u002Fprompts\u002Fintegrate-payables","Pay boletos and Brazilian bills with payables","Register boletos, arrecadacao slips, and PIX codes as payables and settle them from stablecoins through the quote-and-execute flow.",1787868849153]