Docs /FastSpring Integration Dashboard →

FastSpring Integration

Automatically deliver digital products through Continuata when customers complete purchases in your FastSpring store.

Overview

The FastSpring integration uses webhooks to automatically create download tokens when customers purchase digital products. When a customer completes an order, FastSpring sends a webhook to Continuata, which generates a secure download link and sends it via email.

Prerequisites: You'll need a FastSpring account with active products and access to the Developer Tools section.

Classic or Contextual? Steps 1–5 below cover the modern Contextual Commerce platform (Developer Tools → Webhooks, HMAC-signed JSON). If your account is on the older Classic platform (Notify Panel / Settings → Notifications, no signing header), skip to FastSpring Classic below. SKU mappings (Step 2) are shared by both.

Step 1: Prepare Your Product in Continuata

Before touching FastSpring, your product needs to be uploaded and have an active version. If you haven't done this yet, follow the Quick Start guide first.

  1. In your dashboard, open the product you want to sell via FastSpring
  2. Click the Versions tab — confirm there is at least one version in the Version History list
  3. If no version has been uploaded yet: enter a version number (e.g., 1.0.0), click Select Folder to Upload, choose your files, then click Upload files
  4. Once uploaded, publish the version (Overview tab → Publish a version) — this also sets the product to Published automatically
  5. Note the product slug — visible in the product header below the product name (e.g., epic-drums-v1). You'll map this to FastSpring in Step 2

Step 2: Set Up SKU Mapping

External mappings live on each product. For every Continuata product you sell on FastSpring:

  1. Open the product in your Continuata dashboard
  2. Find the External Mappings panel in the right column
  3. Add a mapping with vendor FastSpring and the FastSpring product path as the external key
FASTSPRING_PRODUCT_ID     →  CONTINUATA_PRODUCT_SLUG
epic-drum-kit            →  audio-imperia-drums-2024
ambient-textures-pack    →  soundscapes-ambient-v1
vocal-chops              →  vocal-elements-collection

FastSpring Product IDs: Use the FastSpring product path (e.g. epic-drum-kit), not the display name. You can find this in FastSpring App → Products → select product → Product Path field.

Step 3: Configure Webhook Secret in Continuata

Generate a secure secret for verifying webhook signatures:

  1. In your Continuata dashboard, go to Settings → Integrations
  2. In the Add Integration panel, select FastSpring from the provider dropdown
  3. Generate a strong random secret (32+ characters) and paste it into the webhook secret field
  4. Click Save — copy this secret, you'll need it in the next step

Your webhook URL will be:

https://continuata.io/webhooks/{YOUR_ORG_ID}/fastspring

Find your Organisation ID in Settings → Organisation.

Step 4: Configure Webhook in FastSpring

Add the Continuata endpoint to your FastSpring webhook configuration:

  1. In FastSpring App, navigate to Developer Tools → Webhooks → Configuration
  2. Click Add Webhook (or open an existing webhook)
  3. Click Add URL Endpoint
  4. Enter your Continuata webhook URL
  5. In the HMAC SHA256 Secret field, paste the secret you saved in Step 3
  6. Under event types, select at minimum: order.completed
  7. Optionally also select return.created to handle refunds automatically
  8. Click Save

Required Event

order.completed

Recommended Event

return.created

Enable Webhook Expansion (optional): Checking "Enable Webhook Expansion" in FastSpring includes complete order, product, and account details in each payload, reducing the need for follow-up API calls.

Step 5: Test Before Going Live

There are two complementary ways to test. Do both before switching to FastSpring live mode.

5a — Test the download itself (no FastSpring needed)

Use the Test Download button to verify your files are correct and the download experience works, independently of FastSpring.

  1. Open your product and click the Versions tab
  2. In the Version History list, click Test Download next to the version you want to check
  3. A short-lived download link appears — open it in Chrome or Edge (Safari and Firefox users should install Continuata Bridge first)
  4. Click Choose Download Location, pick a folder, then click Start Download
  5. Verify all files arrive and open correctly. Try pausing and resuming to confirm resume works

Test Download bypasses the published check: The link resolves the specific version you clicked, regardless of whether the product is set to Published or Draft. This lets you fully QA a release before your customers can access it.

5b — Test the FastSpring webhook end-to-end

Place a test order in FastSpring's sandbox and confirm Continuata receives it and emails a download link to the customer.

  1. In FastSpring App go to Developer Tools → Webhooks → Log and click Test to send a sample order.completed event to your webhook URL. This is the quickest sanity check — check the response code (should be 200) and look for a new token in your Continuata customer list.
  2. For a more realistic test, use FastSpring's Storefront Builder Preview to place an order using a test credit card. FastSpring will fire the real webhook flow.
  3. After the test order, go to your Continuata dashboard. Under Customers, find the buyer's email — you should see a new purchase and a download link (valid for 48 hours; expired links refresh automatically when opened).
  4. Check the buyer's inbox for the purchase receipt email containing the download link.
  5. Follow the download link and complete a download to confirm the full end-to-end flow works.

Go-live checklist

