Gumroad Integration

Replace Gumroad's file hosting with Continuata's advanced download system while keeping Gumroad for payments and marketing.

Integration Method

Gumroad integration uses the Continuata API to generate download tokens after each sale. Use Gumroad's webhook (called a "ping") to trigger token creation via your own server or a serverless function.

Integration Strategy

Keep Gumroad for its excellent payment processing and affiliate system, but deliver files through Continuata for better performance and features.

✓ Keep Using Gumroad For

  • • Payment processing
  • • Affiliate program
  • • Marketing tools
  • • Customer management
  • • Analytics dashboard

✓ Switch to Continuata For

  • • File hosting and delivery
  • • Download experience
  • • Resume functionality
  • • Delta updates
  • • No bandwidth fees

Setup Process

Step 1: Upload Products to Continuata

  1. Upload your digital products to Continuata
  2. Note the Product IDs for each item
  3. Ensure all products are published and have active versions

Step 2: Configure Gumroad Ping

Gumroad can send a "ping" (webhook) to a URL you specify whenever a sale occurs. You'll point this at your own server or a serverless function that calls the Continuata API to create a download token.

  1. In Gumroad, go to Settings → Advanced → Ping
  2. Set the ping URL to your serverless function endpoint
  3. Select "Sale" events

Step 3: Create a Serverless Handler

Your handler receives the Gumroad ping, extracts the product and customer details, and calls the Continuata API to create a download token:

// Example: Cloudflare Worker or Node.js handler
export default {
  async fetch(request) {
    const form = await request.formData();

    const productName = form.get('product_name');   // Gumroad product name
    const email       = form.get('email');           // Customer email
    const productId   = form.get('product_id');      // Gumroad product ID
    const fullName    = form.get('full_name');

    // Map Gumroad product to Continuata product
    // (use a lookup table, env vars, or your product mapping logic)
    const CONTINUATA_PRODUCT = mapGumroadProduct(productId);

    // Create a purchase in Continuata (generates download token + sends email)
    const res = await fetch('https://continuata.io/api/purchases', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer ' + CONTINUATA_API_KEY,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        productId: CONTINUATA_PRODUCT,
        customerEmail: email,
        customerName: fullName,
        metadata: { source: 'gumroad', gumroadProductId: productId },
      }),
    });

    return new Response('OK', { status: 200 });
  }
};

Customer Experience

Here's what your customers will experience:

1

Purchase on Gumroad

Customer completes purchase using familiar Gumroad checkout

2

Receive Download Link

Continuata sends a download link via email automatically

3

Browser-Native Download

Full-speed, multithreaded download directly to disk with resume support and SHA-256 verification

Migration from Gumroad Files

Transitioning existing Gumroad products to use Continuata delivery:

Gradual Migration

Start with new products on Continuata, then gradually migrate existing products. You can run both systems simultaneously during transition.

Migration Checklist

  • Upload product files to Continuata
  • Test download links with sample customers
  • Set up your serverless handler to process Gumroad pings
  • Monitor download analytics for issues
  • Gradually disable Gumroad file delivery

Need Help?

Contact support@continuata.com for personalized migration assistance. See the API Integration guide for the full API reference.