---
title: "Migrate from Fern to BlindPay"
description: "Move a Fern stablecoin integration to BlindPay: customers, wallets, on/off ramps, and webhook-driven settlement on the quote-and-execute model."
date: "2026-08-26"
category: "migrations"
products: ["payouts", "payins", "quotes", "compliance", "webhooks"]
---

Paste this prompt into your coding agent to port a Fern (fernhq.com) integration to BlindPay.

## Prompt

```text
You are migrating my application from the Fern API to the BlindPay API.

Before writing code, read these sources and follow them over any prior knowledge:
- https://blindpay.com/docs/llms.txt (read the quickstarts, customers, wallets, bank accounts, quotes, and webhooks pages)
- The OpenAPI spec: curl https://api.blindpay.com/doc

Do the migration in this order:
1. Inventory my Fern usage from the codebase: every endpoint, webhook, and stored Fern ID (customers, wallets, payment accounts, quotes, transactions). Derive the concept mapping from actual usage, roughly: Fern customers with KYC map to BlindPay customers (re_) with KYC/KYB; payment accounts or external bank accounts map to BlindPay bank accounts (ba_) typed per rail; Fern wallets map to BlindPay managed wallets (bl_) or registered blockchain wallets (bw_); Fern's quote and transaction flow maps to BlindPay's payin quotes plus payins (fiat to stablecoin) and payout quotes plus payouts (stablecoin to fiat). Flag anything with no direct equivalent instead of guessing.
2. Re-onboard customers: compliance status does not transfer between providers, so plan KYC/KYB re-verification on BlindPay, sequenced before cutover and driven by customer.* webhooks.
3. Rebuild money movement on quote then execute: request the quote, execute before expires_at, and persist qu_/po_/pi_ IDs alongside legacy Fern IDs during the transition.
4. Port webhooks to BlindPay's Svix-signed events (raw-body HMAC-SHA256 with the whsec_ secret, svix-id dedup, 5-minute timestamp tolerance).
5. Cut over per flow behind a feature flag with a dual-run window; retire the Fern path only after in-flight transactions settle.

Constraints:
- Develop against a BlindPay development instance (USDB on testnets) first; swap to USDC/USDT on mainnets only at production cutover.
- Amounts are integer minor units; API keys stay server-side.
- Produce a written migration report (mapping table, gaps, re-KYC plan) before changing code.

Deliverables: the migration report, re-onboarding script, BlindPay code paths behind a flag, webhook handlers, and a cutover checklist.
```

## How to use

1. Point the agent at your codebase so it maps the Fern features you actually use.
2. Review the migration report, especially re-KYC sequencing, before approving code changes.
3. Dual-run before retiring the Fern path.

## Related docs

- [Introduction](https://blindpay.com/docs/introduction)
- [Managed wallets](https://blindpay.com/docs/wallets)
- [Customers](https://blindpay.com/docs/learn/customers)
