Docs

Migrate from Stripe

Move a Stripe Connect integration to Zoneless and pay sellers in USDC on Solana.

Zoneless is a drop-in replacement for the Connect side of a Stripe integration. Account creation, Express onboarding, transfers, payouts, and webhooks follow the same API structure, with USDC and Solana wallets in place of fiat and bank accounts.

You can also use Zoneless Checkout and the payments APIs, but you do not have to move customer payments. A common setup is to keep collecting payments with Stripe, convert the money you need for seller payouts to USDC, and fund your Zoneless platform wallet.

1Install the Zoneless SDK

Install @zoneless/node. Keep the Stripe SDK if you still use it to collect customer payments.

Install
npm install @zoneless/node

2Swap the Connect client

Change the import, client name, secret key, and API URL. Your Connect calls keep the same resource names and request shapes.

Use https://api.zoneless.com for Zoneless Cloud, or your own API URL if you self-host. Zoneless IDs use prefixes such as acct_z_, tr_z_, and po_z_.

Before and after
// Before
import Stripe from 'stripe';

const stripe = new Stripe(
  process.env.STRIPE_SECRET_KEY
);

// After
import { Zoneless } from '@zoneless/node';
const zoneless = new Zoneless('sk_live_z_YOUR_API_KEY', 'https://api.zoneless.com');

// The API call stays the same
const account = await zoneless.accounts.create({
  type: 'express',
  country: 'US',
  email: 'seller@example.com',
});

3Rename the connected account context

Requests made on behalf of a connected account need one naming change. Replace the Stripe-Account header with Zoneless-Account. In the Node.js SDK, replace stripeAccount with zonelessAccount. See Connected Accounts for both examples.

Account Links still send sellers through Express onboarding. Instead of adding a bank account or debit card, the seller connects the Solana wallet where they want to receive USDC.

Connected account context
const balance = await zoneless.balance.retrieve({
  zonelessAccount: 'acct_z_1234...',
});

4Movement of seller funds

Moving money to a seller still uses a transfer followed by a payout:

  • Create a transfer to credit the connected account's Zoneless balance.
  • Create a payout on that account to move USDC to the seller's wallet.

Creating a payout does not submit a Solana transaction. The payout stays pending until you call payouts.processAll() or payouts.processBatch() (or build and broadcast). That two-step flow is the same in test and live. Simulated test mode does not need a wallet signature; pass the unsigned transaction through to broadcast. The Payouts API reference covers the endpoints.

5Check the API differences

Review these changes before moving your integration:

USDC instead of fiat

Use usdc instead of fiat currency codes such as usd. Amounts use cents, so 1000 represents 10.00 USDC. If your revenue starts in Stripe or a bank account, follow the platform wallet funding guide. You can use the Top-ups API to track deposits.

Wallets instead of bank accounts

The external_accounts collection contains Solana wallets. Wallet objects use the wa_z_ prefix and expose a wallet_address instead of bank routing and account numbers. See External Wallets.

On-chain payout processing

Your platform signs payout transactions and submits them to Solana. A payout remains pending until you process it. See Payouts for the SDK helpers and custom signing endpoints.

Payout timing

Zoneless payouts default to instant. Once submitted, Solana transactions usually confirm within seconds. Payout statuses and failure fields are documented in the Payout object.

Webhook signatures

Replace stripe.webhooks with zoneless.webhooks, and read the signature from the Zoneless-Signature header. The raw request body and endpoint signing secret are used in the same way. See Webhooks for a complete Express handler.

Cloud or self-hosted

Zoneless Cloud uses https://api.zoneless.com. If you self-host Zoneless, use your instance URL when you create the SDK client and when you make direct API requests.

Verify webhook signatures
// Before:
// const event = stripe.webhooks.constructEvent(
//   req.rawBody,
//   req.headers['stripe-signature'],
//   webhookSecret
// );

// After:
const event = zoneless.webhooks.constructEvent(
  req.rawBody,
  req.headers['zoneless-signature'],
  webhookSecret
);

6Test the full seller flow

Before switching production traffic, run through the same path a seller will take:

  • Create a connected account and Account Link.
  • Complete onboarding and connect a Solana wallet.
  • Transfer USDC to the connected account balance.
  • Create and process a payout.
  • Confirm that your webhook handler accepts Zoneless events.

The API quickstart walks through this flow with working Node.js and cURL examples.

Next steps