Skip to Content
PaymentsQuickstart

Quickstart

Start accepting recurring stablecoin payments in just a few minutes.

Prerequisites

Before you begin, you’ll need:

  1. An Exodus Business account - Contact [email protected] to create your account and complete the onboarding process
  2. API credentials - Once your account is approved, you’ll find your API keys in your dashboard settings
  3. Settlement wallet - Configure the wallet address where you’ll receive stablecoin payments
  4. Webhook secret - Configure your webhook endpoint URL in the dashboard to receive your webhook signing secret
  5. A server-side environment - Node.js, Python, Ruby, or any language that can make HTTP requests
🏢

New to Exodus Business? Our team will guide you through the onboarding process, including KYB verification and account configuration. Reach out to [email protected] to get started.

⚠️

Never expose your API key in client-side code. Always make API calls from your server.

Create Your First Subscription

Create a subscription to start accepting recurring stablecoin payments:

server.js
const response = await fetch('https://checkout.exodus.com/subscriptions', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk_test_xxxxxxxxxxxxxxxx',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    amount: 2999, // $29.99 in cents
    currency: 'USD',
    interval: 'month',
    description: 'Pro Plan',
    success_url: 'https://yoursite.com/success',
    cancel_url: 'https://yoursite.com/cancel',
  }),
});
 
const subscription = await response.json();
 
// Redirect your customer to subscription.checkout_url
console.log(subscription.checkout_url);

Redirect the Customer

Send your customer to the checkout_url returned in the response:

client.js
// After receiving the checkout URL from your server
window.location.href = checkoutUrl;

The customer will:

  1. Select their preferred stablecoin (USDC, USDT, etc.)
  2. Connect their wallet (Exodus, Grateful, MetaMask, Phantom, etc.)
  3. Authorize recurring payments from their wallet
  4. Be redirected to your success_url once the subscription is activated

Handle Webhooks

Set up a webhook endpoint to receive subscription events:

webhooks.js
import express from 'express';
import crypto from 'crypto';
 
const app = express();
app.use(express.json());
 
app.post('/webhooks/payments', (req, res) => {
  // Verify the webhook signature
  const signature = req.headers['x-signature'];
  const expectedSignature = crypto
    .createHmac('sha256', process.env.WEBHOOK_SECRET)
    .update(JSON.stringify(req.body))
    .digest('hex');
 
  if (signature !== expectedSignature) {
    return res.status(401).send('Invalid signature');
  }
 
  // Handle the event
  const event = req.body;
 
  switch (event.type) {
    case 'subscription.created':
      console.log('Subscription started:', event.data.object.id);
      // Grant access to your service
      break;
    case 'subscription.past_due':
      console.log('Payment failed:', event.data.object.id);
      // Notify the customer, pause access, etc.
      break;
    case 'subscription.cancelled':
      console.log('Subscription cancelled:', event.data.object.id);
      // Revoke access at the end of the billing period
      break;
  }
 
  res.status(200).send('OK');
});
 
app.listen(3000);

Test Your Integration

Use test mode to verify your integration works:

  1. Use your test API key (sk_test_...)
  2. Create a test subscription
  3. Complete the subscription flow using a testnet wallet
  4. Verify your webhook receives the subscription.created event

Test mode transactions use testnet networks, so no real funds are transferred.

Go Live

When you’re ready to accept real payments:

  1. Switch to live API keys - Replace sk_test_ keys with sk_live_ keys from your dashboard
  2. Configure your mainnet settlement wallet - Ensure your production wallet address is set
  3. Update webhook endpoints - Ensure your production webhook URL is configured
  4. Verify your integration - Run through the complete payment flow one more time
🚨

Important: Always test thoroughly in test mode before processing live transactions.

Next Steps

Now that you’ve created your first subscription:

Start building

XO

Request Demo

Schedule a call with our team

Select a product
Arrow right

Start building
Grateful

Contact Us

We're here to help