> ## Documentation Index
> Fetch the complete documentation index at: https://funnelfox.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# FastSpring

> Integrate FastSpring as your payment provider in FunnelFox. Step-by-step setup for web subscriptions, checkouts, and recurring billing.

FastSpring is an all-in-one merchant of record and payment integration for FunnelFox that provides global
payment processing and subscription management.

## Key features

The FunnelFox integration with FastSpring supports the following payment
methods and transaction types:

| Transaction type               | Cards | Apple Pay | Google Pay | PayPal |
| ------------------------------ | :---: | :-------: | :--------: | :----: |
| **Subscriptions**              |       |           |            |        |
| Subscriptions                  |   ✅   |     ✅     |      ✅     |    ✅   |
| Free & paid trials             |   ✅   |     ✅     |      ✅     |    ✅   |
| **Upsells**                    |       |           |            |        |
| One-time products              |   ✅   |     ✅     |      ✅     |    ✅   |
| Subscription upsells (2nd sub) |   ✅   |     ✅     |      ✅     |    ✅   |
| **Offers**                     |       |           |            |        |
| Intro offers                   |   ✅   |     ✅     |      ✅     |    ✅   |

Learn more about [configuring each transaction type](/docs/integrations/payments/fastspring#subscription-configuration) in your funnel.

## Setup

You need an active FastSpring account to integrate with FunnelFox.

Keep both FunnelFox and FastSpring dashboards open during setup—you'll
switch between them several times.

### 1. API keys

1. Go to **Developer Tools > APIs > API Credentials** in
   [FastSpring](https://app.fastspring.com/).
2. Click **Create** or **Reset Credentials** to get your API Username and
   Password.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-reset.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=f1b8da848ea926aeb0c4c4b6a841162c" width="1920" height="989" data-path="assets/fastspring-reset.png" />
</Frame>

3. Copy your **Username**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-copy-username.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=d7b6de8000e097eb3035ffe0c8a6e9db" width="1920" height="989" data-path="assets/fastspring-copy-username.png" />
</Frame>

4. Go to **Integrations > FastSpring** in FunnelFox.

5. Paste your Username into the **API Username** fields under both
   **Production** and **Sandbox** sections.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-paste-username.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=2c34ee93408b9b4f3926c04e12a4b8ad" width="1920" height="989" data-path="assets/fastspring-paste-username.png" />
</Frame>

6. Go back to your credentials in FastSpring and copy your **Password**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-copy-pass.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=04ea299f716bc5a5e98791d937d2397b" width="1920" height="989" data-path="assets/fastspring-copy-pass.png" />
</Frame>

7. Paste your Password into the **API Password** fields under both
   **Production** and **Sandbox** sections in FunnelFox.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-paste-pass.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=e95dd9e061e2541c26ea7988a1eff1bb" width="1920" height="989" data-path="assets/fastspring-paste-pass.png" />
</Frame>

<Info>Don't close your FastSpring integration settings in FunnelFox and proceed with the next section.</Info>

### 2. Webhook keys

1. Go to **Developer Tools > Webhooks > Configuration** in FastSpring.
2. Click **Add Webhook**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-add-webhook.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=174ee91195e92a1723f1945e2d8b5d45" width="1920" height="989" data-path="assets/fastspring-add-webhook.png" />
</Frame>

3. Configure the webhook and click **Add**:

* **Title**: Name your webhook.
* **Get webhooks from**: Live and Test orders.
* **Webhook expansion**: Keep disabled.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-webhook-configuration.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=3a2c165ef2411e67f5bb3e745b8311f3" width="1920" height="989" data-path="assets/fastspring-webhook-configuration.png" />
</Frame>

4. Click **Add URL Endpoint** on the webhook you just created.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-add-url.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=737ce0d7fbb76bb2023d323f701f7767" width="1920" height="989" data-path="assets/fastspring-add-url.png" />
</Frame>

5. Go back to your integration settings in FunnelFox and copy your
   **Webhook URL**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-copy-url.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=72873abf4080e913db1f0e0d2b74330b" width="1920" height="989" data-path="assets/fastspring-copy-url.png" />
</Frame>

6. Proceed with webhook configuration in FastSpring and click **Add**:

* **URL**: Paste your webhook URL from FunnelFox.
* **HMAC SHA256 Secret**: Generate your own webhook secret and paste
  here. Keep your secret saved — you'll also need it later in
  FunnelFox.

<Info>You only need one secret. The same secret is used for both sandbox and production setups.</Info>

* Select the following **Events**:
* `order.completed`
* `subscription.activated`
* `subscription.canceled`
* `subscription.deactivated`
* `subscription.updated`
* `subscription.uncanceled`
* `subscription.charge.completed`
* `subscription.charge.failed`
* `subscription.paused`
* `subscription.resumed`
* `return.created`
* `chargeback.created`

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-webhook-events.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=306f9d8b0fed75c11d24e0836a369af6" width="1920" height="989" data-path="assets/fastspring-webhook-events.png" />
</Frame>

7. Go back to FunnelFox and paste your webhook secret into the
   **Webhook HMAC Secret** fields under both **Production** and
   **Sandbox** sections.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-paste-secret.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=bddbb68e44177e9a538b56e6c2d15975" width="1920" height="989" data-path="assets/fastspring-paste-secret.png" />
</Frame>

### 3. Domains

1. Go to **Checkouts > Popup Checkouts** in FastSpring.

<Info>Based on the checkout type needed, you can proceed with Embedded checkout instead. Learn about [Checkout types](/docs/integrations/payments/fastspring#checkout-types).</Info>

2. Click **Create Popup Checkout**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-create-checkout.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=bc088c46761abae9d903143fcaba9226" width="1920" height="989" data-path="assets/fastspring-create-checkout.png" />
</Frame>

3. Enter a unique ID for your new checkout without spaces or special
   characters. This ID becomes part of your checkout URL.
4. Click **Create**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-enter-id.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=1bb4e19c08e9144ed61e3e6a24e72ca5" width="1920" height="989" data-path="assets/fastspring-enter-id.png" />
</Frame>

5. Click **No Website Domains Allowed** badge on the checkout you just created.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-no-domains.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=d8a86f1d04a96cd414b7e929238a248a" width="1920" height="989" data-path="assets/fastspring-no-domains.png" />
</Frame>

6. Paste the following domains and click **Save**:

* Your project domain from
  [Settings > Domains](https://app.funnelfox.com/settings/domains)
  in FunnelFox.
* `http://app.funnelfox.com/` to use your checkout in funnel preview
  mode.
* If you have a custom domain, add it as well.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-paste-domains.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=152e2e4e455ef00dc77d04dbdb82bd6d" width="1920" height="989" data-path="assets/fastspring-paste-domains.png" />
</Frame>

7. Click **Place on your website** on the checkout you just created.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-place-website.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=b9d118093fc1f3826805e3d84d42ebc1" width="1920" height="989" data-path="assets/fastspring-place-website.png" />
</Frame>

8. Copy your account subdomain from: `data-storefront="YOUR_ACCOUNT_SUBDOMAIN.test.onfastspring.com/popup-demo"`.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-copy-subdomain.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=4f3a5b34de34c5568a0f5125ac879ccc" width="1920" height="989" data-path="assets/fastspring-copy-subdomain.png" />
</Frame>

9. Go back to FunnelFox and paste your checkout ID into the
   **Account subdomain** and **Account subdomain (sandbox)** fields.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-paste-subdomains.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=82ce56ef551cd253661184713ba9625d" width="1920" height="989" data-path="assets/fastspring-paste-subdomains.png" />
</Frame>

10. Click **Save changes**.

<Check>Your FastSpring integration is now active! Remember to republish your funnels to apply the changes.</Check>

### 4. Upsells

Complete this step if you want one-click upsells to
work in your funnels.

1. Generate a public certificate and private key in your terminal.

<Accordion title="How to generate a certificate">
  1) Open Terminal on your device.
  2) Generate a private key:

  ```bash theme={null}
  openssl genrsa -out privatekey.pem 2048
  ```

  3. Create a certificate:

  ```bash theme={null}
  openssl req -new -x509 -key privatekey.pem -out publiccert.pem -days 3650 -subj "/CN=funnelfox"
  ```

  4. Copy the contents of `privatekey.pem` to your clipboard:

  * macOS: `pbcopy < privatekey.pem`
  * Windows PowerShell: `Get-Content privatekey.pem | Set-Clipboard`
</Accordion>

2. Go to **Developer Tools > Store Builder Library** in
   [FastSpring](https://app.fastspring.com/).
3. Copy the **Access key**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/syzVnwFX3Mmi3bgF/assets/fastspring-upsell-key.png?fit=max&auto=format&n=syzVnwFX3Mmi3bgF&q=85&s=a3eba1a3f820d8acc438bea7598cf848" width="1920" height="989" data-path="assets/fastspring-upsell-key.png" />
</Frame>

4. Go to **Integrations > FastSpring** in FunnelFox.

5. Paste the key into the **SBL Access Key** field.

<Frame>
  <img src="https://mintcdn.com/funnelfox/syzVnwFX3Mmi3bgF/assets/fastspring-upsell-paste.png?fit=max&auto=format&n=syzVnwFX3Mmi3bgF&q=85&s=7cd99c6a970b53c601880557e9f4a8eb" width="1920" height="989" data-path="assets/fastspring-upsell-paste.png" />
</Frame>

6. Go back to FastSpring and upload your `publiccert.pem` as the
   **Public certificate**.

<Frame>
  <img src="https://mintcdn.com/funnelfox/syzVnwFX3Mmi3bgF/assets/fastspring-upsell-upload.png?fit=max&auto=format&n=syzVnwFX3Mmi3bgF&q=85&s=9f7e2d2d4a5fda1e9bd07f745fa4446e" width="1920" height="989" data-path="assets/fastspring-upsell-upload.png" />
</Frame>

7. Save changes in FastSpring.

8. Paste the contents of `privatekey.pem` into the **Secure-request RSA
   private key (PEM)** field in FunnelFox.

<Frame>
  <img src="https://mintcdn.com/funnelfox/syzVnwFX3Mmi3bgF/assets/fastspring-paste-certificate.png?fit=max&auto=format&n=syzVnwFX3Mmi3bgF&q=85&s=1bb569412dfd03e1e26a8a0cff2fec72" width="1920" height="989" data-path="assets/fastspring-paste-certificate.png" />
</Frame>

9. Repeat under the **Production** section and click **Save changes**.

<Check>One-click upsells are now enabled. Remember to republish your
funnels to apply the changes.</Check>

## Checkout types

FunnelFox supports two FastSpring checkout types:

* **Popup**: A modal checkout that opens over your funnel.
* **Embedded**: A checkout embedded directly into your page layout.

Configure each checkout type before using it in the Editor:

1. Go to **Checkouts > Popup Checkouts / Embedded Checkouts** in FastSpring.
2. Create new checkout of the type needed.
3. Click **No Website Domains Allowed** badge on the checkout you just created.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-no-domains.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=d8a86f1d04a96cd414b7e929238a248a" width="1920" height="989" data-path="assets/fastspring-no-domains.png" />
</Frame>

4. Paste the following domains and click **Save**:

* Your project domain from
  [Settings > Domains](https://app.funnelfox.com/settings/domains)
  in FunnelFox.
* `http://app.funnelfox.com/` to use your checkout in funnel preview
  mode.
* If you have a custom domain, add it as well.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-paste-domains.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=152e2e4e455ef00dc77d04dbdb82bd6d" width="1920" height="989" data-path="assets/fastspring-paste-domains.png" />
</Frame>

## Subscription configuration

<Warning>Due to FastSpring limitation, you need to collect customer email before the paywall screen with Checkout element. Add an Email input before configuring products.</Warning>

After setup, FunnelFox automatically creates webhooks in your FastSpring
account and syncs your products.

To make each FastSpring product available in the Checkout element, you need:

* **Checkout ID**: Go to **Checkouts > Popup Checkouts / Embedded Checkouts** in FastSpring and copy the ID of the checkout to configure (e.g. `Popup / YOUR_CHECKOUT_ID`).

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-checkout-id.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=d8673f1f9de2134e207fc4d4b5ee31d2" width="1920" height="989" data-path="assets/fastspring-checkout-id.png" />
</Frame>

* **Product path**: Go to **Catalog > Subscription Plans** in FastSpring and copy the path of product to configure.

<Frame>
  <img src="https://mintcdn.com/funnelfox/JZ6Tq4bG2LMFSJTU/assets/fastspring-product-path.png?fit=max&auto=format&n=JZ6Tq4bG2LMFSJTU&q=85&s=b22817bb36517a615e76277ea5c422c7" width="1920" height="989" data-path="assets/fastspring-product-path.png" />
</Frame>

Use the Checkout ID and Product path values to proceed with product configuration in your [Checkout element](/docs/elements/checkout#subscription-configuration).

## Testing

Test your FastSpring integration with simulated payments before going
live.

1. Configure the test in your Checkout element's **Sandbox** section.
2. Open your funnel in **Preview** mode.
3. Use these FastSpring test cards with any future expiry date and the CVV from the product page in FastSpring:

| Card Number         | Result          |
| ------------------- | --------------- |
| 4242 4242 4242 4242 | Success         |
| 4000 0000 0000 0002 | Generic decline |

## Next steps

* [Set up checkout element](/docs/elements/checkout) in your funnel
