Migrate from Stripe
Zoneless is designed as a drop-in replacement for Stripe Connect. The SDK mirrors Stripe's API surface, so migrating is mostly swapping the import and pointing at your self-hosted instance.
Swap the SDK
Replace the Stripe library with @zoneless/node and pass the base URL of your Zoneless instance as the second argument. The rest of your integration code stays the same.
// import Stripe from 'stripe';
// const client = new Stripe('sk_live_...');
import { Zoneless } from '@zoneless/node';
const zoneless = new Zoneless('sk_live_z_YOUR_API_KEY', 'https://api.yourdomain.com');
// Same API you already know
const account = await zoneless.accounts.create({
type: 'express',
country: 'US',
email: 'seller@example.com',
});
await zoneless.transfers.create({
amount: 10000,
currency: 'usdc',
destination: account.id,
});
No charges — just transfers and payouts
Stripe Connect's separate charges and transfers model couples payment collection with fund movement. Zoneless removes the charges side entirely — your platform collects payments however it likes and uses the Zoneless API only to move funds to sellers.
The flow is straightforward: create a transfer to credit a connected account's balance, then create a payout to send USDC to their wallet on-chain.
Key differences
The API is intentionally close to Stripe's, but there are a handful of important differences to be aware of. All differences are highlighted in context throughout the docs — below is a summary of the ones that matter most.
USDC instead of fiat
Every amount field is denominated in USDC (the smallest unit is 1 = $0.01). Anywhere Stripe uses ISO currency codes like usd, Zoneless uses usdc.
Wallets instead of bank accounts
Stripe's external accounts are bank accounts and debit cards. In Zoneless, they're Solana wallets. The external_accounts field on an account contains wallet objects (wa_z_ prefix) with a wallet_address instead of routing and account numbers.
Payouts require on-chain processing
Stripe payouts are processed automatically via the banking system. Zoneless payouts must be explicitly signed and broadcast to the Solana network. Use the SDK's processAll() method, or the /v1/payouts/build and /v1/payouts/broadcast endpoints to build, sign, and submit the transaction yourself.
Instant settlement
Stripe bank payouts take 1–2 business days (or longer for non-US accounts). Solana transactions confirm in seconds, so Zoneless payouts default to instant.
Header and SDK naming
The Stripe-Account header becomes Zoneless-Account, and the SDK option stripeAccount becomes zonelessAccount.
Self-hosted
There's no hosted service to call — you run your own Zoneless instance. The SDK takes a base URL as its second argument so it knows where to send requests.