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.
- In your dashboard, open the product you want to sell via FastSpring
- Click the Versions tab — confirm there is at least one version in the Version History list
- 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 to R2 - Once uploaded, click Set Active next to the version — this also sets the product to Published automatically
- 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:
- Open the product in your Continuata dashboard
- Find the External Mappings panel in the right column
- 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:
- In your Continuata dashboard, go to Settings → Integrations
- In the Add Integration panel, select FastSpring from the provider dropdown
- Generate a strong random secret (32+ characters) and paste it into the webhook secret field
- 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:
- In FastSpring App, navigate to Developer Tools → Webhooks → Configuration
- Click Add Webhook (or open an existing webhook)
- Click Add URL Endpoint
- Enter your Continuata webhook URL
- In the HMAC SHA256 Secret field, paste the secret you saved in Step 3
- Under event types, select at minimum: order.completed
- Optionally also select return.created to handle refunds automatically
- 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.
- Open your product and click the Versions tab
- In the Version History list, click Test Download next to the version you want to check
- A short-lived download link appears — open it in Chrome or Edge (Safari and Firefox users should install Continuata Bridge first)
- Click Choose Download Location, pick a folder, then click Start Download
- 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.
- In FastSpring App go to Developer Tools → Webhooks → Log and click Test to send a sample
order.completedevent 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. - 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.
- 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 token with a 30-day expiry.
- Check the buyer's inbox for the purchase receipt email containing the download link.
- 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:
FastSpring sends an order.completed webhook to Continuata.
Continuata verifies the HMAC-SHA256 signature using your shared secret.
A customer record is created or updated using the buyer's email.
Each line item's product path is matched to a Continuata product via SKU mapping.
A 30-day download token is generated per product.
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 carry no signing header, so Continuata authenticates them with a secret embedded in the notification URL (same approach as VibraCart Pro).
- In Continuata, go to Settings → Integrations, choose FastSpring (Classic), set a secret, and copy the generated webhook URL — it already includes
?secret=… - 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.productPathbelow.) - In FastSpring Classic, click Notifications (top right) → add a custom notification. Set the URL to the copied webhook URL, Content Type to JSON, and paste the template below as the body.
- 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
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 published and has an active version
- Check that your Organisation ID in the webhook URL is correct
Duplicate purchases appearing
- FastSpring may retry failed webhook deliveries — Continuata handles this automatically using order idempotency
- Duplicate events for the same order ID and product are silently ignored
Customer not receiving email
- Confirm your Continuata email service is configured in Settings
- Check spam/junk folders for the purchase receipt
- Verify the buyer email in FastSpring's order details matches what was submitted
Need Help? Contact support at support@continuata.com or check our webhook documentation for more details.