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

# Stripe Billing

> Learn how to connect Stripe Billing to Slicker

### Prerequisites

Slicker integrates with Stripe via an API key. Creating a Stripe API key requires a Stripe user enough permissions to do so.
Stipe user roles that have this permission include `Administrator`, `Super Administrator`, and `Developer`.

### (Option 1: Stripe Marketplace App) Integerate via the Stripe Marketplace

1. Go to the [Slicker App page in the Stripe Marketplace](https://marketplace.stripe.com/apps/slicker).
2. Click on the `Install` button.
3. Follow the instructions to authorize Slicker to access your Stripe account.
4. Once authorized, you will be able to use click the `Link` button in the Slicker app page to link your Stripe account to your Slicker instance.

### (Option 2: API Key) Create credentials

1. Go to the Stripe dashboard to create a new restricted API key [here](https://dashboard.stripe.com/apikeys/create).

2. Give the key a name like `Slicker`.

3. For permissions select the following:

   * `Read` on `All core resources`

   <Frame>
     <img src="https://mintcdn.com/slicker/HZZPLdXP1aKdz94r/images/integrations/stripe_core_read_perms.png?fit=max&auto=format&n=HZZPLdXP1aKdz94r&q=85&s=6ea62335849cb5260bbc7fa1519b90ad" alt="Stripe read permissions on core resources" width="1243" height="306" data-path="images/integrations/stripe_core_read_perms.png" />
   </Frame>

   * `Read` on `All Connect resources`

   <Frame>
     <img src="https://mintcdn.com/slicker/HZZPLdXP1aKdz94r/images/integrations/stripe_connect_read_perms.png?fit=max&auto=format&n=HZZPLdXP1aKdz94r&q=85&s=11f4a90c8f0f359cc6ed1e02049801b9" alt="Stripe read permissions on connect resources" width="945" height="78" data-path="images/integrations/stripe_connect_read_perms.png" />
   </Frame>

   * `Read` on `All Reporting resources`

   <Frame>
     <img src="https://mintcdn.com/slicker/HZZPLdXP1aKdz94r/images/integrations/stripe_reporting_read_perms.png?fit=max&auto=format&n=HZZPLdXP1aKdz94r&q=85&s=414c408522c603856494625a610086f8" alt="Stripe read permissions on reporting resources" width="956" height="62" data-path="images/integrations/stripe_reporting_read_perms.png" />
   </Frame>

   * `Read` on all `Billing` resources, with `Write` on `Invoices`.
     <Warning>The `Write` permission on `Invoices` is required for Slicker to retry failed transactions and recover revenue.</Warning>

   <Frame>
     <img src="https://mintcdn.com/slicker/HZZPLdXP1aKdz94r/images/integrations/stripe_billing_perms.png?fit=max&auto=format&n=HZZPLdXP1aKdz94r&q=85&s=edea9862b6a7964787350717499892d3" alt="Stripe billing permissions" width="2588" height="1584" data-path="images/integrations/stripe_billing_perms.png" />
   </Frame>

   * *(Optional)* `Write` on `Subscriptions`.
     <Note>Add `Write` on `Subscriptions` only if you want Slicker's [Grace Period Manager](/essentials/grace_periods) to cancel subscriptions when their grace period ends. Marking invoices uncollectible is already covered by the `Write` on `Invoices` permission above. Cancelling subscriptions is the one grace-period action that needs this extra scope.</Note>

4. Click the `Create key` button. If prompted confirm your password. Copy the generated key - we will need it later.

### (Option 2: API Key) Create integration in Slicker

1. Go to the Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Stripe` from the list of integrations.
3. Give the integration a name and description to help you identify it later.
4. Enter the API key you copied earlier.
5. Make sure to select this integration is for Stripe Billing. Otherwise, Slicker will only sync payment data, without managing failed billing attempts.

<Frame>
  <img src="https://mintcdn.com/slicker/HZZPLdXP1aKdz94r/images/integrations/stripe_billing_enabled.png?fit=max&auto=format&n=HZZPLdXP1aKdz94r&q=85&s=117d072a9896009de77eac0bc22d8315" alt="Stripe Billing enabled in Slicker integration" width="1384" height="592" data-path="images/integrations/stripe_billing_enabled.png" />
</Frame>

6. Click the `Submit` button to create the integration.

### (Optional) Enable real-time webhooks

By default Slicker keeps your data in sync by polling the Stripe API on a schedule. Adding a webhook lets Stripe push changes to Slicker the moment they happen, for near real-time recovery tracking. For Stripe Billing this is especially valuable: Stripe's API has no "updated since" filter for invoices and subscriptions, so webhooks are the most reliable way to capture later status changes — a payment that finally succeeds, an invoice that's voided, a subscription that cancels — as soon as they occur.

<Note>Webhooks are configured **per Stripe account**, in that account's own Stripe Dashboard. They're optional and can be added at any time after the integration is created.</Note>

1. In your Slicker integration settings, turn on **Webhooks** and copy the **Webhook URL** Slicker shows you. This URL is unique to your integration.

2. In the [Stripe Dashboard](https://dashboard.stripe.com/webhooks), go to **Developers → Webhooks** and click **Add endpoint**.

3. Paste the Slicker Webhook URL into the **Endpoint URL** field.

4. Under **Select events**, subscribe to **only the events Slicker uses** (below). You can pick **All events** to get started, but on high-volume accounts we recommend selecting just these — Slicker ignores anything else, so extra events are only wasted webhook traffic:

   * **Invoices** — `invoice.created`, `invoice.finalized`, `invoice.updated`, `invoice.paid`, `invoice.payment_succeeded`, `invoice.payment_failed`, `invoice.payment_action_required`, `invoice.marked_uncollectible`, `invoice.voided`
   * **Subscriptions** — `customer.subscription.created`, `customer.subscription.updated`, `customer.subscription.deleted`, `customer.subscription.paused`, `customer.subscription.resumed`
   * **Payments** — `payment_intent.succeeded`, `payment_intent.payment_failed`, `payment_intent.processing`, `payment_intent.requires_action`, `payment_intent.canceled`
   * **Customers** — `customer.created`, `customer.updated`, `customer.deleted`

5. Click **Add endpoint** to save it.

6. Open the endpoint you just created, reveal its **Signing secret** (it starts with `whsec_`), and copy it.

7. Back in Slicker, paste the signing secret into the **Webhook Signing Secret** field and save.

<Warning>Copy the **signing secret** (`whsec_…`) — not your API key (`sk_`/`rk_`) or the endpoint ID. If you ever rotate the secret in Stripe, update it in Slicker too.</Warning>

### (Optional) Let Slicker manage the grace period

Slicker's [Grace Period Manager](/essentials/grace_periods) keeps recovering failed payments on your own schedule and decides what happens when that window ends. There are two things to set up: turn the grace period settings on in Slicker, and stop Stripe from ending the subscription itself.

<Note>The order does not matter. Slicker measures each grace period from the invoice's first failed payment, not from when you turn the feature on, so if you switch Stripe to leave invoices overdue first, they simply wait until Slicker takes over. Its next run then closes anything already past its grace period, so the backlog is handled either way.</Note>

#### Turn on grace period management in Slicker

In your Slicker integration settings, enable the grace period manager, then set the grace period length and the actions to apply when it expires.

<Frame>
  <img src="https://mintcdn.com/slicker/OuMKIpTBgdM_1_V9/images/grace-period-settings.png?fit=max&auto=format&n=OuMKIpTBgdM_1_V9&q=85&s=74b67662ec1c062c1ac7e05dfb464ba6" alt="Slicker grace period manager settings for Stripe" width="1508" height="858" data-path="images/grace-period-settings.png" />
</Frame>

<Note>If you do not see these settings, [let us know](https://www.slickerhq.com/contact) and we will enable the feature for your account.</Note>

#### Turn off Stripe's automatic cancellation

Stop Stripe from ending the subscription itself, so Slicker owns the recovery window. Otherwise Stripe cancels or writes off the invoice once its own retries run out, before your grace period is up.

1. Open your Stripe [retries and recovery settings](https://dashboard.stripe.com/revenue-recovery/retries).
2. Set every failed-payment outcome to leave the invoice overdue. Do not cancel the subscription, mark it unpaid, or mark the invoice uncollectible.

<Frame>
  <img src="https://mintcdn.com/slicker/OuMKIpTBgdM_1_V9/images/stripe-billing-cancel-off-settings.png?fit=max&auto=format&n=OuMKIpTBgdM_1_V9&q=85&s=561fa92ac8e221f84fc0b011d4c68b4d" alt="Stripe retries settings with all failed-payment outcomes left as overdue" width="1368" height="312" data-path="images/stripe-billing-cancel-off-settings.png" />
</Frame>

With Slicker managing the grace period and Stripe set to leave invoices overdue, Slicker applies the end-of-grace action you choose. Cancelling subscriptions also needs the optional `Write` on `Subscriptions` permission described above.

### Troubleshooting

On integration creation, Slicker will attempt to connect to Stripe using the provided API key.
If the connection fails, you will see an error message like the one below.
Please double-check the API key, make sure it has the correct permissions, and try again.

<Frame>
  <img src="https://mintcdn.com/slicker/HZZPLdXP1aKdz94r/images/integrations/integration-failure.png?fit=max&auto=format&n=HZZPLdXP1aKdz94r&q=85&s=59f6f532473345be5919699e5de59427" alt="Failed integration creation message" width="946" height="177" data-path="images/integrations/integration-failure.png" />
</Frame>