✓ Product has an active version (green Active badge)
✓ Product status is Published
✓ FastSpring webhook URL points to your live org ID (not a test URL)
✓ HMAC secret matches in both Continuata and FastSpring
✓ SKU mapping covers every product you're selling
✓ Test Download confirmed files download correctly
✓ Test webhook event returned 200 and created a token

How It Works

When a customer completes a purchase in FastSpring:

1

FastSpring sends an order.completed webhook to Continuata.

2

Continuata verifies the HMAC-SHA256 signature using your shared secret.

3

A customer record is created or updated using the buyer's email.

4

Each line item's product path is matched to a Continuata product via SKU mapping.

5

A download token is generated per product (links stay valid for 48 hours and self-refresh when opened).

6

A purchase record is created and a receipt email is sent to the customer.

Refund Handling

If you subscribe to the return.created event, Continuata will automatically mark the associated purchases as refunded when FastSpring processes a return. Download tokens previously issued for that order remain in the system but the purchase status will reflect the refund.

FastSpring Classic (Legacy Notifications)

Classic accounts don't have the Contextual Webhooks screen. Instead you author a custom notification — a JSON body you define using FastSpring's #{order.…} template variables. Continuata ships a ready-made template, so you just paste it in. Classic notifications are authenticated with FastSpring's Secure Notifications headers: set a private key on the notification and FastSpring sends X-Security-Data and X-Security-Hash (MD5(data + key)) with every request, which Continuata verifies. Notifications without a timestamp in X-Security-Data are accepted (each is bound to its exact order body and can only be claimed once), but if your store lets you include a timestamp, do — it's the stronger form.

  1. In Continuata, go to Settings → Integrations, choose FastSpring (Classic), enter a strong secret, Save, and copy the webhook URL
  2. Map each FastSpring product path to a Continuata product under the product's External Mappings panel, vendor FastSpring. (Classic and Contextual share the same mappings; the path is the value of orderItem.productPath below.)
  3. In FastSpring Classic, click Notifications (top right) → add a custom notification. Set the URL to the copied webhook URL, Content Type to JSON, set the notification's security/private key to the same secret you saved in Continuata (this makes FastSpring send the security headers), and paste the template below as the body.
  4. Place a test order. The notification response (and Continuata's logs) echo exactly what was parsed — confirm the order is fulfilled and the receipt email is sent.

Custom notification body (paste verbatim):

{
  "order_id": "#{order.id}",
  "reference": "#{order.reference}",
  "is_test": "#{order.isTest}",
  "currency": "#{order.currency}",
  "email": "#{order.customer.email}",
  "first_name": "#{order.customer.firstName}",
  "last_name": "#{order.customer.lastName}",
  "items": [ <repeat value="#{order.allItems}" var="orderItem">
    {
      "sku": "#{orderItem.productPath}",
      "product_name": "#{orderItem.productName}",
      "amount": "#{orderItem.priceTotal}"
    },</repeat>]
}

If a test order isn't fulfilled: The webhook response includes a parsed object (order id, email, currency, SKUs) and unmatchedSkus. A 200 with processed: 0 means the SKU isn't mapped yet; a 400 with rawKeys shows the field names your account actually sent. Share that response if anything looks off.

Troubleshooting

Signature verification failing (401 Invalid signature)

  • Confirm the HMAC secret in Continuata Settings matches the "HMAC SHA256 Secret" field in FastSpring exactly
  • Ensure the secret contains no leading/trailing spaces
  • Check FastSpring's webhook log for the raw request and response
  • For Classic stores, the webhook log names the exact failure: missing_headers (the notification has no security key set), hash_mismatch (the key in FastSpring doesn't match the secret in Continuata — usually a rotated secret), or stale_timestamp / future_timestamp (clock problems on a timestamped notification)

Order processed but no download token created

  • Verify the FastSpring product ID matches the SKU mapping in Continuata (case-insensitive)
  • Ensure the mapped Continuata product is live — an order for a draft product or one with no live version is recorded as held in the webhook log (with the SKU and reason) rather than fulfilled
  • Check that your Organisation ID in the webhook URL is correct

Reading the webhook log

  • Orders are acknowledged immediately and fulfilled in the background, so you'll normally see one log row per order. A row shows Pending while fulfilment is completing — it resolves to Success or Error within minutes
  • Success/Error reflect whether the customer actually got their files, not just the HTTP response
  • FastSpring retries failed deliveries — Continuata dedupes by order, so retries never create duplicate purchases
  • An unmapped SKU on an order doesn't trigger an alert email if the rest of the order fulfilled; it's flagged on the webhook log and on the Purchases page's unmatched-SKU chip

Customer not receiving email

  • Open the purchase and click View journey to see whether the receipt was sent, held, failed, or never attempted
  • Resend it: Purchases → search the customer's email → expand the row → envelope icon (Resend Purchase Email) — see Updates & Emails
  • Check spam/junk folders for the purchase receipt
  • Verify the buyer email in FastSpring's order details matches what was submitted
  • The customer can always self-serve every purchase at continuata.io/my

Need Help? Contact support at support@continuata.com or check our webhook documentation for more details.