[{"data":1,"prerenderedAt":173},["ShallowReactive",2],{"content-\u002Fprompts\u002Fmigrate-from-coinbase-cdp":3,"prompts-category-migrations":107},{"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":103,"seo":104,"stem":105,"thumbnail":6,"updated":6,"__hash__":106},"content\u002Fprompts\u002Fmigrate-from-coinbase-cdp.md","Migrate from Coinbase CDP 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 move the stablecoin-to-fiat offramp leg of a Coinbase Developer Platform (docs.cdp.coinbase.com) integration to BlindPay, keeping CDP wallets for custody where you want them.",[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 my application's stablecoin-to-fiat offramp leg from Coinbase Developer Platform (CDP) to BlindPay. CDP wallets (or CDP Server Wallets) can stay in place for custody and signing; this migration targets only the cash-out surface: CDP's Offramp session tokens, hosted sell URLs, and offramp webhooks.\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, quotes, payouts, offramp wallets, and webhooks pages)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nDo the migration in this order:\n1. Inventory my CDP Offramp usage from the codebase: the session token call (POST to CDP's onramp\u002Fv1\u002Ftoken endpoint), the hosted sell URL construction (pay.coinbase.com sell flow with sessionToken, partnerUserRef, defaultCashoutMethod), the sell quote and transaction-status calls, offramp webhook subscriptions, and any stored CDP identifiers (partnerUserRef, transactionId, wallet addresses). Confirm exact endpoint paths and payload fields against the CDP docs rather than assuming. Derive the concept mapping from what we actually use, roughly: CDP's hosted sell flow (session token plus sell URL) maps to a BlindPay quote (qu_) followed by an executed payout (po_); CDP's ACH\u002FPayPal\u002FCoinbase-balance cashout methods map to BlindPay bank accounts (ba_) but BlindPay also covers Pix, SPEI, SEPA, and wire, which CDP Offramp does not support; CDP wallets or CDP Server Wallets have no BlindPay equivalent and can stay as the custody and signing layer. Flag anything with no direct equivalent instead of guessing.\n2. Onboard payees on BlindPay directly: create customer, KYC\u002FKYB via document upload, add rail-specific bank accounts (Pix, SPEI, SEPA, ACH, wire), driven by webhooks. CDP Offramp lets Coinbase's own KYC on the end user's Coinbase account stand in for this, so this is new work, not a data migration; sequence it before cutover so payees are ready when we switch. Store the resulting re_ and ba_ IDs next to any legacy CDP identifiers (partnerUserRef, wallet addresses).\n3. Rebuild the cash-out leg on BlindPay's explicit two-step model: request a quote, then execute the payout before expires_at (about 5 minutes), replacing CDP's session-token-plus-hosted-sell-URL flow. If funds keep custody in a CDP wallet, register that CDP-controlled address with BlindPay through the external-wallet sign-message challenge (bw_ ID) so BlindPay can source funds from it without moving custody. Store qu_, po_, and bw_ IDs alongside any legacy CDP transaction references.\n4. Port webhooks to BlindPay's Svix-signed events (customer.*, payout.*, wallet.inbound), verifying svix-id, svix-timestamp, and svix-signature against the raw request body with whsec_ and deduping on svix-id, replacing CDP's offramp.transaction.* webhook verification. Confirm every CDP offramp event type we currently consume has a BlindPay equivalent before cutting a corridor over.\n5. Cut over per payout corridor behind a feature flag: launch Pix, SPEI, SEPA, and wire on BlindPay immediately since CDP Offramp has no equivalent for them, and dual-run the ACH corridor with new payouts on BlindPay while CDP Offramp handles in-flight items. Keep both webhook handlers live during the ACH dual-run window and only retire the CDP Offramp path for that corridor once a full settlement cycle has completed and been verified against expected outcomes.\n\nConstraints:\n- Develop against a BlindPay development instance (USDB on testnets, KYC auto-approves) first, and exercise the $666.00 forced-failed and $777.00 forced-refunded sentinel amounts before touching production traffic.\n- Amounts are integer minor units; API keys stay server-side.\n- Produce a written migration report before changing code: the mapping table, the corridors CDP Offramp never covered, gaps, and the payee-onboarding plan.\n\nDeliverables: the migration report, the payee onboarding script, the BlindPay client and quote\u002Fpayout code paths behind a flag, the external-wallet registration flow if custody stays on a CDP wallet, webhook handlers, and a per-corridor 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 CDP Offramp usage rather than assuming; verify any CDP endpoint or webhook detail it names against docs.cdp.coinbase.com.",[38,42,43],{},"Review the migration report, especially which corridors CDP Offramp never covered versus which one (ACH) needs a dual-run, before approving code changes.",[38,45,46],{},"Ship the LATAM\u002FEU corridors on BlindPay first since there is nothing to cut over there, then dual-run at least one full ACH settlement cycle, including the sentinel failure and refund cases, before retiring CDP Offramp for that corridor.",[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\u002Fpayout-quotes",[61],"Payout quotes",[38,78,79],{},[57,80,83],{"href":81,"rel":82},"https:\u002F\u002Fdocs.cdp.coinbase.com\u002F",[61],"Coinbase Developer Platform docs",{"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 offramp leg of a Coinbase Developer Platform integration to BlindPay: add Pix, SPEI, SEPA, ACH, and wire payouts while CDP wallets keep custody.","md",false,{},true,"\u002Fprompts\u002Fmigrate-from-coinbase-cdp",[99,100,101,102],"payouts","quotes","compliance","webhooks","---\ntitle: \"Migrate from Coinbase CDP to BlindPay\"\ndescription: \"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.\"\ndate: \"2026-08-26\"\ncategory: \"migrations\"\nproducts: [\"payouts\", \"quotes\", \"compliance\", \"webhooks\"]\n---\n\nPaste this prompt into your coding agent to move the stablecoin-to-fiat offramp leg of a Coinbase Developer Platform (docs.cdp.coinbase.com) integration to BlindPay, keeping CDP wallets for custody where you want them.\n\n## Prompt\n\n```text\nYou are migrating my application's stablecoin-to-fiat offramp leg from Coinbase Developer Platform (CDP) to BlindPay. CDP wallets (or CDP Server Wallets) can stay in place for custody and signing; this migration targets only the cash-out surface: CDP's Offramp session tokens, hosted sell URLs, and offramp webhooks.\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, quotes, payouts, offramp wallets, and webhooks pages)\n- The OpenAPI spec: curl https:\u002F\u002Fapi.blindpay.com\u002Fdoc\n\nDo the migration in this order:\n1. Inventory my CDP Offramp usage from the codebase: the session token call (POST to CDP's onramp\u002Fv1\u002Ftoken endpoint), the hosted sell URL construction (pay.coinbase.com sell flow with sessionToken, partnerUserRef, defaultCashoutMethod), the sell quote and transaction-status calls, offramp webhook subscriptions, and any stored CDP identifiers (partnerUserRef, transactionId, wallet addresses). Confirm exact endpoint paths and payload fields against the CDP docs rather than assuming. Derive the concept mapping from what we actually use, roughly: CDP's hosted sell flow (session token plus sell URL) maps to a BlindPay quote (qu_) followed by an executed payout (po_); CDP's ACH\u002FPayPal\u002FCoinbase-balance cashout methods map to BlindPay bank accounts (ba_) but BlindPay also covers Pix, SPEI, SEPA, and wire, which CDP Offramp does not support; CDP wallets or CDP Server Wallets have no BlindPay equivalent and can stay as the custody and signing layer. Flag anything with no direct equivalent instead of guessing.\n2. Onboard payees on BlindPay directly: create customer, KYC\u002FKYB via document upload, add rail-specific bank accounts (Pix, SPEI, SEPA, ACH, wire), driven by webhooks. CDP Offramp lets Coinbase's own KYC on the end user's Coinbase account stand in for this, so this is new work, not a data migration; sequence it before cutover so payees are ready when we switch. Store the resulting re_ and ba_ IDs next to any legacy CDP identifiers (partnerUserRef, wallet addresses).\n3. Rebuild the cash-out leg on BlindPay's explicit two-step model: request a quote, then execute the payout before expires_at (about 5 minutes), replacing CDP's session-token-plus-hosted-sell-URL flow. If funds keep custody in a CDP wallet, register that CDP-controlled address with BlindPay through the external-wallet sign-message challenge (bw_ ID) so BlindPay can source funds from it without moving custody. Store qu_, po_, and bw_ IDs alongside any legacy CDP transaction references.\n4. Port webhooks to BlindPay's Svix-signed events (customer.*, payout.*, wallet.inbound), verifying svix-id, svix-timestamp, and svix-signature against the raw request body with whsec_ and deduping on svix-id, replacing CDP's offramp.transaction.* webhook verification. Confirm every CDP offramp event type we currently consume has a BlindPay equivalent before cutting a corridor over.\n5. Cut over per payout corridor behind a feature flag: launch Pix, SPEI, SEPA, and wire on BlindPay immediately since CDP Offramp has no equivalent for them, and dual-run the ACH corridor with new payouts on BlindPay while CDP Offramp handles in-flight items. Keep both webhook handlers live during the ACH dual-run window and only retire the CDP Offramp path for that corridor once a full settlement cycle has completed and been verified against expected outcomes.\n\nConstraints:\n- Develop against a BlindPay development instance (USDB on testnets, KYC auto-approves) first, and exercise the $666.00 forced-failed and $777.00 forced-refunded sentinel amounts before touching production traffic.\n- Amounts are integer minor units; API keys stay server-side.\n- Produce a written migration report before changing code: the mapping table, the corridors CDP Offramp never covered, gaps, and the payee-onboarding plan.\n\nDeliverables: the migration report, the payee onboarding script, the BlindPay client and quote\u002Fpayout code paths behind a flag, the external-wallet registration flow if custody stays on a CDP wallet, webhook handlers, and a per-corridor cutover checklist.\n```\n\n## How to use\n\n1. Point the agent at your codebase so it inventories real CDP Offramp usage rather than assuming; verify any CDP endpoint or webhook detail it names against docs.cdp.coinbase.com.\n2. Review the migration report, especially which corridors CDP Offramp never covered versus which one (ACH) needs a dual-run, before approving code changes.\n3. Ship the LATAM\u002FEU corridors on BlindPay first since there is nothing to cut over there, then dual-run at least one full ACH settlement cycle, including the sentinel failure and refund cases, before retiring CDP Offramp for that corridor.\n\n## Related docs\n\n- [Introduction](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fintroduction)\n- [Customers](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Flearn\u002Fcustomers)\n- [Payout quotes](https:\u002F\u002Fblindpay.com\u002Fdocs\u002Fpayout-quotes)\n- [Coinbase Developer Platform docs](https:\u002F\u002Fdocs.cdp.coinbase.com\u002F)\n",{"title":5,"description":92},"prompts\u002Fmigrate-from-coinbase-cdp","Fv8reoArmRa5d0CucqpKPKcp2ao5O3radmX1Vw0iXaM",[108,112,116,120,124,128,129,133,137,141,145,149,153,157,161,165,169],{"path":109,"title":110,"description":111},"\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":113,"title":114,"description":115},"\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":117,"title":118,"description":119},"\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":121,"title":122,"description":123},"\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":125,"title":126,"description":127},"\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":97,"title":5,"description":92},{"path":130,"title":131,"description":132},"\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":134,"title":135,"description":136},"\u002Fprompts\u002Fmigrate-from-crossmint","Migrate from Crossmint to BlindPay","Move the stablecoin-to-fiat leg of a Crossmint integration to BlindPay while Crossmint keeps handling wallets, checkout, or orchestration.",{"path":138,"title":139,"description":140},"\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":142,"title":143,"description":144},"\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":146,"title":147,"description":148},"\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":150,"title":151,"description":152},"\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":154,"title":155,"description":156},"\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":158,"title":159,"description":160},"\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":162,"title":163,"description":164},"\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":166,"title":167,"description":168},"\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":170,"title":171,"description":172},"\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.",1787868849823]