[{"data":1,"prerenderedAt":221},["ShallowReactive",2],{"content-\u002Fprompts\u002Fintegrate-global-checkout":3,"prompts-category-integrations":137},{"id":4,"title":5,"authors":6,"body":7,"categories":6,"category":119,"categoryType":6,"compare":6,"contributors":6,"date":120,"description":121,"extension":122,"faq":6,"howto":6,"isBlog":123,"isChangelog":123,"meta":124,"navigation":125,"path":126,"pillar":123,"products":127,"rawbody":132,"role":6,"seo":133,"seoTitle":134,"standalone":123,"stem":135,"thumbnail":6,"translationOf":6,"updated":6,"__hash__":136},"content\u002Fprompts\u002Fintegrate-global-checkout.md","Integrate a global checkout",null,{"type":8,"value":9,"toc":113},"minimark",[10,14,19,30,34,63,71,75],[11,12,13],"p",{},"Paste this prompt into your coding agent to add a Stripe Checkout-style flow to the app you already run. You price in USD, the shopper pays from their own bank in their own currency, and the money settles as stablecoins in your wallet.",[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 adding a global checkout to my application, in the style of Stripe Checkout, with BlindPay as the money layer: shoppers pay with local bank rails and the merchant is paid in USD stablecoins.\n\nMode: single merchant. (Change this line to \"platform\" if my app onboards many merchants, each paid separately, with a platform fee on every payment.)\n\nBefore writing code, read these sources and follow them over any prior knowledge:\n- https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fllms.txt (read the payins, payin quotes, managed wallets, partner fees, and webhooks pages)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nBuild the flow:\n1. Merchant setup. The merchant is a BlindPay business customer: terms of service acceptance (POST \u002Fv1\u002Fe\u002Finstances\u002F{instance_id}\u002Ftos returns a URL; after Accept, the browser comes back to your redirect_url with ?tos_id=to_..., and each tos_id works for one customer only), then POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers with type \"business\" (KYB), then a managed wallet (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\u002Fwallets) that receives every payment. Single merchant: do this once, in a setup script or admin screen, and store the customer and wallet ids in config. Platform: build merchant onboarding (sign-up, terms, KYB form, a verification status screen that waits for kyc_status approved) and store the ids per merchant.\n2. Checkout sessions. A server-side model and endpoint that creates a session with a USD amount in cents (at least 1000, the payin quote minimum), optional line items, success_url, cancel_url, metadata, and an expiry, and returns a URL to the hosted payment page. Status: open, processing (payin created), complete, failed, expired. Accept an Idempotency-Key so a retried create returns the same session. Platform mode: per-merchant API keys, stored hashed.\n3. Hosted payment page. The shopper picks a country and rail: Brazil (pix), Mexico (spei), Argentina (transfers), Colombia (pse), or the US (ach, wire, rtp). Collect only what the rail needs in payer_rules: a CPF or CNPJ for Pix (pix_allowed_tax_ids, check digits are validated), a CUIT or CUIL for Argentina (transfers_allowed_tax_id), and full payer details for PSE (pse_full_name, pse_document_type, pse_document_number, pse_email, pse_phone, pse_bank_code).\n4. Price. Request a payin quote (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayin-quotes) with wallet_id, currency_type \"receiver\", request_amount set to the session amount, cover_fees true, the payment_method, and the payer_rules. The merchant then receives exactly the price, and sender_amount is the local amount the shopper pays, fees included. Show it with a countdown: quotes expire after 5 minutes (expires_at, epoch milliseconds), so quote when the shopper picks a rail and quote again silently if it expires. Platform mode: pass partner_fee_id (create the pf_ once with POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpartner-fees) and record partner_fee_amount as platform revenue.\n5. Pay. Create the payin (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayins\u002Fevm with payin_quote_id; one endpoint for every rail) with an Idempotency-Key tied to the session, so a double click never creates two payins. A payin cannot be canceled, so bind the session to it and lock the rail. Show the instructions for that rail only: pix_code as a QR code and copyable text; clabe for SPEI; tracking_transaction.transfers_instruction.account for Argentina; tracking_transaction.pse_instruction.payment_link for PSE; memo_code plus blindpay_bank_details for ACH, wire, and RTP, with the memo marked as required.\n6. Settle. Register a webhook endpoint (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fwebhook-endpoints) and handle payin.new, payin.update, and payin.complete with signature verification. Find the session by payin id (pi_) and read the payin's status: payin.complete moves it to complete, and a payin.update with status failed or refunded moves it to failed. on_hold means held for review, so the session stays processing. Then redirect the shopper to success_url with the session id, and notify the merchant: platform mode sends signed merchant webhooks (checkout.session.completed, checkout.session.payment_failed, checkout.session.expired) with retries; single-merchant mode fulfills the order in my own code.\n7. Expire open sessions past their expiry. A processing session never expires.\n\nConstraints:\n- Amounts are integers in minor units. For MXN, ARS, and COP, sender_amount is always a whole currency unit (a multiple of 100). API keys stay server-side; the browser only talks to my backend.\n- Session and payment status come only from the payin status, never from wallet balance changes.\n- Develop against a development instance with USDB on base_sepolia: KYB approves itself, payins complete by themselves (most rails in under a minute, Pix in about 2), a $666.00 payment ends failed, and a $777.00 payment ends refunded. pix_code and memo_code are the literal \"\u003Cdevelopment>\" there, so show a test-mode note instead.\n- Wire carries a higher flat fee than ACH, so present it for larger orders.\n\nDeliverables: merchant setup (or onboarding in platform mode), the checkout session API, the hosted payment page, the payin webhook handler with signature verification, and integration tests on the development instance that pay one session per rail and assert the completed, failed ($666.00), and refunded ($777.00) outcomes.\n","text","",[28,29,24],"code",{"__ignoreMap":26},[15,31,33],{"id":32},"how-to-use","How to use",[35,36,37,49,57,60],"ol",{},[38,39,40,41,48],"li",{},"Create a development instance and API key at ",[42,43,47],"a",{"href":44,"rel":45},"https:\u002F\u002Fapp.blindpay.com",[46],"nofollow","app.blindpay.com",".",[38,50,51,52,56],{},"Set the ",[53,54,55],"strong",{},"Mode"," line: keep \"single merchant\" if you sell your own products, change it to \"platform\" if you host checkout for other businesses.",[38,58,59],{},"Tell the agent which countries you sell to so it trims the rail picker.",[38,61,62],{},"Pay one session per rail on the development instance before going live.",[11,64,65,66,70],{},"Starting from an empty folder instead? ",[42,67,69],{"href":68},"\u002Fprompts\u002Fbuild-a-global-checkout","Build a global checkout"," builds and tests the whole platform in one unattended run.",[15,72,74],{"id":73},"related-docs","Related docs",[76,77,78,85,92,99,106],"ul",{},[38,79,80],{},[42,81,84],{"href":82,"rel":83},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayin-quotes",[46],"Payin quotes",[38,86,87],{},[42,88,91],{"href":89,"rel":90},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayins",[46],"Payins",[38,93,94],{},[42,95,98],{"href":96,"rel":97},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Flearn\u002Fpartner-fees",[46],"Partner fees",[38,100,101],{},[42,102,105],{"href":103,"rel":104},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fwallets",[46],"Managed wallets",[38,107,108],{},[42,109,112],{"href":110,"rel":111},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fkb\u002Fpayment-methods",[46],"Payment methods",{"title":26,"searchDepth":114,"depth":114,"links":115},2,[116,117,118],{"id":17,"depth":114,"text":18},{"id":32,"depth":114,"text":33},{"id":73,"depth":114,"text":74},"integrations","2026-10-30","Add a hosted checkout to your existing app: checkout sessions, a payment page for Pix, SPEI, ACH, wire, RTP, Argentine bank transfer, and PSE, USD settlement in stablecoins, and webhooks. Works for one merchant or a platform of many.","md",false,{},true,"\u002Fprompts\u002Fintegrate-global-checkout",[128,129,130,131],"payins","quotes","compliance","webhooks","---\ntitle: \"Integrate a global checkout\"\nseoTitle: \"Add a Stripe-style global checkout to your app with BlindPay\"\ndescription: \"Add a hosted checkout to your existing app: checkout sessions, a payment page for Pix, SPEI, ACH, wire, RTP, Argentine bank transfer, and PSE, USD settlement in stablecoins, and webhooks. Works for one merchant or a platform of many.\"\ndate: \"2026-10-30\"\ncategory: \"integrations\"\nproducts: [\"payins\", \"quotes\", \"compliance\", \"webhooks\"]\n---\n\nPaste this prompt into your coding agent to add a Stripe Checkout-style flow to the app you already run. You price in USD, the shopper pays from their own bank in their own currency, and the money settles as stablecoins in your wallet.\n\n## Prompt\n\n```text\nYou are adding a global checkout to my application, in the style of Stripe Checkout, with BlindPay as the money layer: shoppers pay with local bank rails and the merchant is paid in USD stablecoins.\n\nMode: single merchant. (Change this line to \"platform\" if my app onboards many merchants, each paid separately, with a platform fee on every payment.)\n\nBefore writing code, read these sources and follow them over any prior knowledge:\n- https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fllms.txt (read the payins, payin quotes, managed wallets, partner fees, and webhooks pages)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nBuild the flow:\n1. Merchant setup. The merchant is a BlindPay business customer: terms of service acceptance (POST \u002Fv1\u002Fe\u002Finstances\u002F{instance_id}\u002Ftos returns a URL; after Accept, the browser comes back to your redirect_url with ?tos_id=to_..., and each tos_id works for one customer only), then POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers with type \"business\" (KYB), then a managed wallet (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fcustomers\u002F{customer_id}\u002Fwallets) that receives every payment. Single merchant: do this once, in a setup script or admin screen, and store the customer and wallet ids in config. Platform: build merchant onboarding (sign-up, terms, KYB form, a verification status screen that waits for kyc_status approved) and store the ids per merchant.\n2. Checkout sessions. A server-side model and endpoint that creates a session with a USD amount in cents (at least 1000, the payin quote minimum), optional line items, success_url, cancel_url, metadata, and an expiry, and returns a URL to the hosted payment page. Status: open, processing (payin created), complete, failed, expired. Accept an Idempotency-Key so a retried create returns the same session. Platform mode: per-merchant API keys, stored hashed.\n3. Hosted payment page. The shopper picks a country and rail: Brazil (pix), Mexico (spei), Argentina (transfers), Colombia (pse), or the US (ach, wire, rtp). Collect only what the rail needs in payer_rules: a CPF or CNPJ for Pix (pix_allowed_tax_ids, check digits are validated), a CUIT or CUIL for Argentina (transfers_allowed_tax_id), and full payer details for PSE (pse_full_name, pse_document_type, pse_document_number, pse_email, pse_phone, pse_bank_code).\n4. Price. Request a payin quote (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayin-quotes) with wallet_id, currency_type \"receiver\", request_amount set to the session amount, cover_fees true, the payment_method, and the payer_rules. The merchant then receives exactly the price, and sender_amount is the local amount the shopper pays, fees included. Show it with a countdown: quotes expire after 5 minutes (expires_at, epoch milliseconds), so quote when the shopper picks a rail and quote again silently if it expires. Platform mode: pass partner_fee_id (create the pf_ once with POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpartner-fees) and record partner_fee_amount as platform revenue.\n5. Pay. Create the payin (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayins\u002Fevm with payin_quote_id; one endpoint for every rail) with an Idempotency-Key tied to the session, so a double click never creates two payins. A payin cannot be canceled, so bind the session to it and lock the rail. Show the instructions for that rail only: pix_code as a QR code and copyable text; clabe for SPEI; tracking_transaction.transfers_instruction.account for Argentina; tracking_transaction.pse_instruction.payment_link for PSE; memo_code plus blindpay_bank_details for ACH, wire, and RTP, with the memo marked as required.\n6. Settle. Register a webhook endpoint (POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fwebhook-endpoints) and handle payin.new, payin.update, and payin.complete with signature verification. Find the session by payin id (pi_) and read the payin's status: payin.complete moves it to complete, and a payin.update with status failed or refunded moves it to failed. on_hold means held for review, so the session stays processing. Then redirect the shopper to success_url with the session id, and notify the merchant: platform mode sends signed merchant webhooks (checkout.session.completed, checkout.session.payment_failed, checkout.session.expired) with retries; single-merchant mode fulfills the order in my own code.\n7. Expire open sessions past their expiry. A processing session never expires.\n\nConstraints:\n- Amounts are integers in minor units. For MXN, ARS, and COP, sender_amount is always a whole currency unit (a multiple of 100). API keys stay server-side; the browser only talks to my backend.\n- Session and payment status come only from the payin status, never from wallet balance changes.\n- Develop against a development instance with USDB on base_sepolia: KYB approves itself, payins complete by themselves (most rails in under a minute, Pix in about 2), a $666.00 payment ends failed, and a $777.00 payment ends refunded. pix_code and memo_code are the literal \"\u003Cdevelopment>\" there, so show a test-mode note instead.\n- Wire carries a higher flat fee than ACH, so present it for larger orders.\n\nDeliverables: merchant setup (or onboarding in platform mode), the checkout session API, the hosted payment page, the payin webhook handler with signature verification, and integration tests on the development instance that pay one session per rail and assert the completed, failed ($666.00), and refunded ($777.00) outcomes.\n```\n\n## How to use\n\n1. Create a development instance and API key at [app.blindpay.com](https:\u002F\u002Fapp.blindpay.com).\n2. Set the **Mode** line: keep \"single merchant\" if you sell your own products, change it to \"platform\" if you host checkout for other businesses.\n3. Tell the agent which countries you sell to so it trims the rail picker.\n4. Pay one session per rail on the development instance before going live.\n\nStarting from an empty folder instead? [Build a global checkout](\u002Fprompts\u002Fbuild-a-global-checkout) builds and tests the whole platform in one unattended run.\n\n## Related docs\n\n- [Payin quotes](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayin-quotes)\n- [Payins](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayins)\n- [Partner fees](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Flearn\u002Fpartner-fees)\n- [Managed wallets](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fwallets)\n- [Payment methods](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fkb\u002Fpayment-methods)\n",{"title":5,"description":121},"Add a Stripe-style global checkout to your app with BlindPay","prompts\u002Fintegrate-global-checkout","y60i6QPNKk_e7MGDW5wZibRJC9MjRPs-1UW2JBiJYgA",[138,140,144,148,152,156,160,164,168,172,176,180,181,185,189,193,197,201,205,209,213,217],{"path":68,"title":69,"description":139},"One prompt, no questions: your coding agent builds and tests a hosted checkout platform on a BlindPay development instance. Merchants onboard with KYB, create checkout sessions through an API, and get paid in dollars while shoppers pay by Pix, SPEI, ACH, wire, RTP, Argentine bank transfer, or PSE.",{"path":141,"title":142,"description":143},"\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":145,"title":146,"description":147},"\u002Fprompts\u002Fbuild-a-neobank","Build a neobank","One prompt, no questions: your coding agent builds and tests a working neobank on a BlindPay development instance, with KYC, US account details, a Mexican CLABE, Pix deposits, payouts, and instant transfers between users.",{"path":149,"title":150,"description":151},"\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":153,"title":154,"description":155},"\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":157,"title":158,"description":159},"\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":161,"title":162,"description":163},"\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":165,"title":166,"description":167},"\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":169,"title":170,"description":171},"\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":173,"title":174,"description":175},"\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":177,"title":178,"description":179},"\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":126,"title":5,"description":121},{"path":182,"title":183,"description":184},"\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":186,"title":187,"description":188},"\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":190,"title":191,"description":192},"\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":194,"title":195,"description":196},"\u002Fprompts\u002Fintegrate-quotes-fx","Integrate quotes and FX handling","Handle payin, payout, and transfer quotes correctly: expiry windows, currency_type conventions, fees, and displaying rates to users.",{"path":198,"title":199,"description":200},"\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":202,"title":203,"description":204},"\u002Fprompts\u002Fintegrate-blindpay-wallet","Integrate the BlindPay wallet","Hold customer stablecoin balances in BlindPay-custodied wallets: create the wallet, collect payins into it, pay out from it with no signing step.",{"path":206,"title":207,"description":208},"\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":210,"title":211,"description":212},"\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":214,"title":215,"description":216},"\u002Fprompts\u002Fintegrate-invoice-payables","Pay US vendor invoices with payables","Register supplier invoices with line items and the vendor's ACH or wire details, prefill them from the PDF with AI, and settle them from stablecoins through the quote-and-execute flow.",{"path":218,"title":219,"description":220},"\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.",1793903174369]