[{"data":1,"prerenderedAt":174},["ShallowReactive",2],{"content-\u002Fprompts\u002Fmigrate-from-crossmint":3,"prompts-category-migrations":108},{"id":4,"title":5,"author":6,"body":7,"categories":6,"category":90,"categoryType":6,"date":91,"description":92,"extension":93,"faq":6,"howto":6,"isBlog":94,"isChangelog":94,"meta":95,"navigation":96,"path":97,"pillar":94,"products":98,"rawbody":104,"seo":105,"stem":106,"thumbnail":6,"updated":6,"__hash__":107},"content\u002Fprompts\u002Fmigrate-from-crossmint.md","Migrate from Crossmint to BlindPay",null,{"type":8,"value":9,"toc":84},"minimark",[10,14,19,30,34,47,51],[11,12,13],"p",{},"Paste this prompt into your coding agent to port the payout and offramp leg of a Crossmint (docs.crossmint.com) integration to BlindPay, keeping Crossmint wallets in place.",[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 migrating the stablecoin-to-fiat leg of my application from Crossmint's offramp\u002Fpayout surface to the BlindPay API. Crossmint wallets, checkout, or stablecoin orchestration may stay in place; only money movement to fiat is moving.\n\nBefore writing code, read these sources and follow them over any prior knowledge:\n- https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fllms.txt (read the quickstarts, customers, bank accounts, wallets, quotes, and webhooks pages)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nDo the migration in this order:\n1. Inventory my Crossmint usage from the codebase: every call into Crossmint's offramp API (KYC\u002Fbring-your-own-KYC, bank accounts, payout requests), stablecoin orchestration pay-ins, wallet transfer webhooks (wallets.transfer.in, wallets.transfer.out), and payment\u002Fcheckout webhooks, plus every stored Crossmint ID. Confirm exact endpoint names and payload shapes in the Crossmint docs rather than assuming, since offramp API routes are not fully public. Derive the mapping from what we actually use, roughly: Crossmint offramp customers and KYC map to BlindPay customers (re_) with KYC\u002FKYB; Crossmint bank accounts map to BlindPay bank accounts (ba_) with rail-specific types (Pix, SPEI, SEPA, ACH, wire); Crossmint payout requests map to a BlindPay quote (qu_) followed by an executed payout (po_); if Crossmint receiving\u002Fdeposit addresses are in use, map those to BlindPay virtual accounts (va_) or offramp wallets. Write the mapping table into a migration report and flag anything with no direct equivalent instead of guessing.\n2. Decide what stays on Crossmint: if funds keep living in Crossmint wallets, register each wallet with BlindPay as an external wallet through the sign-message challenge flow and store the resulting bw_ ID, so BlindPay can pull from or verify ownership of the same wallet Crossmint already manages.\n3. Re-onboard customers on BlindPay: terms of service, create customer, KYC\u002FKYB via document upload, driven by customer.* webhooks. KYC does not transfer between providers, so plan for re-verification and sequence it before the cutover so approved customers are ready when we switch.\n4. Rebuild the payout leg on BlindPay's explicit two-step model: request a quote, then execute the payout against it via POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayouts\u002Fevm before expires_at (about 5 minutes). Store qu_ and po_ IDs alongside the legacy Crossmint order IDs during the transition.\n5. Port status handling to BlindPay's Svix-signed webhooks (svix-id, svix-timestamp, svix-signature verified against whsec_ with raw-body HMAC) in place of Crossmint's offramp order and wallet transfer webhooks, with svix-id dedup.\n6. Cut over per corridor behind a feature flag: dual-run with new payouts on BlindPay while Crossmint settles in-flight orders, keep both webhook handlers live during the window, and only retire the Crossmint payout path once one full dual-run settlement cycle has cleared on BlindPay.\n\nConstraints:\n- Develop against a BlindPay development instance (USDB on testnets, KYC auto-approves, sentinel amounts $666.00 forced failed and $777.00 forced refunded for testing) before moving to mainnets.\n- Amounts are integer minor units; API keys stay server-side.\n- Produce a written migration report before changing code: the mapping table, gaps, and the re-KYC plan.\n\nDeliverables: the migration report, re-onboarding script, the BlindPay client and payout\u002Fquote code paths behind a flag, external wallet registration for any Crossmint wallets that stay, webhook handlers, and a cutover checklist.\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",{},"Point the agent at your codebase so it inventories real Crossmint offramp and webhook usage rather than assuming undocumented endpoints.",[38,42,43],{},"Review the migration report, especially which wallets stay on Crossmint and the re-KYC sequencing, before approving code changes.",[38,45,46],{},"Dual-run at least one full settlement cycle per corridor before retiring the Crossmint payout path.",[15,48,50],{"id":49},"related-docs","Related docs",[52,53,54,63,70,77],"ul",{},[38,55,56],{},[57,58,62],"a",{"href":59,"rel":60},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fintroduction",[61],"nofollow","Introduction",[38,64,65],{},[57,66,69],{"href":67,"rel":68},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Flearn\u002Fcustomers",[61],"Customers",[38,71,72],{},[57,73,76],{"href":74,"rel":75},"https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fofframp-wallets",[61],"Offramp wallets",[38,78,79],{},[57,80,83],{"href":81,"rel":82},"https:\u002F\u002Fdocs.crossmint.com\u002Fofframp\u002Foverview",[61],"Crossmint offramp overview",{"title":26,"searchDepth":85,"depth":85,"links":86},2,[87,88,89],{"id":17,"depth":85,"text":18},{"id":32,"depth":85,"text":33},{"id":49,"depth":85,"text":50},"migrations","2026-08-26","Move the stablecoin-to-fiat leg of a Crossmint integration to BlindPay while Crossmint keeps handling wallets, checkout, or orchestration.","md",false,{},true,"\u002Fprompts\u002Fmigrate-from-crossmint",[99,100,101,102,103],"payouts","payins","quotes","compliance","webhooks","---\ntitle: \"Migrate from Crossmint to BlindPay\"\ndescription: \"Move the stablecoin-to-fiat leg of a Crossmint integration to BlindPay while Crossmint keeps handling wallets, checkout, or orchestration.\"\ndate: \"2026-08-26\"\ncategory: \"migrations\"\nproducts: [\"payouts\", \"payins\", \"quotes\", \"compliance\", \"webhooks\"]\n---\n\nPaste this prompt into your coding agent to port the payout and offramp leg of a Crossmint (docs.crossmint.com) integration to BlindPay, keeping Crossmint wallets in place.\n\n## Prompt\n\n```text\nYou are migrating the stablecoin-to-fiat leg of my application from Crossmint's offramp\u002Fpayout surface to the BlindPay API. Crossmint wallets, checkout, or stablecoin orchestration may stay in place; only money movement to fiat is moving.\n\nBefore writing code, read these sources and follow them over any prior knowledge:\n- https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fllms.txt (read the quickstarts, customers, bank accounts, wallets, quotes, and webhooks pages)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nDo the migration in this order:\n1. Inventory my Crossmint usage from the codebase: every call into Crossmint's offramp API (KYC\u002Fbring-your-own-KYC, bank accounts, payout requests), stablecoin orchestration pay-ins, wallet transfer webhooks (wallets.transfer.in, wallets.transfer.out), and payment\u002Fcheckout webhooks, plus every stored Crossmint ID. Confirm exact endpoint names and payload shapes in the Crossmint docs rather than assuming, since offramp API routes are not fully public. Derive the mapping from what we actually use, roughly: Crossmint offramp customers and KYC map to BlindPay customers (re_) with KYC\u002FKYB; Crossmint bank accounts map to BlindPay bank accounts (ba_) with rail-specific types (Pix, SPEI, SEPA, ACH, wire); Crossmint payout requests map to a BlindPay quote (qu_) followed by an executed payout (po_); if Crossmint receiving\u002Fdeposit addresses are in use, map those to BlindPay virtual accounts (va_) or offramp wallets. Write the mapping table into a migration report and flag anything with no direct equivalent instead of guessing.\n2. Decide what stays on Crossmint: if funds keep living in Crossmint wallets, register each wallet with BlindPay as an external wallet through the sign-message challenge flow and store the resulting bw_ ID, so BlindPay can pull from or verify ownership of the same wallet Crossmint already manages.\n3. Re-onboard customers on BlindPay: terms of service, create customer, KYC\u002FKYB via document upload, driven by customer.* webhooks. KYC does not transfer between providers, so plan for re-verification and sequence it before the cutover so approved customers are ready when we switch.\n4. Rebuild the payout leg on BlindPay's explicit two-step model: request a quote, then execute the payout against it via POST \u002Fv1\u002Finstances\u002F{instance_id}\u002Fpayouts\u002Fevm before expires_at (about 5 minutes). Store qu_ and po_ IDs alongside the legacy Crossmint order IDs during the transition.\n5. Port status handling to BlindPay's Svix-signed webhooks (svix-id, svix-timestamp, svix-signature verified against whsec_ with raw-body HMAC) in place of Crossmint's offramp order and wallet transfer webhooks, with svix-id dedup.\n6. Cut over per corridor behind a feature flag: dual-run with new payouts on BlindPay while Crossmint settles in-flight orders, keep both webhook handlers live during the window, and only retire the Crossmint payout path once one full dual-run settlement cycle has cleared on BlindPay.\n\nConstraints:\n- Develop against a BlindPay development instance (USDB on testnets, KYC auto-approves, sentinel amounts $666.00 forced failed and $777.00 forced refunded for testing) before moving to mainnets.\n- Amounts are integer minor units; API keys stay server-side.\n- Produce a written migration report before changing code: the mapping table, gaps, and the re-KYC plan.\n\nDeliverables: the migration report, re-onboarding script, the BlindPay client and payout\u002Fquote code paths behind a flag, external wallet registration for any Crossmint wallets that stay, webhook handlers, and a cutover checklist.\n```\n\n## How to use\n\n1. Point the agent at your codebase so it inventories real Crossmint offramp and webhook usage rather than assuming undocumented endpoints.\n2. Review the migration report, especially which wallets stay on Crossmint and the re-KYC sequencing, before approving code changes.\n3. Dual-run at least one full settlement cycle per corridor before retiring the Crossmint payout path.\n\n## Related docs\n\n- [Introduction](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fintroduction)\n- [Customers](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Flearn\u002Fcustomers)\n- [Offramp wallets](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fofframp-wallets)\n- [Crossmint offramp overview](https:\u002F\u002Fdocs.crossmint.com\u002Fofframp\u002Foverview)\n",{"title":5,"description":92},"prompts\u002Fmigrate-from-crossmint","7plHw6zaH02pH7pBlNb9CDx3QGY1AIOn1pkmMpk2bWM",[109,113,117,121,125,129,133,137,138,142,146,150,154,158,162,166,170],{"path":110,"title":111,"description":112},"\u002Fprompts\u002Fmigrate-from-anchorage","Migrate from Anchorage Digital to BlindPay","Keep Anchorage Digital for custody and move the stablecoin-to-fiat leg to BlindPay: map transfers, withdrawals, and settlement events to BlindPay quotes, payouts, and webhooks.",{"path":114,"title":115,"description":116},"\u002Fprompts\u002Fmigrate-from-bitgo","Migrate from BitGo to BlindPay","Move the stablecoin-to-fiat leg of a BitGo integration to BlindPay: map wallets, transfers, and settlement webhooks to BlindPay customers, quotes, payouts, and Svix events.",{"path":118,"title":119,"description":120},"\u002Fprompts\u002Fmigrate-from-bridge","Migrate from Bridge to BlindPay","Move an existing Bridge integration to the BlindPay API: map customers, external accounts, liquidation addresses, and transfers to their BlindPay equivalents.",{"path":122,"title":123,"description":124},"\u002Fprompts\u002Fmigrate-from-circle","Migrate from Circle to BlindPay","Move payouts and fiat on\u002Foff ramps from Circle Mint or the Circle Payments Network to BlindPay's quote-and-execute API with local rails.",{"path":126,"title":127,"description":128},"\u002Fprompts\u002Fmigrate-from-cobo","Migrate from Cobo to BlindPay","Move an existing Cobo Payments integration to the BlindPay API: keep Cobo for custody if you want, and replace the stablecoin-to-fiat leg with BlindPay's customers, quotes, and payouts.",{"path":130,"title":131,"description":132},"\u002Fprompts\u002Fmigrate-from-coinbase-cdp","Migrate from Coinbase CDP to BlindPay","Move the stablecoin-to-fiat offramp leg of a Coinbase Developer Platform integration to BlindPay: add Pix, SPEI, SEPA, ACH, and wire payouts while CDP wallets keep custody.",{"path":134,"title":135,"description":136},"\u002Fprompts\u002Fmigrate-from-conduit","Migrate from Conduit to BlindPay","Move a Conduit cross-border payments integration to BlindPay: counterparties, corridors, and settlement tracking on the quote-and-execute model.",{"path":97,"title":5,"description":92},{"path":139,"title":140,"description":141},"\u002Fprompts\u002Fmigrate-from-dfns","Migrate from Dfns to BlindPay","Keep Dfns for MPC wallet custody and move the stablecoin-to-fiat leg to BlindPay: map transfers and exchange withdrawals to quotes, payouts, and registered external wallets.",{"path":143,"title":144,"description":145},"\u002Fprompts\u002Fmigrate-from-dynamic","Migrate from Dynamic to BlindPay","Keep Dynamic for embedded and server wallets, move the stablecoin-to-fiat offramp leg to BlindPay: register the Dynamic wallet, quote and execute payouts, and verify webhooks.",{"path":147,"title":148,"description":149},"\u002Fprompts\u002Fmigrate-from-fern","Migrate from Fern to BlindPay","Move a Fern stablecoin integration to BlindPay: customers, wallets, on\u002Foff ramps, and webhook-driven settlement on the quote-and-execute model.",{"path":151,"title":152,"description":153},"\u002Fprompts\u002Fmigrate-from-fireblocks","Migrate from Fireblocks to BlindPay","Move the stablecoin-to-fiat payout leg of a Fireblocks integration to BlindPay: map payout instruction sets, fiat accounts, and webhooks while Fireblocks stays as custodian.",{"path":155,"title":156,"description":157},"\u002Fprompts\u002Fmigrate-from-privy","Migrate from Privy to BlindPay","Keep Privy for embedded and server wallets, move the stablecoin-to-fiat offramp leg to BlindPay: register the Privy wallet, quote and execute payouts, and verify webhooks.",{"path":159,"title":160,"description":161},"\u002Fprompts\u002Fmigrate-from-swift-wires","Migrate from SWIFT wires to stablecoin payouts","Replace multi-day international wires with same-day stablecoin settlement over local rails, keeping SWIFT as a fallback where you still need it.",{"path":163,"title":164,"description":165},"\u002Fprompts\u002Fmigrate-from-turnkey","Migrate from Turnkey to BlindPay","Keep Turnkey for wallets and signing, and move the stablecoin-to-fiat offramp leg of a Turnkey-based product to BlindPay: map payout accounts, quotes, and webhooks.",{"path":167,"title":168,"description":169},"\u002Fprompts\u002Fmigrate-from-utila","Migrate from Utila to BlindPay","Keep Utila as custodian and signer, and route the stablecoin-to-fiat leg through BlindPay: map vaults, wallets, transactions, and webhooks to their BlindPay equivalents.",{"path":171,"title":172,"description":173},"\u002Fprompts\u002Fmigrate-from-manual-payouts","Migrate from manual bank payouts to the API","Turn a spreadsheet-and-bank-portal payout operation into an automated, webhook-driven API flow with an auditable state machine.",1787868850306]