# Account setup
Source: https://docs.slickerhq.com/account_setup
Learn how to manage your Slicker account
## Account Creation
To create an account, please get in touch with us. Our team will collaborate with you to understand your specific requirements and set up your account accordingly.
For details on how we handle your data securely, refer to the [security section](/essentials/security). Each client’s data is stored in separate, dedicated storage for enhanced privacy and compliance.
## Managing Users
Easily add or remove users and manage their access levels:
* **Owner Access**: Grant users permissions to manage the organization.
* **Viewer Access**: Limit users to viewing the organization without management rights.
You can also configure global settings for user access:
* Restrict access to users with specific email domains.
* Allow users with non-matching email domains to join the organization.
## Managing User Authentication
Ensure secure access to your account by managing authentication settings:
* **Change Passwords**: Update your login credentials regularly.
* **Enable Two-Factor Authentication (2FA)**: Add an extra layer of security to your account.
## Accessing Slicker
Log in to the platform using one of the following methods:
1. **Username and Password**: Use the credentials you set during account creation.
2. **Magic Link**: Click the magic link sent to your registered email address. Emails will be sent from `noreply@auth.slickerhq.com`.
# List recovery actions
Source: https://docs.slickerhq.com/api-reference/list_recovery_actions
api.yaml GET /recovery_actions
# Slicker API Overview
Source: https://docs.slickerhq.com/api-reference/overview
Slicker public API endpoints and how to interact with them
## API Basics
The Slicker API is a RESTful HTTP API that allows you to integrate with Slicker's retry data.
* **Protocol**: HTTPS only (unencrypted HTTP is not supported)
* **Base URL**: `https://api.slickerhq.com`
* **Data Format**: All requests and responses use JSON format
* **Character Encoding**: UTF-8
## Authentication
The API uses Bearer token authentication. An API key from Slicker which should be included in all API requests via the Authorization header:
```
Authorization: Bearer YOUR_API_KEY
```
You can see and manage your organization's API keys at [https://auth.slickerhq.com/org/api\_keys](https://auth.slickerhq.com/org/api_keys).
Your API key grants access to sensitive data and should be kept secure. Do not share your API key in publicly accessible areas such as GitHub, client-side code, or in API requests to other services.
## Request Limits
* **Maximum Batch Size**: Each API request can contain up to 100 items.
* **Rate Limiting**: The API implements rate limiting to ensure stable performance for all users. The default rate limits are 100 requests a second. If this does not meet your requirements, please [contact us](mailto:support@slickerhq.com) directly.
* **Concurrency**: We recommend no more than 5 concurrent requests per second
If you exceed these limits, the API will return a `429 Too Many Requests` response. Implement appropriate backoff strategies in your integration.
## API Versioning
The API version is included in the URL path (e.g., `/v1/recovery_actions`). When new versions are released, we'll provide appropriate migration guidance and timelines.
## Pagination
The Slicker API uses token-based pagination to handle large datasets efficiently. Each paginated endpoint returns a subset of results along with a pagination token for retrieving subsequent pages.
### Pagination Parameters
* **`pageSize`**: Number of items to return per page (1-100, defaults to 100)
* **`pageToken`**: Token for retrieving the next page of results. Use the `nextPageToken` from the previous response.
### Pagination Response
Each paginated response includes:
* **`{data}`**: Array of objects for the current page
* **`nextPageToken`**: Token to fetch the next page (empty if no more pages)
* **`totalSize`**: Total number of items available across all pages
### Best Practices
#### Avoiding Duplicates During Pagination
When paginating through results, new recovery actions may be created while you're processing pages. To avoid missing or duplicating entries:
1. **Use ascending sort order**: Sort by `executed_at` or `created_at` in ascending order (`asc`)
2. **Why ascending?** If you sort in descending order (`desc`) and new entries are created, they appear at the beginning of the result set, potentially causing you to skip entries that get pushed to later pages.
```bash theme={null}
# Recommended: Ascending order to avoid duplicates
GET /v1/recovery_actions?orderBy=executed_at&orderDirection=asc&pageSize=100
# Not recommended for continuous processing
GET /v1/recovery_actions?orderBy=executed_at&orderDirection=desc&pageSize=100
```
#### Example Pagination Flow
```bash theme={null}
# First request
GET /v1/recovery_actions?orderBy=executed_at&orderDirection=asc&pageSize=100
# Response includes nextPageToken
{
"recoveryActions": [...],
"nextPageToken": "150",
"totalSize": 250
}
# Subsequent request using the token
GET /v1/recovery_actions?pageToken=150
```
#### Incremental Data Syncing
For regular data synchronization or warehousing:
1. **Initial sync**: Fetch all recovery actions up to a specific timestamp
2. **Subsequent syncs**: Use time-based filters with `executedAfter` to only fetch new or updated entries
3. **Always use ascending sort** to maintain consistency
```bash theme={null}
# Initial sync
GET /v1/recovery_actions?orderBy=executed_at&orderDirection=asc&executedBefore=2024-01-31T23:59:59Z
# Subsequent sync (fetch entries after last sync)
GET /v1/recovery_actions?orderBy=executed_at&orderDirection=asc&executedAfter=2024-01-31T23:59:59Z
```
### Error Handling
* **Invalid tokens**: Expired or invalid `pageToken` values will return a `400 Bad Request` error
* **Rate limiting**: If you exceed rate limits, implement exponential backoff before retrying
* **Connection issues**: Always store the last successful `pageToken` to resume pagination after connection failures
# Analytics & Reporting
Source: https://docs.slickerhq.com/essentials/analytics
Learn how to use Slicker Analytics to investigate payments, recovery, 3DS, and reports
Slicker Analytics gives you a payment and recovery workbench for understanding why revenue is lost, where retries are working, and which customer or issuer segments need attention. Start with **Ask**: it is the fastest way to turn a business question into an answer, a report, or a focused follow-up investigation.
Open Analytics from [app.slickerhq.com/analytics](https://app.slickerhq.com/analytics).
## Start with Ask
Use the **Ask** tab to ask natural-language questions about your payment and recovery data. The analytics assistant can answer directly, generate a report, and help you decide which segments are worth investigating next.
Set the date range for the period you want to analyze.
Ask what you would ask an analyst, such as "Which issuers have the lowest auth rate?" or "How is payment recovery performing this quarter?"
The assistant can return a direct answer or build a report that organizes charts, metrics, and narrative findings.
Ask a narrower follow-up question, open the relevant dashboard tab, or save the report for later.
Good starting questions include:
| Question | What It Helps You Find |
| - | - |
| How is payment recovery performing this quarter? | Recovery rate, recovered amount, timing, and whether performance is improving or slipping. |
| Which issuers have the lowest auth rate? | Bank-level acceptance issues that may need routing, 3DS, or payment strategy changes. |
| How does recovery rate vary by country? | Geographic segments where failed payments recover differently. |
| What changed in failed payments this week? | Error-code, gateway, issuer, or payment-method shifts behind a decline spike. |
| Where are customers dropping off in 3DS? | Challenge abandonment, issuer rejection, and device or issuer patterns. |
## Save and Schedule Reports
When Ask produces a report, you can keep it as a reusable artifact instead of rebuilding the same analysis each time.
Reports can be:
* Saved for later review.
* Marked private or shared with your organization.
* Reopened from the Reports tab.
* Scheduled so recurring report runs email recipients when they finish.
Use reports for recurring reviews such as weekly recovery performance, issuer regressions, 3DS drop-off, or payment-method trends.
## Use Dashboards for Follow-Up
The dashboard tabs are supporting lenses for deeper investigation. They are useful when you already know which part of the payment or recovery funnel you want to inspect, or when Ask points you toward a specific segment.
These views will continue to evolve as Slicker adds new analytics surfaces, but the main investigation areas are:
| Tab | Use It To |
| - | - |
| Invoices | Understand invoice collection, first-attempt success, recovery rate, invoice churn, and failed invoice segments. |
| Transactions | Analyze authorization rate, payment volume, gateway performance, payment initiation, issuer behavior, and raw decline codes. |
| Failure Analysis | Study the failed-invoice cohort: what entered dunning, what recovered, what stayed in recovery, and what became lost revenue. |
| Recovery | Measure where recovery is happening, how long it takes, how many retries are needed, and what share Slicker is driving. |
| 3DS | Investigate 3D Secure enrollment, challenge completion, abandonment, authentication results, issuers, devices, and customers. |
## Filters and Time Controls
Use the date range picker to set the reporting window. Trend charts can be grouped daily, weekly, or monthly.
Use filters to narrow the analysis to a specific slice of your business, such as:
* Countries and currencies.
* Payment methods and card brands.
* Error codes and normalized Slicker error types.
* Gateway or payment processor.
* Business entities, plans, or billing cycles when available.
Filtered views are useful when a headline metric looks stable but one segment is degrading.
## Invoices
Use **Invoices** for invoice-level collection and recovery performance. An invoice is counted once, even if it has multiple payment attempts.
Common questions:
* What percentage of invoices are paid on the first attempt?
* How much collection improves after recovery activity?
* Which error codes, countries, card brands, payment methods, or billing cycles drive failed invoices?
* Which segments recover well, and which segments turn into invoice churn?
The overview compares first-attempt outcomes with final invoice outcomes, so you can see the recovery uplift between the initial payment attempt and the eventual result.
## Transactions
Use **Transactions** for authorization-level analysis. A transaction is one authorization attempt, so retries on the same invoice appear as separate rows.
Transactions helps you inspect:
* Authorization rate and succeeded or failed volume over time.
* Gateway performance across payment processors.
* Decline reasons by normalized Slicker error type, provider error code, and scheme error code.
* Issuer country, card brand, card product, and payment method behavior.
* Customer-initiated, merchant-initiated, and MOTO transaction performance.
* Issuer-level patterns that may indicate routing, 3DS, or processor issues.
This tab is best for diagnosing payment acceptance problems before they become invoice recovery problems.
## Failure Analysis
Use **Failure Analysis** to study invoices that had at least one failed payment attempt and entered recovery.
Recovery status means:
| Status | Meaning |
| - | - |
| Recovered | The invoice was eventually paid. |
| In Recovery | The retry or dunning window is still open. |
| Failed Recovery | The recovery window closed without payment. |
Key views include:
* **Outcomes**: How the failed-invoice cohort split between recovered, in recovery, and failed recovery.
* **First Failure**: The first failed transaction that pushed each invoice into recovery.
* **Subsequent Failures**: Retry attempts that also failed after the initial failure.
* **Error Code**: Normalized error types, provider codes, and scheme codes within the failed cohort.
* **Issuer**: Bank-level, country-level, and card-brand patterns inside the failed cohort.
Use this tab when you need to understand why some failed invoices recover and others do not.
## Recovery
Use **Recovery** to measure recovery effectiveness and efficiency.
The recovery views show:
* Recovered invoices and recovered amount.
* Recovery method, such as Slicker retries, recovery emails, or other recovery paths.
* Average time from first failure to successful recovery.
* Number of retries needed before recovery.
* Retry success rate and retry cost ratio.
* Slicker's share of recovery activity compared with other retry sources.
This tab is useful for monitoring whether recovery is improving, slowing down, or becoming more expensive in retry attempts.
## 3D Secure
Use **3DS** to understand authentication performance for card payments that enter a 3D Secure flow.
The 3DS views cover:
* Enrollment volume, challenge rate, authentication success, and liability shift.
* Funnel drop-off from enrollment to challenge completion.
* Abandonment versus issuer challenge failure.
* EMVCo cancel and reason-code breakdowns.
* Performance by card brand, currency, device type, gateway, issuer, issuer country, and customer.
Use this tab when authentication required, challenge abandonment, or issuer rejection is affecting payment success.
## Dashboard and Recovery Pages
The main [Dashboard](https://app.slickerhq.com/dashboard) is still the best place for a quick executive overview of subscription health, payment health, churn, and recovered revenue.
The [Revenue Recovery page](https://app.slickerhq.com/revenue-recovery) provides operational visibility into past and scheduled recovery attempts.
Use Analytics when you need deeper investigation, segment comparisons, or reusable reporting.
## Recommended Workflows
| Workflow | Where to Start |
| - | - |
| Weekly payment health review | Ask what changed in payments and recovery, then inspect Transactions and Invoices. |
| Decline spike investigation | Ask what caused the spike, then inspect Transactions error code, gateway, issuer, and payment initiation views. |
| Recovery performance review | Ask how recovery is trending, then inspect Recovery and Failure Analysis. |
| Lost revenue deep dive | Ask which segments are driving failed recovery, then inspect Failure Analysis first failures, subsequent failures, error code, and issuer views. |
| 3DS conversion issue | Ask where 3DS users are dropping off, then inspect 3DS funnel, failures, breakdowns, issuers, and customers. |
| Executive reporting | Ask the question once, save the generated report, and schedule it from Reports. |
## Related Docs
* [Recovery Strategies](/essentials/strategies)
* [Emails](/essentials/emails)
* [Multi Gateway Routing](/essentials/multi_gateway_routing)
* [3D Secure Authentication](/guides/3ds)
# Configuration
Source: https://docs.slickerhq.com/essentials/configuration
Learn how to configure and customize Slicker recovery settings
### Recovery Settings
To access the recovery settings, you can:
* **Use the menu:** Click the user icon in the bottom-left corner and select **"Recovery Settings"**.
* **Direct link:** [Open Recovery Settings](https://app.slickerhq.com/settings/recovery).
By default, Slicker dynamically manages recovery settings based on factors such as issuer bank preferences, customer behavior, and other variables that influence the recovery process. These intelligent defaults are designed to optimize results and minimize churn.
However, if you prefer, you can customize settings to suit your needs. Adjustable options include:
* Maximum number of retries
* Minimum time between retries
* Minimum time before the first retry
### Custom Settings
Need a specific setting that’s not currently available? Let us know by [contacting us](https://www.slickerhq.com/contact), and we’ll work with you to address your requirements.
# Emails
Source: https://docs.slickerhq.com/essentials/emails
Learn how Slicker's automated emails recover failed payments alongside retries
Recovery emails contact customers when a failed payment needs their attention. They complement [payment retries](/essentials/strategies): retries handle failures that may clear on their own, while emails help customers replace an expired card, approve a transaction, or resolve another account issue.
Follow the launch guide to configure your sending domain, DNS, tracking, branding, scenarios, testing, and reporting.
## When Emails Help
Payment retries work well for temporary bank declines or insufficient funds at the moment of charge. Customer communication is more useful when the failure requires action, including:
* A hard decline that another retry will not resolve.
* An expired, lost, blocked, or inactive card.
* A bank approval or authentication step.
* A stopped recurring payment or cancelled billing agreement.
Slicker coordinates the two channels without treating them as the same action. Retry timing can be optimized around the next collection attempt while email timing and copy can focus on getting a response without over-communicating.
## How Recovery Emails Work
A scenario represents a type of payment failure and the audience that should receive an email. When more than one scenario matches, the higher-priority scenario wins.
A scenario contains one or more enabled templates. Sequence positions distinguish first, middle, and final messages; multiple templates at the same position can be used as copy variants.
Slicker renders customer and invoice variables, applies the scenario's email configuration, and sends from your verified domain.
You can inspect scheduled and sent messages, recovery outcomes, scenario performance, and—when tracking is configured—open and click activity.
## Scenarios and Templates
Slicker prepares an initial set of scenarios and templates for your payment-failure patterns during onboarding. They are a starting point, not a locked configuration.
On the [Scenarios](https://app.slickerhq.com/dunning/scenarios) page you can:
* Review enabled and disabled scenarios and filter them by trigger.
* Change a scenario's name, description, trigger, priority, assigned email configuration, and enabled status.
* Review its templates, sequence positions, and performance.
* Edit template names, subjects, and message content using the available customer, invoice, and payment variables.
* Add templates and send test emails before using new copy with customers.
Use **Detailed View** to compare sent volume, recovered invoices, recovery rate, and available engagement metrics across scenarios. Higher scenario priorities are evaluated first, so review overlapping scenarios carefully before enabling them.
## Sending From Your Domain
Customers receive messages from an address on a domain you control. Use a dedicated subdomain such as `billing.example.com` or `payments.example.com` instead of the root `example.com`.
A subdomain separates recovery-email reputation from login, support, and marketing mail. It is also required for Slicker's custom-domain open and click tracking. Configure the domain, DNS records, sender name, from address, reply-to address, and optional BCC recipients in [Emails → Settings](https://app.slickerhq.com/dunning/settings).
SPF and DKIM records authenticate sending and must be verified before emails can be sent. DMARC is recommended for spoofing protection and deliverability. DNS changes can take up to 48 hours to propagate; the Settings page shows the live status of every record and lets you re-run verification.
## Branding and Calls to Action
An email configuration controls the sender domain and shared presentation of an email. In [Styling & configuration](https://app.slickerhq.com/dunning/styling), you can manage:
* The sending domain, logo, alignment, font, and button color.
* CTA text and either a static payment-page URL or a [customer-specific dynamic destination](/guides/email-dunning-launch-guide#dynamic-billing-page-urls).
* Help text, signature, and footer links.
* Multiple configurations for different brands or business units, including one default.
* A live preview and test email.
A scenario can use a specific email configuration or fall back to the default.
## Tracking and Reporting
Optional tracking DNS records route images and links through your sending subdomain. Slicker records an open when the tracking image is requested and a click when a tracked link is followed. Email clients can block images or prefetch links, so engagement metrics are useful directional signals rather than proof that a person read an email.
The Emails area provides three reporting levels:
* **Overview** — scheduled emails, recovered invoices and amount, total emails sent, and available open and click rates.
* **Scheduled Emails and Sent Emails** — recipient-level records with timing, invoice, scenario, message preview, and recovery information.
* **Analytics** — scenario recovery rates, send volume and timing, monthly recovered invoices and amount, plus engagement charts when tracking is configured.
For broader recovery reporting, see [Analytics & Reporting](/essentials/analytics).
## Connect Email Outcomes to Your Systems
Use an [email-outcome webhook](/guides/email-dunning-launch-guide#email-outcome-webhooks) when another system should react after Slicker attempts a recovery email—for example, to enqueue an SMS or update an internal workflow. Webhooks include structured customer, invoice, scenario, and email-attempt data and support idempotent retry handling.
## Next Step
Follow the [Email dunning launch guide](/guides/email-dunning-launch-guide) for the complete setup sequence, DNS troubleshooting, tracking behavior, launch checklist, and advanced configuration.
# FAQs
Source: https://docs.slickerhq.com/essentials/faq
Frequently asked questions about Slicker
### What is Slicker, and how does it help my business?
Slicker is a revenue recovery platform that helps subscription businesses reduce involuntary churn by optimizing payment retries, improving payment health, and providing actionable insights through analytics.
### How do I integrate with Slicker?
Slicker integrates directly with popular payment processors and billing platforms like Stripe, Recurly, and Chargebee. For more details, see our [Integrations](/integrations/overview) page.
### I use a billing platform that Slicker supports, but my payment processor is not listed. Can I still use Slicker?
Yes! We only need to integrate with your billing platform to get started. Using the data from your payment processor(s) takes the recovery strategies to the next level and is strongly recommended, but it is not required.
If you have requirements for a specific payment processor, [contact us](https://www.slickerhq.com/contact) to discuss your needs.
### What types of businesses benefit the most from using Slicker?
Subscription-based businesses, particularly those experiencing high involuntary churn due, benefit the most from Slicker. Not sure if your business fits? [Contact us](https://www.slickerhq.com/contact) to get a free payments audit and discuss your needs.
### How does Slicker ensure the security of my data?
Slicker uses separate data stores for each client and implements encryption at rest and in transit. We are also working towards SOC 2 compliance. For more details, visit our [Security & Compliance](/essentials/security) page.
### Is my data shared with other clients?
No, Slicker uses separate data stores for each client to ensure complete data isolation and privacy.
### How does the revenue recovery process work?
Slicker uses machine learning and industry heuristics to optimize retries for failed payments. We tailor strategies to individual customers based on factors like BINs, geography, and payment timing. Learn more on our [Recovery Strategies](/essentials/strategies) page.
### Can I customize Slicker’s recovery strategies?
Yes, clients can adjust certain parameters, such as maximum retries and minimum time between retries, while most settings are dynamically controlled by Slicker. See the [Configuration](/essentials/configuration) page for details.
### How do I set up my Slicker account?
Contact our team to create your account. We’ll collaborate with you to configure it based on your specific requirements. For more information, see the [Account Setup](/account_setup) guide.
### What information do I need to provide during setup?
You’ll need to provide details about your payment and billing systems and any specific requirements for recovery strategies or integrations.
### How long does it take to get started with Slicker?
Adding the integrations to your billing and payments providers takes 5 minutes. Initial analytics are available within 10 minutes, and full recovery strategies can start running withing a couple of hours.
### What is Slicker’s pricing model?
Our pricing is based on the revenue recovered for your business. We won't charge you more than the recovered revenue. [Contact us](https://www.slickerhq.com/contact) for a customized quote.
### Does Slicker offer customer support?
Yes, we provide support via email, shared Slack channel, and a dedicated support engineer.
### How do I report an issue or security vulnerability?
Please report any issues or vulnerabilities to [security@slickerhq.com](mailto:security@slickerhq.com). We take security concerns seriously and will address them promptly.
### What insights can I get from the dashboard?
The dashboard provides key metrics, including churn breakdown, subscription health, payment health, and revenue recovery performance. Learn more on the [Analytics & Reporting](/essentials/analytics) page.
### How frequently is data updated in the dashboard?
Dashboard data is updated in near real-time to ensure accuracy and relevance.
# Grace Periods
Source: https://docs.slickerhq.com/essentials/grace_periods
Decide how long Slicker keeps recovering a failed payment, and what happens when the grace period ends
### Grace Periods
When a payment fails, your billing provider decides how long to keep trying and what to do when it gives up. Those defaults are rarely the ones you would choose. Often the provider cancels or writes off the customer before Slicker, or the customer themselves, has had a fair chance to recover the payment.
Grace Periods let you set that policy yourself. You choose how long Slicker keeps working a failed invoice, and what should happen once that window closes, so recovery runs on your schedule instead of your gateway's.
### Why it matters
Billing providers apply blunt, one-size-fits-all rules when payments fail.
Some give up too early. Mandate-based and regulated recurring payment methods (for example SEPA Direct Debit, or recurring cards in India under RBI e-mandate rules) are often dropped after a single attempt, because their rules limit how and when a failed charge can be re-presented. The provider then cancels the subscription or writes off the invoice a few days later, even though the payment was still recoverable.
Others give up too late, or never. Turn that behaviour off and unpaid invoices and delinquent subscriptions build up with nothing to close them out.
A grace period sits in between. Slicker keeps recovering for as long as it is worth it, then takes a clean, deliberate action.
### How it works
Choose how many days, measured from the first failed payment, Slicker should keep recovering an invoice. Throughout this window Slicker keeps dunning and retrying using your configured [strategies](/essentials/strategies).
Pick the action Slicker applies once the grace period expires: cancel the subscription, mark the invoice as uncollectible, or leave it overdue for your team to handle.
Slicker runs the window automatically every day and applies your end-of-grace action as soon as an invoice ages out, with a full record of every decision.
### What you can configure
The number of days from the first failure that Slicker keeps recovering before it acts.
What happens to the subscription when the window closes, such as cancelling it or leaving it untouched.
What happens to the unpaid invoice, such as marking it uncollectible or leaving it overdue.
Every grace-period decision is recorded, so you always know what Slicker did, when, and why.
### Availability
Grace Periods are available today for Stripe Billing. Support for more billing providers is on the way. If you are on another provider and want early access, [get in touch](https://www.slickerhq.com/contact).
For Stripe, Slicker needs to own the recovery window, which takes two things:
1. Set Stripe to leave failed invoices overdue rather than cancelling or writing them off, so Stripe does not close the customer before your grace period is up. The [Stripe Billing integration guide](/integrations/billing/stripe) walks through it.
2. Give Slicker permission to apply your end-of-grace action. Marking an invoice uncollectible uses the `Write` on `Invoices` permission Slicker already needs. Cancelling a subscription also needs `Write` on `Subscriptions`. The [Stripe Billing integration guide](/integrations/billing/stripe) covers the exact API key setup.
### Getting started
Grace Periods are set up by our team as part of your recovery configuration. [Contact us](https://www.slickerhq.com/contact) and we will set the window and end-of-grace actions to match how your business works.
**Looking for dynamic grace periods?** Fixed windows are just the start. We are working on grace periods that adapt on their own, based on payment method, customer value, and how likely a payment is to recover, so every invoice gets the right amount of runway. If that is something you want, [talk to us](https://www.slickerhq.com/contact). It is on our roadmap and we would love your input.
With Grace Periods, you decide when a failed payment is really done, not your billing provider.
# Multi Gateway Routing
Source: https://docs.slickerhq.com/essentials/multi_gateway_routing
Learn how Slicker optimizes payment success by leveraging multiple gateways
### Multi Gateway Routing
Multi Gateway Routing allows you to use multiple payment gateways to optimize payment success rates. When a payment fails with a specific error code on one gateway, Slicker intelligently retries the payment on another gateway, increasing the likelihood of successful processing.
### How It Works
Slicker uses data from past payments, including gateway performance metrics, error codes, and transaction details, to predict which gateway has the highest probability of success for a given transaction. This dynamic routing ensures that your payments are always processed through the most effective channel.
For example if a payment fails on **Gateway A** with an error like `generic_decline`, Slicker can route the retry to **Gateway B** based on historical success rates for this type of user and this type of error.
### Availability
This feature is available for billing providers that support integration with multiple payment gateways. If your billing provider enables this capability, Slicker can manage the routing process seamlessly.
### Benefits of Multi Gateway Routing
* **Higher Success Rates**: By routing retries to gateways with higher predicted success, you recover more revenue.
* **Reduced Churn**: Successful retries mean fewer failed transactions and lower involuntary churn.
* **Data-Driven Optimization**: Decisions are based on real-time insights from your payment data and historical trends.
### Getting Started
If your billing provider supports multiple payment gateways, [contact us](https://www.slickerhq.com/contact) to enable Multi Gateway Routing. We’ll configure the feature based on your setup and provide all the necessary guidance to maximize its benefits.
***
With Multi Gateway Routing, Slicker ensures your transactions have the best chance of success, helping you recover more revenue and enhance customer satisfaction.
# Security & Compliance
Source: https://docs.slickerhq.com/essentials/security
Learn how Slicker ensures the security and compliance of your data
At Slicker, we prioritize the security and compliance of your data to provide you with peace of mind and ensure that your sensitive information is protected at all times. Below, we outline the key measures and practices we implement.
### Data Isolation
We ensure strict data segregation by using **separate data stores for each client**. This approach guarantees that your data remains isolated and secure, preventing unauthorized access between clients.
### Encryption
To safeguard your data:
* **Encryption at Rest**: All stored data is encrypted using industry-standard algorithms to protect it from unauthorized access.
* **Encryption in Transit**: We use secure protocols such as HTTPS to encrypt data transmitted between our systems and your applications.
These measures help ensure your data remains protected throughout its lifecycle.
### Role-Based Access Control (RBAC)
Slicker implements **role-based access control** to manage permissions effectively:
* **Administrator Access**: Users can manage the organization, including adding or removing users.
* **Viewer Access**: Users have read-only access to view data without making changes.
This ensures that only authorized personnel can access sensitive areas of your account. For more details, see [Account Setup](/account_setup).
### Incident Response and Security Reporting
Slicker has a robust incident response plan to quickly detect, address, and mitigate any security issues.
* **Incident Handling**: We continuously monitor for security threats and maintain a structured protocol for managing incidents.
* **Client Notification**: In the unlikely event of a security breach, we promptly notify affected clients with actionable steps.
If you discover a vulnerability or have security concerns, please report them to us at **[security@slickerhq.com](mailto:security@slickerhq.com)**. We value your input in maintaining a secure environment.
### Policy Reviews and Availability
Our security policies are reviewed regularly to stay compliant with evolving standards and best practices.
* **On-Demand Access**: Clients can request copies of our policies for review by their security teams. To request access, please [contact us](https://www.slickerhq.com/contact).
These frequent reviews ensure that we remain proactive in addressing new threats and meeting the latest compliance requirements.
### Compliance
We are committed to meeting the highest industry standards for compliance:
* **SOC 2 Compliance**: Slicker is actively working towards achieving SOC 2 certification, demonstrating our dedication to robust security, availability, and confidentiality practices.
***
Your trust is our top priority, and we continually review and enhance our security and compliance measures to stay ahead of evolving threats. If you have any questions or require more information, please don’t hesitate to [contact us](https://www.slickerhq.com/contact).
# Recovery Strategies
Source: https://docs.slickerhq.com/essentials/strategies
Learn how Slicker recovers revenue
### Recovery Strategies
At Slicker, we understand that no two businesses are the same, and we tailor our recovery strategies to meet the unique needs of each client. Our approach leverages a combination of **industry heuristics** and advanced **machine learning models** to optimize revenue recovery.
### Tailored to Your Business
Our strategies analyze numerous features to make informed and individualized decisions for each customer. Key factors include:
* **Bank Identification Numbers (BINs)**: To understand issuer-specific preferences.
* **Payment Time**: Insights into the optimal retry windows based on customer behavior.
* **Transaction Amounts**: Tailoring strategies for small versus large transactions.
* **Geography**: Adapting to regional payment trends and customer behavior.
* **Customer History**: Behavioral patterns like past successful retries and engagement levels.
* **Payment Method**: Preferences based on credit cards, direct debits, or digital wallets.
These inputs allow Slicker to make dynamic, data-driven decisions for each customer instead of relying on a one-size-fits-all strategy.
### Dynamic and Adaptive Strategies
Our retry strategies are continuously evolving. By analyzing results and incorporating feedback, we fine-tune our algorithms to improve performance over time. This ensures that your recovery efforts remain effective as market and customer conditions change.
### Client Control and Customization
While most parameters of the retry strategies are dynamically controlled by Slicker to maximize efficiency, we provide clients with the ability to set certain boundaries, such as:
* Maximum number of retries
* Minimum time between retries
For more details on configuring these settings, visit our [Configuration Page](/essentials/configuration).
### Continuous Improvement
Slicker’s algorithms are always learning from past results, ensuring that strategies are adjusted based on real-world performance. This iterative process allows us to stay ahead of emerging trends and deliver optimal results for our clients.
By combining tailored decision-making with the latest in machine learning and dynamic control, Slicker ensures that your revenue recovery strategy is as effective and unique as your business.
# 3D Secure Authentication
Source: https://docs.slickerhq.com/guides/3ds
Learn about 3D Secure (3DS) authentication and its impact on recurring payments
### Overview of 3D Secure Authentication
3D Secure (3DS) is an additional layer of security for online card transactions, requiring the cardholder to authenticate their payment, typically through a password, one-time code, or biometric verification. It is widely used in regions with stringent payment security regulations, such as:
* The **European Economic Area (EEA)** under PSD2 regulations.
* **India**, where the Reserve Bank of India mandates 3DS for all online card transactions.
### Importance of Supporting 3D Secure
Supporting 3DS is crucial for businesses that operate in regions where it is mandated or preferred. Proper implementation reduces fraud, ensures compliance with regional regulations, and builds trust with customers. Without 3DS support, merchants risk failed payments and customer dissatisfaction.
### How 3D Secure Impacts Recurring Payments
3D Secure behaves differently for recurring payments compared to one-off transactions. The first payment in a subscription typically requires 3DS authentication. Once this initial payment is authorized, subsequent recurring transactions may bypass 3DS, but this depends on the card issuer and the specifics of the transaction.
However, improper implementation of 3DS can lead to challenges. For example, errors such as **transaction\_not\_allowed** often indicate that 3DS authentication is required for a recurring payment. In such cases, the payment cannot be completed unless the customer manually re-authenticates. If these issues are not addressed promptly, they can result in payment failures and, ultimately, involuntary churn.
### What Can Be Done?
**Customer Communication**
Retrying such payments as a merchant is rarely successful since 3DS errors typically require customer interaction. The best approach is to contact affected customers and guide them through re-authenticating their payments.
**How Slicker Helps**
Slicker provides tools to manage 3DS-related issues effectively:
* **3DS Failure Analysis**: Use [Analytics → 3DS → Failures](https://app.slickerhq.com/analytics?tab=three_ds\&subtab=failures) to break down challenge failures by reason over time, cancellation code, and issuer reason code. This helps distinguish customer abandonment, issuer declines, and ACS or gateway problems.
* **Tailored Messaging**: By understanding the specific error, you can send personalized messages to customers, making the resolution process more effective.
* **Auditing Suggestions**: If many 3DS-related errors occur, it might indicate issues with your 3DS implementation or that of your billing provider. Auditing the setup can help resolve systemic problems.
### Conclusion
3D Secure authentication is a critical component of modern payment systems, especially in regions like India and the EEA where it is mandated. While it adds security, improper handling can lead to spikes in errors and failed payments. With Slicker’s insights and tools, you can address these issues proactively, ensuring smoother transactions and improved customer experience.
# Email dunning launch guide
Source: https://docs.slickerhq.com/guides/email-dunning-launch-guide
Configure, test, launch, and monitor recovery emails
Use this guide to take recovery emails from initial setup to production. It covers your sending domain, DNS authentication, engagement tracking, sender identity, branding, Slicker's initial scenarios and templates, testing, launch, and reporting.
For the product concepts first, read the [Emails overview](/essentials/emails).
## Before You Start
Gather the following before configuring emails:
* Access to the DNS provider for the domain you will use.
* A monitored support address for customer replies.
* Your logo, brand color, help text, signature, and footer links.
* The payment or billing-page URL customers should reach from the CTA.
* An owner who will review scheduled sends and recovery performance after launch.
If another system already sends payment-recovery emails, decide which cohorts each system owns. Running both systems for the same customer and failure can create duplicate messages. A controlled comparison is fine, but define the split before enabling Slicker scenarios.
## Phase 1: Set Up the Sending Domain
### Choose a Dedicated Subdomain
Use a subdomain such as `billing.example.com`, `payments.example.com`, or `recovery.example.com`.
This separates recovery-email reputation from your root domain and from other important mail such as login, support, and marketing messages. It also lets Slicker serve tracked images and links from a domain aligned with the sender.
A root domain such as `example.com` can be used only after acknowledging the deliverability trade-off. Open and click tracking cannot be configured on a root domain, so a dedicated subdomain is strongly recommended.
### Add the Domain
Go to [Emails → Settings](https://app.slickerhq.com/dunning/settings) and select **Add Your First Domain** or **Add another domain**.
Enter the subdomain, for example `billing.example.com`. Do not enter a protocol, path, or email address.
Slicker generates the exact type, name, value, priority, and TTL that your DNS administrator should publish.
### Publish the DNS Records
| Record group | Purpose | Requirement |
| - | - | - |
| SPF and DKIM | Authorize sending and cryptographically authenticate each message. | Required before sending. |
| DMARC | Tells receiving servers how to handle failed authentication and helps prevent spoofing. | Recommended. Start with the policy Slicker provides. |
| Click & Open Tracking | Routes tracked images and links through your sending subdomain. | Optional, but required for engagement metrics. Available only for a subdomain. |
Add every record exactly as displayed in Slicker. Most DNS providers automatically append your DNS zone to the record name, so the Settings page shows names without the zone where appropriate. If verification cannot find a record, check whether your provider expects the full hostname instead.
DNS changes are not immediate. Propagation can take up to 48 hours depending on the provider and existing TTL. A pending record during that window does not necessarily mean the value is wrong.
After publishing the records, return to the domain's **DNS Records** panel and select **Verify DNS**. The UI shows each record as pending or verified. If a record remains pending after propagation:
1. Compare its type, name, value, priority, and TTL with the Slicker value.
2. Check that the provider did not append the zone twice, such as `record.billing.example.com.example.com`.
3. If you used the short record name, try the full hostname, or vice versa, based on your provider's convention.
4. Remove conflicting records only after confirming they are not used by another mail service.
5. Re-run **Verify DNS**.
SPF and DKIM must both verify before Slicker can send recovery emails from the domain.
### Configure the Sender Identity
Complete the domain's **Email Settings**:
* **From email prefix** — use a recognizable purpose such as `billing`, `payments`, or `subscriptions`. Avoid `noreply` or `no-reply`; they discourage responses and can hurt trust and deliverability.
* **Friendly name** — use the brand name customers recognize, such as `Acme Billing`.
* **Reply-To** — use an active, monitored mailbox that can resolve billing questions.
* **BCC** — optionally add comma-separated internal recipients when your compliance or audit process requires a copy of every message.
If you configure multiple domains, set the normal fallback domain as **Default**. A non-default domain can be assigned to a specific email configuration. The default domain cannot be deleted until another domain becomes the default.
## How Open and Click Tracking Works
When tracking DNS is configured, links and images in a recovery email use your sending subdomain rather than an unrelated third-party hostname. Behind the scenes, Slicker proxies those requests through its tracking infrastructure:
* An **open** is recorded when the email's tracking image is requested.
* A **click** is recorded when a recipient follows a tracked CTA, content, or footer link.
* Analytics excludes activity identified as automated bot traffic from engagement charts.
Tracking does not change whether the email can be sent. Without the tracking records, recovery emails continue to send, but opens and clicks are not collected.
Open and click data is approximate. Some email clients block remote images, and security scanners may prefetch images or links. Use engagement rates to compare trends and copy variants, not as proof that an individual person read a message.
## Phase 2: Create the Email Configuration
Go to [Emails → Styling & configuration](https://app.slickerhq.com/dunning/styling). An email configuration combines a sending domain with the shared visual and CTA settings applied to templates.
Use a name that identifies the brand or business unit. Select a verified sending domain and make the configuration the default if scenarios should use it unless another is assigned.
Upload a logo or provide a hosted logo URL, then choose its height and alignment. Select an email-safe font and your CTA button color.
Add clear button text and a valid HTTPS billing or payment-update URL. Leave button text empty only when the email should have no CTA.
Add help text, a recognizable signature, and valid footer links. Remove placeholder `#` links before launch.
Review the live preview and send a test email to real inboxes used by your team. Save the configuration when the sender, links, images, and replies behave correctly.
Create separate configurations when brands, business units, domains, or CTA destinations need different presentation. Each scenario can use a named configuration or the default.
## Phase 3: Review Scenarios and Templates
Slicker prepares an initial set of scenarios and templates for your business during onboarding. Open [Emails → Scenarios](https://app.slickerhq.com/dunning/scenarios) to review them before launch.
### Review Every Scenario
The scenario list shows its name, payment-failure trigger, priority, template count, and enabled status. **Detailed View** adds performance metrics when data is available.
Open a scenario to review or change:
| Setting | What it controls |
| - | - |
| Name and description | How the scenario is identified by your team. |
| Trigger | The payment-failure category the scenario handles. |
| Priority | Which scenario wins when the same candidate matches more than one enabled scenario. Higher values are evaluated first. |
| Email configuration | The sending domain, branding, and CTA configuration used for its templates. |
| Enabled | Whether the scenario can schedule recovery emails. |
Keep a scenario disabled while its audience or copy is still under review. When priorities overlap, confirm that the most specific or important scenario has the higher value.
### Review and Edit Templates
Each scenario contains its email templates. Open a template to review the rendered preview and edit its name, description, subject, and body. The editor lists the variables available for customer, payment, invoice, and company data.
Templates use a sequence position:
* **First** — the first-touch message.
* **Middle** — a follow-up while recovery remains open.
* **Final** — the last message in the sequence.
You can add another template from the scenario page and choose its sequence position, priority, and initial enabled status. When several enabled templates are available for the same step, Slicker can select between those copy variants using their configured traffic weights.
For each template:
1. Use a subject that clearly identifies the account or payment action without exposing sensitive data.
2. Explain what failed and what the customer should do next.
3. Keep the CTA consistent with the action in the copy.
4. Check that every variable renders correctly in the preview.
5. Send a test email and open it on both desktop and mobile.
A successful test verifies rendering and delivery of the test message. It does not prove that every production customer has complete source data or that every customer-specific URL can be resolved.
## Phase 4: Validate and Launch
Before enabling production scenarios, confirm:
* The dedicated subdomain is in use.
* SPF and DKIM show as verified; DMARC is published.
* Tracking DNS is verified if you need open and click metrics.
* The friendly name, from address, reply-to address, and optional BCC list are correct.
* Every active scenario points to the intended email configuration.
* Every active scenario has suitable enabled templates for its sequence.
* Subjects, variables, logo, CTA, signature, and footer links render correctly in test inboxes.
* Static and customer-specific CTA destinations use HTTPS and lead to the intended account.
* Another recovery-email system will not message the same customers unintentionally.
* Your support and billing teams know what customers will receive and where replies will arrive.
Enable the agreed scenarios after the checklist passes. For a cautious rollout, begin with a limited audience coordinated with Slicker, review the first scheduled and sent emails, and expand after the content and recovery results look correct.
## Phase 5: Monitor Email Operations
### Overview
The [Emails overview](https://app.slickerhq.com/dunning) shows:
* **Scheduled emails** and the number of unique customers represented.
* **Invoices recovered** and the recovered amount.
* **Total emails sent**, including the last 30 days.
* **Email open rate** and **email click rate** when engagement reporting is available.
The tables below the cards provide quick access to recent scheduled and sent messages.
### Scheduled and Sent Emails
Use **Scheduled Emails** to inspect pending messages before they run. Filter or sort by recipient, scheduled time, amount, invoice, or scenario, then open a preview to verify the rendered message.
Use **Sent Emails** to inspect completed sends, the executed time, scenario and invoice context, and whether the associated invoice was recovered. Provider acceptance means the provider accepted Slicker's send request; it does not guarantee inbox placement or prove that the recipient read the email.
### Analytics
Use the date picker on [Emails → Analytics](https://app.slickerhq.com/dunning/analytics) to review:
* Sent emails by scenario and over time.
* Recovery rate by scenario.
* Scheduled volume for the next seven days.
* Sends by hour and day of week in UTC.
* Monthly recovered-invoice count and recovered amount.
* Open and click rates over time, clicks by link type, open rate by scenario, and click-to-open rate by template when tracking data is available.
Review scenario results over a meaningful sample rather than reacting to a few sends. Compare recovery rate alongside volume: a narrowly targeted scenario may have a high rate but affect fewer invoices.
## Dynamic Billing-Page URLs
A static button URL works when every recipient can start from the same login or billing-portal page. Use a dynamic billing-page destination when each customer needs a different CTA, such as a signed payment-update URL stored on their Customer.io profile.
Slicker supports customer-specific URLs stored in a **Customer.io attribute**. At send time, Slicker looks up the recipient by email, reads the configured attribute, adds any configured query parameters, and validates the result against your destination-host allowlist. The email contains an expiring, opaque Slicker redirect instead of exposing the resolved URL in email-processing history or tracking data.
To configure a destination:
1. In Customer.io, enable email identifiers and populate an attribute containing an absolute HTTPS billing-page URL for each customer. Create a dedicated Customer.io App API key for Slicker.
2. Open [Emails → Styling & configuration](https://app.slickerhq.com/dunning/styling), edit an email configuration, and expand **Call to Action Button**.
3. Keep a valid static **Button URL** for disabled and shadow operation. Under **Dynamic billing-page destination**, select **Manage** and create a **Customer.io attribute** destination.
4. Choose the Customer.io region, enter the attribute name and App API key, and add any query parameters as one `key=value` pair per line.
5. Add every permitted billing-page hostname. A hostname must match this allowlist before Slicker uses the resolved URL; prefix an entry with `.` to allow its subdomains.
6. Choose whether a failed resolution should fail the email or use an explicitly configured static fallback. Set an appropriate link lifetime, then save the destination in **Shadow** mode.
7. Run the end-to-end connection test, then allow representative recovery emails to run in Shadow mode. Shadow mode validates live lookups while recipients continue to receive the static URL. A manual test does not count as live shadow evidence.
8. After the saved configuration has passed both the connection test and a live shadow resolution, change it to **Active** and save the email configuration with the destination selected.
Changing provider settings starts a new validation cycle. Move the destination back through Shadow mode before reactivating it. To stop using customer-specific links, select the static button URL or set the destination to Disabled.
## Email-Outcome Webhooks
Use an email-outcome webhook when your system should react after Slicker attempts a recovery email—for example, to send an SMS through your existing provider. Slicker sends the event; your system remains responsible for phone-number storage, consent, quiet hours, message delivery, and recipient deduplication.
Configure the webhook in [Emails → Webhooks](https://app.slickerhq.com/dunning/webhooks):
1. Enter one public HTTPS endpoint and a Bearer token. Local, private-network, and redirecting destinations are rejected. The token is write-only and is sent in the `Authorization: Bearer …` header.
2. Choose whether to emit after every email-provider attempt or only after the provider accepts the email. Provider acceptance is not inbox delivery, and a later bounce does not emit another event.
3. Choose the payload copy source. Slicker can include a custom message for another channel, include the rendered subject and body of the selected recovery email, or send only structured event fields so your endpoint can compose its own message.
4. Set the default for all scenarios, then add per-scenario enablement or message overrides where needed. New scenarios inherit the default.
5. Save the configuration, select a scenario, and send a test event. Test deliveries are marked with `test: true`, appear in delivery history, and are not retried.
6. Enable the endpoint after your receiver validates the sample payload and returns a `2xx` response.
Production events use the `dunning_email_attempted` type and include a stable event ID plus structured scenario, customer, invoice, and email-attempt data. Depending on the copy source, `data.message` or `data.emailCopy` is also present:
```json theme={null}
{
"id": "whdr_01...",
"type": "dunning_email_attempted",
"created": "2026-09-24T10:30:00Z",
"data": {
"schemaVersion": 1,
"test": false,
"dunningActionId": "dact_01...",
"scenario": { "id": "dsc_01...", "name": "Card expired" },
"customer": { "id": "cus_123", "email": "customer@example.com" },
"invoice": { "id": "inv_123", "amountMinorUnits": 1299, "currency": "USD" },
"email": {
"templateId": "etpl_01...",
"result": "accepted",
"attemptedAt": "2026-09-24T10:29:58Z"
},
"message": "Please update your payment method."
}
}
```
Webhook delivery is at least once. Slicker sends the same stable event ID in the body and the `Idempotency-Key` header. Persist that value before triggering SMS or another customer-facing action. Failed production deliveries are retried with exponential backoff, up to five total attempts, without delaying or changing the original email result.
Delivery history shows the payload, attempt count, response status, and any truncated error. It contains customer data and should be available only to authorized users.
## Ongoing Review
After launch, establish a regular review cadence:
* Check pending volume for unexpected spikes or gaps.
* Investigate failed sends and invalid customer data.
* Compare recovery rate and recovered amount by scenario.
* Compare copy variants only after they have meaningful volume.
* Treat open and click rates as directional and prioritize paid-invoice outcomes.
* Re-test sender identity, CTA destinations, and webhooks after configuration changes.
* Update scenarios and templates as products, billing flows, or support policies change.
For platform-wide recovery reporting, continue with [Analytics & Reporting](/essentials/analytics).
# Dealing with Expired Cards
Source: https://docs.slickerhq.com/guides/expired_cards
Learn how to detect, understand, and address the challenges of expired payment methods
### How to Detect Expired Cards
Expired cards can sneak up on any subscription business, but identifying them early is key to keeping your revenue flowing. Here are some ways to detect them:
* **General Approach**: Review failed payments for error codes indicating card expiration. Most payment processors include these details in their logs.
* **In Slicker**: Use the **Payments Analytics** feature to identify transactions failing due to expired cards. Learn more about this tool on the [Analytics & Reporting](/essentials/analytics) page.
### Implications of Expired Cards
Expired cards often lead to payment failures, which can result in:
* **Customer Churn**: In most cases, manual intervention from the customer is required to update their card details. Without this, they may unintentionally churn.
* **Revenue Impact**: Every failed transaction is a potential hit to your bottom line.
### What Can Be Done?
**Reactive Solutions**
* **Retries**: Unfortunately, retries won’t help with expired cards unless the user updates their billing details.
* **Account Updater Services**: Some payment processors, like Stripe, offer tools to automatically update card details when available. These tools are helpful but don’t cover every scenario - for example, if a customer changes bank, or their new card is not linked to their account.
* **Dunning Emails**: Sending follow-up emails after a failed payment can help recover some payments, but this approach only works after the failure has already occurred and is not a guaranteed success.
**Proactive Solutions**
A proactive approach can reduce the impact of expired cards. By identifying cards that are about to expire and notifying customers in advance, you can prevent failed payments before they happen.
Proactive communication not only reduces failed payments but also enhances the customer experience by ensuring a seamless subscription process.
In Slicker you can use the [Expiring Cards tab](https://app.slickerhq.com/revenue-recovery?tab=expiring-cards) on the **Revenue Recovery** page to see which customers’ cards are nearing expiration. Combine this with insights from the [Analytics & Reporting](/essentials/analytics) page to notify customers ahead of time.
***
Slicker helps you reduce involuntary churn and dealing with expired cards is one of the ways we do this.
# High Number of Insufficient Funds Errors
Source: https://docs.slickerhq.com/guides/insufficient_funds
Learn how to handle and recover from insufficient funds payment errors
### How to Detect Insufficient Funds Errors
Detecting insufficient funds errors follows a similar process to identifying other payment issues:
* **General Approach**: Look for error codes related to insufficient funds in your payment processor logs or your internal BI platform.
* **In Slicker**: Use the **Payments Analytics** feature to identify patterns and monitor transactions failing due to insufficient funds. Learn more on the [Analytics & Reporting](/essentials/analytics) page.
### What Is the Impact?
Insufficient funds errors are classified as "soft errors," meaning they can often be recovered eventually. However, there are risks:
* **Revenue at Risk**: Repeated failures may lead to involuntary churn or delay in cash flow.
* **Churn Impact**: Failed payments that aren’t recovered result in lost revenue and potentially lost customers.
Understanding and addressing these errors quickly can minimize their impact on your business.
### What Can Be Done?
**Dunning Emails**
Sending follow-up emails to notify customers about failed payments can prompt them to resolve the issue. However, this approach depends on the customer taking action and is not always reliable.
**Retries**
Retries can be highly effective for insufficient funds errors, provided they are timed correctly. Success often depends on factors such as:
* **Country**: In the United Kingdom, for example, consumer debit cards might succeed when retried on the last working day of the month (typical pay day).
* **Amount**: Larger amounts may require a different retry cadence compared to smaller transactions.
* **Card Type**: Prepaid, debit, and credit cards may have varying retry success windows.
* **Customer Behavior**: Past payment patterns can inform the optimal retry schedule.
### How Slicker Helps
At Slicker, we ingest payment data, analyze customer behavior, and consider factors like country-specific trends, card types, and transaction history. Using this data, we make intelligent retry decisions that maximize the likelihood of recovery and help you recover more revenue efficiently.
By automating the process and leveraging smart algorithms, Slicker ensures you stay ahead of insufficient funds challenges.
# High Number of Not Sent to Network Errors
Source: https://docs.slickerhq.com/guides/not_sent_to_network
Understand why payments are blocked before reaching the network and how to manage them effectively
### Why Payments Aren’t Sent to the Network
"Not Sent to Network" errors occur when a payment is blocked before it even reaches the card network or issuer for processing. These blocks are typically initiated by payment processors or banks due to potential fraud detection or transaction anomalies. While these mechanisms are essential for preventing fraudulent transactions, they can sometimes unintentionally block legitimate payments.
#### Typical Payment Flow
The diagram below illustrates the usual flow of a payment and where the "Not Sent to Network" issue occurs:
```mermaid theme={null}
flowchart LR
BillingProvider[Billing Provider] -->|Payment Info| PaymentProcessor[Payment Processor]
PaymentProcessor -->|Fraud Checks| Network[Card Network]
Network --> Issuer[Issuer Bank]
PaymentProcessor -.->|Blocked| Blocked[Payment Not Sent to Network]
```
1. The **Customer** submits their payment details.
2. The **Payment Processor** validates the payment and performs fraud checks.
3. If approved, the payment is sent to the **Card Network** (e.g., Visa, MasterCard).
4. The **Issuer Bank** authorizes or declines the payment.
If a payment is flagged during fraud checks by the **Payment Processor**, it is **Not Sent to the Network**, resulting in a block.
### Common Reasons for "Not Sent to Network" Errors
Here are some common reasons why payments might be blocked at the processor stage:
* **Fraud Detection Mechanisms**: Transactions flagged due to unusual patterns or mismatched details.
* **Issuer Bank Policies**: Blocks based on spending limits, regional restrictions, or account activity.
* **Unusual Transaction Amounts**: Amounts outside the customer’s typical range.
* **Repeated Payment Attempts**: Multiple retries in a short timeframe.
* **Behavioral Changes**: Sudden shifts in the customer’s purchasing habits.
* **Incomplete or Incorrect Data**: Errors like invalid CVV or expired card details.
### The Impact of False Positives
False positives can disrupt legitimate payments, causing:
* Frustration for customers.
* Increased involuntary churn.
* Revenue loss due to unnecessary payment blocks.
### How Slicker Can Help
Slicker analyzes flagged payments and selectively approves legitimate ones. It evaluates risk scores, transaction amounts, and customer history to minimize disruptions and ensure legitimate payments are processed.
***
By understanding the payment flow and addressing false positives proactively, you can improve your approval rates and reduce churn.
# Integration setup
Source: https://docs.slickerhq.com/integration_setup
Integrations are how we gain insights into lost revenue and automate the recovery process.
Adding an integration takes less than 5 minutes, requires no code, and looks something like this:
Generate API credentials with the appropriate permissions in your provider.
Create an integration in Slicker that uses these credentials.
Slicker will start syncing data, providing insights, and recovering revenue. All without you lifting a finger.
For a more detailed guide for each provider, check out the individual integration pages below.
### Billing & subscription providers
The bread and butter of any subscription business. We integrate with the best billing and subscription providers to manage your revenue and reduce churn.
}
href="/integrations/billing/chargebee"
>
Automate revenue recovery for your Chargebee subscriptions.
}
href="/integrations/billing/recharge"
>
>
Automate revenue recovery for your Shopify or BigCommerce subscriptions managed in Recharge.
}
href="/integrations/billing/recurly"
>
Automate revenue recovery for your Recurly subscriptions.
} href="/integrations/billing/stripe">
Automate revenue recovery for your subscriptions managed by Stripe Billing.
}
href="/integrations/billing/zuora"
>
Automate revenue recovery for your Zuora subscriptions.
}
href="/integrations/billing/custom"
>
Integrate with a custom in-house billing system.
### Payment providers
We integrate with payment providers to gain more accurate insights into why payments fail and how to recover them.
}
href="/integrations/payments/adyen"
>
Sync Adyen payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/authorize"
>
Sync Authorize.net payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/braintree"
>
Sync Braintree payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/cybersource"
>
Sync Cybersource payments data t oget more accurate insights and recover revenue.
} href="/integrations/payments/stripe">
Sync Stripe payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/worldpay"
>
>
Sync Worldpay payments data to get more accurate insights and recover revenue.
### Missing an integration?
We're continuously expanding our integrations. If you have a specific integration in mind, please let us know by [contacting us](https://www.slickerhq.com/contact).
# Chargebee
Source: https://docs.slickerhq.com/integrations/billing/chargebee
Learn how to connect Chargebee to Slicker
### Prerequisites
Slicker integrates with Chargebee via an API key. Creating a Chargebee API key requires a user who is an
`Admin` or `Owner` of the Chargebee site.
### Create credentials
1. Create a new API key by going to `Settings > Configure Chargebee > API Keys and Webhooks` and then click on the `API Keys` tab.
Then click on the `Add an API Key` button.
2. Give the API key a meaningful name like `Slicker`.
3. Select the `type` of the key as `Full-Access Key` with either `All` or `Write Key` permissions.
If the credentials are read-only, Slicker will not be able to retry failed transactions and recover revenue.
It should look something like this.
4. Click `Create Key` and copy the generated key - we will need it later.
### Create integration in Slicker
1. Go to the Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Chargebee` 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. Enter your Chargebee site - for example, if you are using `https://{yourcompany}.chargebee.com`, enter `yourcompany`.
6. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Chargebee 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.
# Slicker API Overview
Source: https://docs.slickerhq.com/integrations/billing/custom/api/overview
Custom billing system API endpoints for sending data to Slicker
## API Basics
The Slicker API is a RESTful HTTP API that allows you to integrate your custom billing system with Slicker's retry optimization and revenue recovery platform.
* **Protocol**: HTTPS only (unencrypted HTTP is not supported)
* **Base URL**: `https://api.slickerhq.com`
* **Data Format**: All requests and responses use JSON format
* **Character Encoding**: UTF-8
## Authentication
The API uses Bearer token authentication. You'll receive an API key from Slicker which should be included in all API requests via the Authorization header:
```
Authorization: Bearer YOUR_API_KEY
```
Your API key grants access to sensitive data and should be kept secure. Do not share your API key in publicly accessible areas such as GitHub, client-side code, or in API requests to other services.
## API Endpoints
Slicker's custom billing API includes the following primary endpoints:
| Endpoint | Description |
| - | - |
| `/v1/invoices` | Send invoice data to Slicker |
| `/v1/subscriptions` | Send subscription data to Slicker |
| `/v1/transactions` | Send transaction data to Slicker |
| `/v1/recovery_actions` | Retrieve recommended recovery actions |
Each endpoint accepts specific data formats as detailed in the [API Reference](/integrations/billing/custom/api/slicker/add_invoices).
## Request Limits
* **Maximum Batch Size**: Each API request can contain up to 200 items (invoices, subscriptions, or transactions)
* **Rate Limiting**: The API implements rate limiting to ensure stable performance for all users
* **Concurrency**: We recommend no more than 5 concurrent requests per second
If you exceed these limits, the API will return a `429 Too Many Requests` response. Implement appropriate backoff strategies in your integration.
## Best Practices
### Data Synchronization
* **Batching**: Group related data in batches for more efficient processing
* **Frequency**: Send data in real-time or near real-time for optimal recovery results
* **Completeness**: Include as many optional fields as possible for better recovery strategies
### Error Handling
* Implement retry logic with exponential backoff for failed requests
* Log all API interactions for troubleshooting purposes
* Monitor API responses for error patterns
### Testing
Before going live, thoroughly test your integration using:
1. Historical data synchronization with the Slicker API
2. Real-time event transmission
3. Query for recovery actions
## API Versioning
The API version is included in the URL path (e.g., `/v1/invoices`). When new versions are released, we'll provide appropriate migration guidance and timelines.
## Support
For API support or questions:
* Check the detailed [API Reference](/integrations/billing/custom/api/slicker/add_invoices)
* Contact your Slicker integration specialist
* Email [support@slickerhq.com](mailto:support@slickerhq.com)
## Next Steps
* Review the [API Reference](/integrations/billing/custom/api/slicker/add_invoices) for detailed endpoint specifications and data formats
* Learn about the [Webhook Implementation](/integrations/billing/custom/api/webhook) required for receiving retry instructions
# Add invoices
Source: https://docs.slickerhq.com/integrations/billing/custom/api/slicker/add_invoices
api.yaml POST /v1/invoices
# Add subscriptions
Source: https://docs.slickerhq.com/integrations/billing/custom/api/slicker/add_subscriptions
api.yaml POST /v1/subscriptions
# Add transactions
Source: https://docs.slickerhq.com/integrations/billing/custom/api/slicker/add_transactions
api.yaml POST /v1/transactions
# List recovery actions
Source: https://docs.slickerhq.com/integrations/billing/custom/api/slicker/list_recovery_actions
api.yaml GET /v1/recovery_actions
# Webhook Implementation
Source: https://docs.slickerhq.com/integrations/billing/custom/api/webhook
How to implement webhook endpoints for receiving events from Slicker
## Overview
As part of the Slicker integration, you need to implement webhook endpoints that Slicker will call to deliver optimization decisions and dunning instructions to your billing system. All webhook events use a unified structure with a consistent envelope format.
```mermaid theme={null}
sequenceDiagram
participant S as Slicker
participant Y as Your Webhook Endpoints
participant B as Your Billing System
S->>Y: POST /recovery_action (payment retry)
Y->>Y: Validate request & authenticate
Y->>B: Forward event data
B->>B: Process event based on type
Y->>S: Return 200 OK response
S->>Y: POST /pause_collection (pause retries)
Y->>B: Forward event data
Y->>S: Return 200 OK response
S->>Y: POST /complete_dunning (dunning complete)
Y->>B: Forward event data
Y->>S: Return 200 OK response
```
## Implementation Requirements
### Endpoint Configuration
* **Protocol**: HTTPS only (unencrypted HTTP is not supported)
* **Method**: POST
* **URL**: You define the webhook URL used for all event types and provide it to Slicker during integration setup
* **Content Type**: application/json
### Authentication
Your webhooks must implement one of the following authentication methods to ensure that only Slicker can trigger events:
#### Bearer Token Authentication
```
Authorization: Bearer YOUR_WEBHOOK_TOKEN
```
You'll provide this token to Slicker during integration setup.
#### Basic Authentication
```
Authorization: Basic base64(username:password)
```
You'll provide the username and password to Slicker during integration setup.
## Unified Event Structure
All webhook events use a consistent envelope format:
```json theme={null}
{
"id": "evt_2uqkAo1bwllmzrgV2qtGv48DtGI",
"type": "recovery_action",
"created": "2023-01-18T09:00:00Z",
"data": {
// Event-specific fields
}
}
```
### Common Fields
| Field | Type | Description |
| - | - | - |
| `id` | string | Unique identifier for this webhook event |
| `type` | string | Event type identifier (e.g., `recovery_action`, `pause_collection`, `complete_dunning`) |
| `created` | string | ISO 8601 timestamp of when the webhook was created |
| `data` | object | Event-specific payload that varies based on the event type |
## Event Types
### Recovery Action Event
Sent when a payment should be retried:
```json theme={null}
{
"id": "evt_2uqkAo1bwllmzrgV2qtGv48DtGI",
"type": "recovery_action",
"created": "2023-01-18T09:00:00Z",
"data": {
"invoiceId": "inv_12345678",
"subscriptionId": "sub_12345678",
"actionSuggestion": "ACTION_SUGGESTION_RETRY",
"idealRetryTime": "2023-01-18T09:30:00Z"
}
}
```
**Action Suggestion Values:**
* `ACTION_SUGGESTION_RETRY`: Attempt to process the payment again
* `ACTION_SUGGESTION_CARD_CHANGE`: Request an updated payment method from the customer
* `ACTION_SUGGESTION_UNSPECIFIED`: No specific action recommended
### Pause Invoice Collection Event
Sent when automatic retries should be paused. This is used during A/B tests to control which invoices should be retried by Slicker vs your system.
```json theme={null}
{
"id": "evt_3vrkBp2cxmmn0shW3ruHw59EuHJ",
"type": "pause_collection",
"created": "2023-01-18T10:00:00Z",
"data": {
"invoiceId": "inv_12345678"
}
}
```
### Complete Dunning Event
Sent when dunning should be completed before the dunning period ends.
```json theme={null}
{
"id": "evt_4wslCq3dynn1ptiX4svIx60FvIK",
"type": "complete_dunning",
"created": "2023-01-18T11:00:00Z",
"data": {
"invoiceId": "inv_12345678"
}
}
```
## Response Format
Your webhook should respond with a 200 OK status code and an optional JSON body if the event was successfully received:
```json theme={null}
{
"success": true,
"message": "Event processed successfully"
}
```
## Implementation Best Practices
### Security
* Use HTTPS with valid SSL certificates
* Set up authentication with strong credentials
* (Optional) Implement IP whitelisting (Slicker can provide IP ranges)
### Reliability
* Acknowledge receipt quickly and process asynchronously
* Implement idempotent processing based on event `id` to handle potential duplicate webhooks
* Return appropriate error codes if requests can't be processed
* Slicker will retry failed webhooks, so ensure idempotency
## Retry Policy
Slicker automatically retries failed webhook deliveries using a two-phase strategy: immediate synchronous retries followed by delayed asynchronous retries.
A delivery is considered successful when your endpoint returns any `2xx` HTTP status code within **30 seconds**. Any other response (or a timeout/connection error) is treated as a failure and triggers retries.
### Recovery Action Events
Recovery action webhooks are retried up to **6 total attempts**:
| Attempt | Type | Delay after previous attempt |
| - | - | - |
| 1 | Initial delivery | — |
| 2 | Sync retry | \~100ms |
| 3 | Sync retry | 5 seconds |
| 4 | Sync retry | 15 seconds |
| 5 | Async retry | 15 minutes |
| 6 | Async retry | 30 minutes |
After 6 failed attempts, the webhook is marked as **exhausted** and no further retries occur.
### Pause Collection & Complete Dunning Events
These event types are retried up to **7 total attempts**:
| Attempt | Type | Delay after previous attempt |
| - | - | - |
| 1 | Initial delivery | — |
| 2 | Sync retry | \~100ms |
| 3 | Sync retry | 5 seconds |
| 4 | Sync retry | 15 seconds |
| 5 | Async retry | 15 minutes |
| 6 | Async retry | 30 minutes |
| 7 | Async retry | 1 hour |
After 7 failed attempts, the webhook is marked as **exhausted** and no further retries occur.
### Handling Retries
Each webhook event has a unique `id` field. Use this to deduplicate events on your side — you may receive the same event more than once if your endpoint returned a success after Slicker's timeout window or due to network issues.
* **Respond quickly**: Return a `2xx` within 30 seconds. If processing takes longer, acknowledge receipt immediately and process the event asynchronously.
* **Idempotency**: Store the event `id` and skip processing if you've already handled it.
* **Monitoring**: If all retries are exhausted, the event is marked as failed in Slicker's delivery logs. Contact support if you experience persistent delivery failures.
### Monitoring
* Set up alerts for failed webhook calls
* Monitor webhook endpoint uptime
## Reference Documentation
For detailed API specifications, see:
* [Recovery Action Event](/integrations/billing/custom/api/your/webhooks/recovery_action)
* [Pause Collection Event](/integrations/billing/custom/api/your/webhooks/pause_collection)
* [Complete Dunning Event](/integrations/billing/custom/api/your/webhooks/complete_dunning)
## Support
If you need assistance with your webhook implementation:
* Contact your Slicker integration specialist
* Email [support@slickerhq.com](mailto:support@slickerhq.com)
# Webhook API (Deprecated)
Source: https://docs.slickerhq.com/integrations/billing/custom/api/your/deprecated/overview
**This API version is deprecated.** Please migrate to [the latest Webhook definitions](/integrations/billing/custom/api/your/webhooks) which provides a unified webhook endpoint for all event types.
## What's Changing
The v1 webhook API used separate endpoints for each event type:
* `/recovery_action` - Payment retry instructions
**v2 improvements:**
* Single unified `/events` endpoint for all webhook events
* Consistent event envelope structure with `id`, `type`, `created`, and `data` fields
* Additional event types including `complete_dunning`
* Easier to extend and maintain
## Migration Path
To migrate from v1 to v2:
1. Update your webhook endpoint to accept POST requests at a single `/events` path
2. Parse the `type` field in the request body to determine the event type
3. Handle event-specific data from the `data` field based on the event type
4. Test with all three event types: `recovery_action`, `pause_collection`, and `complete_dunning`
# Handle recovery action
Source: https://docs.slickerhq.com/integrations/billing/custom/api/your/deprecated/recovery_action
v1.yaml POST /recovery_action
# Complete Dunning Event
Source: https://docs.slickerhq.com/integrations/billing/custom/api/your/webhooks/complete_dunning
v2.yaml webhook complete_dunning
This webhook is triggered when dunning should be completed for an invoice.
Sent when a hard error occurs or the maximum number of retries is reached.
# Pause Invoice Event
Source: https://docs.slickerhq.com/integrations/billing/custom/api/your/webhooks/pause_collection
v2.yaml webhook pause_collection
This webhook is triggered by Slicker to instruct the merchant to pause automatic retries for a specific invoice.
# Recovery Action Event
Source: https://docs.slickerhq.com/integrations/billing/custom/api/your/webhooks/recovery_action
v2.yaml webhook recovery_action
This webhook is triggered by Slicker when its algorithms determine a payment should be retried.
# Launch guide
Source: https://docs.slickerhq.com/integrations/billing/custom/launch_guide
Plan, build, test, and roll out a custom billing integration
Use this guide when your billing system is custom-built or heavily customized. It turns the custom integration pieces into an end-to-end launch plan: data sync, recovery decisions, webhook handling, historical data, testing, rollout, and monitoring.
For endpoint details, see the [custom API reference](/integrations/billing/custom/api/overview). For the overall integration model, start with the [custom billing overview](/integrations/billing/custom/overview).
## What You Are Building
A custom billing integration has four core parts:
1. **Data sync**: Send subscriptions, invoices, and transaction attempts to Slicker.
2. **Recovery decision path**: Receive Slicker's retry and dunning recommendations by webhook, or query them from the API.
3. **Historical backfill**: Send enough past billing and payment activity for Slicker to understand your recovery patterns.
4. **Operational monitoring**: Track data freshness, webhook delivery, recovery action execution, and mismatches against your billing system.
Connect payment processor integrations whenever possible. Processor data gives Slicker richer authorization outcomes, gateway error codes, scheme response codes, issuer details, and payment-method metadata.
## Phase 1: Confirm the Integration Shape
Before writing code, agree the following details with your Slicker integration team:
| Decision | What to Confirm |
| - | - |
| Canonical IDs | Which IDs uniquely identify customers, subscriptions, invoices, and transactions in your billing system. |
| Sync model | Whether you will send events in near real time, run scheduled batch syncs, or use both. |
| Payment source of truth | Which system owns final payment state and transaction outcomes. |
| Recovery execution | Whether your system will execute retries from webhooks, poll recovery actions, or use a hybrid model. |
| Dunning ownership | Which system sends recovery emails and when collection should pause or complete. |
| Historical window | How many months of invoices, subscriptions, and transactions to backfill before launch. |
| Rollout cohort | Whether launch starts with all traffic or a subset by product, country, plan, or business entity. |
The most important rule is stable identity. Use the same external IDs for historical backfill and future live events so Slicker can connect invoices, transactions, and recovery outcomes over time.
## Phase 2: Build the Data Sync
Send data in dependency order when possible:
Send the active and historical subscriptions that invoices belong to. Include customer, plan, currency, billing cycle, status, and lifecycle timestamps when available.
Send invoices with their current collection state, amount, currency, due date, subscription ID, customer ID, and timestamps.
Send each payment attempt, including failed attempts and retries. A transaction is one authorization attempt; multiple retries for the same invoice should be sent as separate transactions.
Send updates when invoice status, subscription status, transaction outcome, customer details, or payment-method context changes.
### Sync Rules
* Treat API requests as idempotent from your side: retry failed requests safely and keep your external IDs stable.
* Preserve original event timestamps. Do not replace historical timestamps with the sync time.
* Send failed and successful payment attempts. Recovery analysis needs both sides of the funnel.
* Keep batch sizes within API limits. See the [custom API overview](/integrations/billing/custom/api/overview#request-limits).
* Log every request ID, response status, and failed payload reference so issues can be replayed.
## Phase 3: Implement Recovery Actions
Slicker can tell your system when to retry a payment, when to request a payment-method change, when to pause collection, and when dunning should complete.
### Webhook Path
If you use webhooks, implement one HTTPS endpoint that accepts Slicker events:
* Authenticate requests with the agreed bearer token or basic auth credentials.
* Return a `2xx` response quickly after validating and queuing the event.
* Process events asynchronously when retry execution may take longer than a few seconds.
* Deduplicate by webhook event ID.
* Store the original payload for audit and replay.
* Alert on repeated non-`2xx` responses or processing failures.
See [Webhook Implementation](/integrations/billing/custom/api/webhook) for payload structure and event-specific references.
### Polling Path
If you poll recovery actions, run the poller frequently enough to act before recommended retry windows pass. Store the last successful poll time, deduplicate actions by ID, and alert if polling stops or returns repeated errors.
See [List recovery actions](/integrations/billing/custom/api/slicker/list_recovery_actions) for endpoint details.
## Phase 4: Backfill Historical Data
Historical data helps Slicker learn payment behavior before live recovery begins.
Recommended approach:
1. Select a backfill window with the Slicker integration team. Six to twelve months is often useful when available.
2. Backfill subscriptions first, then invoices, then transactions.
3. Preserve original timestamps and final states.
4. Include recovered, unrecovered, refunded, voided, and still-open invoices when available.
5. Reconcile counts against your billing system before launch.
Useful reconciliation checks:
| Check | Expected Result |
| - | - |
| Invoice count by month | Matches your billing system within the agreed scope. |
| Transaction count by month | Matches payment attempts, not just invoices. |
| Failed transaction count | Includes initial failures and failed retries. |
| Recovery outcomes | Paid-after-failure invoices are distinguishable from first-attempt successes. |
| Currency and country coverage | High-volume segments are present and mapped correctly. |
## Phase 5: Test Before Launch
Run these tests in a non-production or controlled rollout environment before enabling full recovery automation:
| Scenario | What to Verify |
| - | - |
| Successful first-attempt invoice | Invoice and transaction sync without entering recovery. |
| Failed invoice | Failed transaction creates the expected recovery context. |
| Retry succeeds | The successful retry is sent as a new transaction and closes the invoice. |
| Retry fails | The failed retry is sent as a new transaction and recovery remains open. |
| Payment-method change needed | Your system can route the customer to the correct update flow. |
| Pause collection event | Your billing system pauses its own collection logic when instructed. |
| Complete dunning event | Your billing system stops dunning for the invoice when instructed. |
| Duplicate webhook delivery | Processing is idempotent and does not double-retry. |
| Webhook delivery failure | Slicker retries delivery and your alerts fire. |
| API failure | Your sync retries with backoff and preserves failed payloads for replay. |
## Launch Checklist
Before launch, confirm:
* API credentials are stored securely and not exposed in client-side code.
* Subscriptions, invoices, and transactions are syncing successfully.
* Historical data has been reconciled for the agreed launch scope.
* Webhook authentication, idempotency, and alerting are live.
* Recovery actions are being executed in the correct billing-system environment.
* Payment provider integrations are connected where applicable.
* Your team has an owner for integration incidents.
* You have a rollback plan, such as pausing webhook execution or disabling the rollout cohort.
## Rollout Plan
Start with visibility before automation:
Send live data and inspect recovery recommendations without executing automated retries from Slicker.
Enable recovery execution for a small, representative cohort such as one business entity, country, product, or plan family.
Compare Slicker recovery actions, billing-system retries, invoice outcomes, and customer impact.
Increase the rollout scope once data freshness, webhook success, and recovery results are stable.
## Monitor After Launch
Track these signals during the first weeks after launch:
* API ingestion failures and retry volume.
* Data freshness for invoices, subscriptions, and transactions.
* Webhook delivery success rate and processing latency.
* Recovery action backlog or actions missed after their ideal retry time.
* Invoice recovery rate, failed recovery rate, and recovered amount.
* Differences between Slicker counts and your billing system counts.
If any metric regresses, pause expansion and review the affected payloads with the Slicker integration team.
## Next Steps
* Review endpoint details in the [custom API reference](/integrations/billing/custom/api/overview).
* Implement webhook handling with [Webhook Implementation](/integrations/billing/custom/api/webhook).
* Add your payment processors from the [payment provider integrations](/integrations/overview#payment-providers).
# Overview
Source: https://docs.slickerhq.com/integrations/billing/custom/overview
Integrating a custom billing system with Slicker
Slicker provides a flexible API-based integration for custom in-house billing systems, allowing businesses with proprietary or unique billing solutions to benefit from our advanced retry optimization and revenue recovery capabilities.
## How Custom Billing Integration Works
With a custom billing integration, Slicker acts as a decision engine for your billing system, determining the optimal timing and strategy for payment retries. This data-driven approach significantly improves recovery rates compared to static retry schedules.
```mermaid theme={null}
flowchart LR
A[Your Billing System] -->|Event Data| B[Slicker Platform]
C[Payment Processors] -->|Enriched Data| B
B -->|Analytics & Machine Learning| D[Retry Decisions]
D -->|Webhook to Your System| E[Optimized Retries]
B <-.->|API Queries| A
```
### Integration Flow
1. **Data Ingestion**: Your system sends subscription, invoice, and transaction event data to Slicker's API endpoints.
2. **Payment Data Enrichment**: Optionally connect your [payment processors](/integrations/overview#payment-providers) directly to Slicker for enhanced data quality.
3. **Intelligent Analysis**: Slicker analyzes payment failures, customer behavior, and numerous other factors.
4. **Optimized Retry Execution**: When Slicker determines a retry should occur:
* Slicker sends a webhook notification to your endpoint with retry instructions
* Alternatively, your system can query Slicker's API to check when retries should be performed
## Integration Requirements
### Your Responsibilities
1. **Event Transmission**: Implement API calls to send subscription, invoice, and transaction events to Slicker
2. **Data Mapping**: Map your system's data fields to Slicker's expected format
3. **Webhook Endpoint**: Create an endpoint to receive retry instructions from Slicker
4. **Retry Execution**: Hook up the Slicker retry decision with your existing logic to execute retries. At this step you can perform further checks based on your business requirements if a retry should be executed.
### Data Requirements
While most fields are optional, the quality of Slicker's recovery strategies improves with the richness of data provided:
```mermaid theme={null}
flowchart TD
A[Required Data] -->|Minimum| B[Basic Recovery]
C[Additional Data] -->|Enhanced| D[Improved Recovery]
E[Full Data + Payment Processor] -->|Optimal| F[Maximum Recovery]
```
* **Essential Events**: Subscription creations/changes, invoice generation, payment attempts
* **Valuable Context**: Customer history, subscription details, failure reasons
* **Complete Details**: See the [API Reference](/integrations/billing/custom/api/overview) for comprehensive field specifications
## Setup Process
Setting up a custom billing integration typically follows these steps:
Meet with Slicker's integration team to discuss your specific needs and system architecture.
Develop the necessary API calls to send event data to Slicker and receive retry instructions.
Verify data accuracy and webhook functionality in a test environment.
Start with a subset of accounts to validate performance before full deployment.
## Historical Data Sync
While Slicker can start working with new incoming data immediately, syncing historical data significantly improves the effectiveness of our recovery strategies from day one:
```mermaid theme={null}
flowchart LR
A[Historical Data] -->|Machine Learning| B[Improved Initial Accuracy]
B -->|Better Recovery| C[Faster ROI]
```
### Benefits of Historical Data
* **Faster Learning**: Slicker's algorithms can immediately analyze past payment patterns and failures
* **Better Initial Results**: Recovery strategies are optimized from the start rather than requiring a learning period
* **Complete Customer Context**: Full payment history provides crucial context for decision-making
### Sync Options
* **Standard API**: The same APIs used for ongoing data can be used to sync historical events
* **Bulk Import**: For large data volumes, our integration team can work with you on custom bulk import solutions
* **Selective History**: Even partial history (e.g., last 3-6 months) provides significant benefits
The Slicker integration team will help determine the optimal amount of historical data to sync based on your business model and data volume.
## Engineering Support
We understand that implementing a custom integration requires engineering resources. Slicker provides:
* Dedicated integration specialists to guide your team
* Documentation and code samples to accelerate development
* Technical consultation throughout the implementation process
* Ongoing support post-implementation
For optimal results, we highly recommend also integrating your payment processors directly with Slicker. This provides essential payment error details that significantly improve recovery rates. See our [payment provider integrations](/integrations/overview#payment-providers) for more information.
## Next Steps
To begin your custom billing integration:
1. Review our [API Reference](/integrations/billing/custom/api/overview) to understand data requirements
2. [Contact our team](https://www.slickerhq.com/contact) to schedule an integration consultation
3. Explore connecting your [payment processors](/integrations/overview#payment-providers) for enhanced results
# Piano
Source: https://docs.slickerhq.com/integrations/billing/piano
Learn how to connect Piano to Slicker
### Prerequisites
Slicker integrates with Piano via the [Piano API](https://docs.piano.io/api). To connect Piano to Slicker, you will need:
* An **API Token** with sufficient permissions to manage subscriptions and payments.
* Your **Application ID (aid)**, which uniquely identifies your Piano application.
* Your **Piano API URL**, which depends on your Piano environment (e.g., sandbox vs production).
Only Piano users with administrator-level access can create API tokens.
### Create credentials
1. Log in to your Piano dashboard.
2. Navigate to the API tokens section to generate a new API token.
3. Give the token a descriptive name like `Slicker`.
4. Copy the generated **API Token**. We will need it later.
5. Note your **Application ID (aid)**. You can find this in your Piano dashboard settings.
6. Note your **API URL**. This is the base URL for your Piano environment. For example:
* Production: `https://api.piano.io`
* Sandbox: `https://sandbox.piano.io`
### Create integration in Slicker
1. Go to the Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Piano` from the list of integrations.
3. Give the integration a name and description to help you identify it later.
4. Enter the **API Token** you copied earlier.
5. Enter your **Application ID (aid)**.
6. Enter your **API URL**.
7. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Piano using the provided credentials.
If the connection fails, you will see an error message like the one below.
Please double-check the API token, Application ID, and URL, then try again.
# Recharge
Source: https://docs.slickerhq.com/integrations/billing/recharge
Learn how to connect Recharge to Slicker
### Prerequisites
Slicker integrates with Recharge via an API key. Creating a Recharge API key requires a Recharge user with permissions for `Admin -> API Tokens`.
By default, only the storeowners have this permission, but they can update account permissions to grant access to other users.
### Create credentials
1. Go to your Recharge merchant portal to create an API key. This is under `Tools & apps -> API Tokens`.
2. Click the `Create an API Token` button to generate a new API token for your store.
3. Use the `Details` field to set a name and contact email for the token.
4. Select `Read and Write access` to set the permissions for the token.
If the credentials are read-only, Slicker will not be able to retry failed transactions and recover revenue.
5. Click `Save` and copy the generated key - we will need it later.
### Create integration in Slicker
1. Go to the Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Recharge` 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. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Recharge 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.
# Recurly
Source: https://docs.slickerhq.com/integrations/billing/recurly
Learn how to connect Recurly to Slicker
### Prerequisites
Slicker integrates with Recurly via an API key. Creating a Recurly API key requires a Recurly user with a role that has the `Integrations` permission.
If you are using the default roles, the `Site Admin` role has this permission already.
### Create credentials
1. Go to your Recurly dashboard and create an API key. This is under `Integrations -> API Credentials`.
2. Click the `Add Private API Key` button. This will open a new page where you can configure the API Key.
Add an appropriate name like `Slicker` and ensure the `Read-Only` checkbox is **not** selected.
If the credentials are read-only, Slicker will not be able to retry failed transactions and recover revenue.
It should look something like this.
3. Click `Save Changes` and copy the generated key.
### Create integration in Slicker
1. Go to the Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Recurly` 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. Enter the Recurly dashboard URL for your Recurly instance - for example, `https://yourcompany.recurly.com`.
This will be useful when you need to navigate to the Recurly dashboard from Slicker.
6. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Recurly 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.
# Stripe Billing
Source: https://docs.slickerhq.com/integrations/billing/stripe
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`
* `Read` on `All Connect resources`
* `Read` on `All Reporting resources`
* `Read` on all `Billing` resources, with `Write` on `Invoices`.
The `Write` permission on `Invoices` is required for Slicker to retry failed transactions and recover revenue.
* *(Optional)* `Write` on `Subscriptions`.
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.
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.
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.
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.
1. Open your existing Slicker integration and find **Webhooks**. Copy the **Webhook URL** and keep the page open until you save the signing secret. For a new integration, first select **Enable Webhooks** in its creation form.
2. In the matching account's [Stripe Dashboard](https://dashboard.stripe.com/webhooks), open **Workbench → Webhooks** and add a destination for **your account's events**. Use a separate destination and signing secret for each Slicker integration, including when you use an organization API key.
3. Paste the Slicker Webhook URL into the **Endpoint URL** field. Choose **snapshot events** and the newest API version the dashboard offers (a **clover** or **dahlia** version). Thin events are not supported by this setup.
4. Under **Select events**, select these **20 individual event types**. Avoid **All events** and wildcard event families:
* **Invoices** — `invoice.finalized`, `invoice.updated`, `invoice.paid`, `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`
If you use **manual capture**, also select `payment_intent.amount_capturable_updated` to receive authorization updates before capture. This makes 21 event types. Keep `invoice.updated` for changes such as retry scheduling. `invoice.paid` already covers successful collection and invoices marked paid outside Stripe, so `invoice.payment_succeeded` is unnecessary.
5. Save the destination.
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 **Signing Secret** and select **Enable webhooks** (or submit the new integration). To rotate a secret later, use **Update secret**; keep the existing URL.
8. Confirm successful deliveries in Stripe's **Event deliveries** tab and check the corresponding records in Slicker. Slicker acknowledges every Stripe delivery, including ones it cannot verify yet, so that a setup problem never interferes with your billing; events that arrived before you saved the secret therefore show as delivered in Stripe but were not processed. Resend them from the **Event deliveries** tab after saving, or disable the destination in Stripe between steps 5 and 7 to avoid the gap. The **Configured** badge confirms saved settings; it does not confirm delivery. Updates can take roughly 30 seconds of batching plus processing time.
Keep scheduled syncing enabled. These events update customers, subscriptions, invoices, and PaymentIntents; Charge attempts, refunds, and disputes still use their existing sync paths. Adding an endpoint does not backfill old changes, and draft-invoice deletion is not handled by this event list.
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.
### (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.
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.
#### 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.
If you do not see these settings, [let us know](https://www.slickerhq.com/contact) and we will enable the feature for your account.
#### 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.
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.
# Zuora
Source: https://docs.slickerhq.com/integrations/billing/zuora
Learn how to connect Zuora to Slicker
### Prerequisites
Slicker integrates with Zuora via Zuora's Quickstart API. To use the Quickstart API, your Zuora tenant must have the following features enabled:
* [Orders](https://knowledgecenter.zuora.com/Billing/Subscriptions/Orders) or [Orders Harmonization](https://knowledgecenter.zuora.com/Billing/Subscriptions/Orders/Orders_Harmonization)
* [Invoice Settlement](https://knowledgecenter.zuora.com/Billing/Billing_and_Payments/Invoice_Settlement)
Only Zuora users with the appropriate permissions can create API credentials - the tenant administrator can grant these permissions and can create API credentials.
### Create credentials
Zuora API authentication requires an OAuth client ID and secret.
You should follow the [official Zuora documentation](https://developer.zuora.com/docs/get-started/introduction/#oauth-client-setup) to create these credentials. Some points to note:
* The Zuora user associated with the OAuth credentials should have a [Platform role](https://docs.zuora.com/en/zuora-platform/security-and-identity/administrator-settings/user-roles/platform-roles) with **API Write Access**.
* Assign the user the **Zuora Billing Standard User** and **Zuora Payments Standard User** roles. Together, these standard roles provide the permissions Slicker needs to read billing and payment data and recover failed payments, including:
* **Process Electronic Payment** ([Payments roles](https://docs.zuora.com/en/zuora-platform/security-and-identity/administrator-settings/user-roles/payments-roles)) — needed to retry payment collection on invoices.
* **Change Payment Methods** ([Billing roles](https://docs.zuora.com/en/zuora-platform/security-and-identity/administrator-settings/user-roles/billing-roles)) — needed to temporarily disable Zuora's built-in retry rules on a payment method so that Slicker controls the retry timing during an experiment, and then re-enable them afterwards.
* **Modify Invoice** ([Billing roles](https://docs.zuora.com/en/zuora-platform/security-and-identity/administrator-settings/user-roles/billing-roles)) — needed to set custom fields on invoices for experiment tracking.
* No additional Reporting role is required. Slicker reads accounts, subscriptions, invoices, payments, payment methods, and related records through Zuora's REST and AQuA APIs. If you prefer least-privilege access, contact Slicker before creating custom Billing and Payments roles. We will provide the current list of required Zuora objects and permissions for your integration, including any features you plan to enable. This list may expand as Slicker adds capabilities to the integration. Zuora [rejects or skips AQuA queries](https://docs.zuora.com/en/zuora-platform/data/aggregate-query-api-aqua/aqua-api-error-codes) when the API user cannot access a required object.
* Make sure that the `UI Access` box is unchecked. Zuora recommends API credentials are never used for UI access.
* Copy the `Client ID` and `Client Secret` - we will need them later.
### Create integration in Slicker
1. Go to the Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Zuora` from the list of integrations.
3. Give the integration a name and description to help you identify it later.
4. Enter the Client ID and Secret you copied earlier.
5. Select the base URL of your tenant from the dropdown. This is based on the data center where your Zuora tenant is hosted as detailed in [Zuora's documentation](https://knowledgecenter.zuora.com/Zuora_Environments/Zuora_Data_Centers).
6. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Zuora 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.
# Integrations overview
Source: https://docs.slickerhq.com/integrations/overview
Integrate with your tools in 5 minutes and start recovering revenue. No code required.
Integrations are how we gain insights into lost revenue and automate the recovery process.
Adding an integration takes less than 5 minutes, requires no code, and looks something like this:
Generate API credentials with the appropriate permissions in your provider.
Create an integration in Slicker that uses these credentials.
Slicker will start syncing data, providing insights, and recovering revenue. All without you lifting a finger.
For a more detailed guide for each provider, check out the individual integration pages below.
### Billing & subscription providers
The bread and butter of any subscription business. We integrate with the best billing and subscription providers to manage your revenue and reduce churn.
}
href="/integrations/billing/chargebee"
>
Automate revenue recovery for your Chargebee subscriptions.
}
href="/integrations/billing/recharge"
>
>
Automate revenue recovery for your Shopify or BigCommerce subscriptions managed in Recharge.
}
href="/integrations/billing/piano"
>
Automate revenue recovery for your Piano subscriptions.
}
href="/integrations/billing/recurly"
>
Automate revenue recovery for your Recurly subscriptions.
} href="/integrations/billing/stripe">
Automate revenue recovery for your subscriptions managed by Stripe Billing.
}
href="/integrations/billing/zuora"
>
Automate revenue recovery for your Zuora subscriptions.
}
href="/integrations/billing/custom"
>
Integrate with a custom in-house billing system.
### Payment providers
We integrate with payment providers to gain more accurate insights into why payments fail and how to recover them.
}
href="/integrations/payments/adyen"
>
Sync Adyen payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/authorize"
>
Sync Authorize.net payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/braintree"
>
Sync Braintree payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/checkout"
>
Sync Checkout.com payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/cybersource"
>
Sync Cybersource payments data t oget more accurate insights and recover revenue.
}
href="/integrations/payments/paycom"
>
Sync Pay.com payments data to get more accurate insights and recover revenue.
} href="/integrations/payments/stripe">
Sync Stripe payments data to get more accurate insights and recover revenue.
}
href="/integrations/payments/worldpay"
>
>
Sync Worldpay payments data to get more accurate insights and recover revenue.
### Missing an integration?
We're continuously expanding our integrations. If you have a specific integration in mind, please let us know by [contacting us](https://www.slickerhq.com/contact).
# Adyen
Source: https://docs.slickerhq.com/integrations/payments/adyen
Learn how to connect Adyen to Slicker
### Prerequisites
Slicker integrates with Adyen via their reporting features to sync payment data and provide insights into failed transactions. The setup is more complex than other integrations, but provides the most accurate payment data for revenue recovery.
To set up this integration, you need:
* An Adyen account with access to reports and API credentials
* Admin or Merchant admin permissions (which includes the required roles: `Merchant Report`, `Manage API credentials`, and `Merchant technical integrator`)
* Access to your Adyen Customer Area
### Create API credentials
Slicker needs to read reports from Adyen. Create a Report service user by following these steps:
1. Log in to your [Adyen Customer Area](https://ca-live.adyen.com/).
2. Follow the [official Adyen documentation](https://docs.adyen.com/reporting/automatically-get-reports/#create-api-credential) to create a Report service user API credential.
3. Copy the **Server Settings API Key** - you'll need this for the Slicker integration.
Keep your API key secure. Slicker only needs read permissions to sync payment data and analyze failed transactions.
### Schedule automatic report generation
We use Adyen's [Received payment details report](https://docs.adyen.com/reporting/received-payment-details-report/) to sync payments data.
1. Follow the [official Adyen documentation](https://docs.adyen.com/reporting/automatically-get-reports/#automate-generating-reports) to set up automatic report generation.
2. Make sure to select the **Received payment details report** as the report type.
3. When prompted to select the columns for the report, select **all columns**.
### Create integration in Slicker
1. Go to Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select **Adyen** from the list of payment integrations.
3. Provide the following information:
* **Integration name**: A descriptive name to help you identify this integration
* **Description**: Optional description for additional context
* **API Key**: The Report service user API key you copied from Adyen
4. Copy the **Endpoint URL**, **Basic Auth Username**, and **Basic Auth Password** from the Slicker integration page - you'll need these for webhook configuration.
### Configure webhooks
For real-time report notifications, configure webhooks:
1. In your Adyen Customer Area, follow the [official Adyen documentation](https://docs.adyen.com/development-resources/webhooks/) to create a webhook.
2. Configure the webhook with the credentials from the Slicker integration page:
* **Webhook URL**: Use the Endpoint URL from Slicker
* **Authentication**: Use Basic Auth with the username and password from Slicker
3. Copy the **Webhook HMAC Key** from Adyen and paste it into the Slicker integration page.
### Save the integration
1. Click **Submit** to create the integration.
### What data does Slicker sync?
Once connected, Slicker will sync the following data from Adyen:
* **Payment transactions**: Successful and failed payments with detailed information
* **Decline reasons**: Comprehensive acquirer responses and failure details
* **Customer data**: Shopper information needed for recovery campaigns
* **Risk scoring**: Risk assessment data to optimize recovery strategies
* **Payment methods**: Card types, issuer information, and payment method details
### Troubleshooting
**Connection failed error:**
* Verify your API key is correct and has not expired
* Ensure the key has sufficient permissions to read report data
* Check that your Adyen account is active and in good standing
**Missing transaction data:**
* Slicker syncs data from reports as they are generated
* New transactions typically appear after the next scheduled report
* Ensure automatic report generation is properly configured
**Webhook issues:**
* Verify the webhook URL and authentication credentials are correct
* Check that the HMAC key matches between Adyen and Slicker
* Ensure webhooks are enabled for your Adyen account
For additional help, contact [Slicker support](https://www.slickerhq.com/contact) or check our [FAQ](/essentials/faq).
# Authorize.net
Source: https://docs.slickerhq.com/integrations/payments/authorize
Learn how to connect Authorize.net to Slicker
### Prerequisites
Slicker integrates with Authorize.net via their API. Credentials for this API are created via Authorize.net's Merchant Interface.
### Create credentials
Follow the [official Authorize.net documentation for creating a Transaction Key](https://support.authorize.net/knowledgebase/Knowledgearticle/?code=000001271).
In the end you will need to have the following:
* Your API ID/Merchant name
* Transaction Key
Make sure you follow the steps for creating a Transaction Key, not Signature Key
### Create integration in Slicker
1. Go to Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Authorize.net` from the list of integrations.
3. Give the integration a name and description to help you identify it later.
4. Enter the merchant name and transaction key generated from the Merchant Interface.
5. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Authorize.net using the provided API key.
If the connection fails, you will see an error message like the one below.
Please double-check the provided credentials, make sure it has the correct permissions, and try again.
# Braintree
Source: https://docs.slickerhq.com/integrations/payments/braintree
Learn how to connect Braintree to Slicker
### Prerequisites
Slicker integrates with Braintree via their API. Credentials for this API are created via Braintree's Control Panel.
### Create credentials
Follow the [official Braintree documentation for creating API keys](https://developer.paypal.com/braintree/articles/control-panel/important-gateway-credentials#api-keys).
In the end you will need to have the following:
* Public Key
* Private Key
* Merchant ID
### Create integration in Slicker
1. Go to Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Braintree` from the list of integrations.
3. Give the integration a name and description to help you identify it later.
4. Enable `Sandbox mode` to connect a Braintree sandbox account, or leave it off for production.
5. Enter the merchant ID and the public/private key pair from the selected environment's Control Panel.
6. Click the `Submit` button to create the integration.
The selected environment is used for credential validation and payment syncing, and is shown on the integration details page.
For API integrations, set the `integration.config.braintreeConfig.sandbox` query parameter to `true` for sandbox or `false` for production.
Omitting this field defaults to production when creating an integration and preserves the existing environment when updating one.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Braintree using the provided API key.
If the connection fails, you will see an error message like the one below.
Please double-check that the provided credentials match the selected environment, make sure they have the correct permissions, and try again.
# Checkout.com
Source: https://docs.slickerhq.com/integrations/payments/checkout
Learn how to connect Checkout.com to Slicker
### Prerequisites
Slicker integrates with Checkout.com via API keys to sync payment data and provide insights into failed transactions. To set up this integration, you need:
* A Checkout.com account with access to API keys
* Admin or Developer permissions to generate API credentials
* Access to your Checkout.com dashboard
### Create API credentials
1. Log in to your [Checkout.com dashboard](https://dashboard.checkout.com/).
2. Navigate to **Settings** → **Developers** → **Keys**.
3. Generate a new **Secret API Key** if you don't already have one:
* Click **Create new key**
* Give it a descriptive name like `Slicker Integration`
* Configure the scopes to include the Payments scope, along with `reports` and `reports:view` permissions
4. Copy the **Secret API Key** - you'll need this for the Slicker integration.
Keep your Secret API Key secure. Slicker only needs read permissions to sync payment data and analyze failed transactions.
### Create integration in Slicker
1. Go to Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select **Checkout.com** from the list of payment integrations.
3. Provide the following information:
* **Integration name**: A descriptive name to help you identify this integration
* **Description**: Optional description for additional context
* **Secret API Key**: The key you copied from your Checkout.com dashboard
### Configure webhooks
For real-time payment updates, configure webhooks:
1. Copy the **Endpoint URL** from the Slicker integration page.
2. In your Checkout.com dashboard, go to **Settings** → **Channels** → **Webhooks**.
3. Click **Create webhook** and configure:
* **Endpoint URL**: Paste the URL you copied from Slicker
* **Events**: Select the **Gateway** and **Reports** categories
4. Copy the **Authorization Header Key** and **Signature Key** from Checkout.com into the Slicker integration page.
5. Save the webhook configuration.
### Save the integration
1. Click **Submit** to create the integration.
### What data does Slicker sync?
Once connected, Slicker will sync the following data from Checkout.com:
* **Payment transactions**: Successful and failed payments
* **Decline reasons**: Detailed information about why payments failed
* **Customer data**: Information needed for recovery campaigns
* **Payment methods**: Card types and other payment method details
### Troubleshooting
**Connection failed error:**
* Verify your Secret API Key is correct and has not expired
* Ensure the key has sufficient permissions to read transaction data
* Check that your Checkout.com account is active and in good standing
**Missing transaction data:**
* Slicker syncs data from the past 90 days on initial connection
* New transactions typically appear within 15 minutes
* Contact support if you're missing recent transactions
For additional help, contact [Slicker support](https://www.slickerhq.com/contact) or check our [FAQ](/essentials/faq).
# Cybersource
Source: https://docs.slickerhq.com/integrations/payments/cybersource
Learn how to connect Cybersource to Slicker
### Prerequisites
Slicker integrates with Cybersource via their REST API. Credentials for this API are created via Cybersource's Business Center.
### Create credentials
Follow the [official Cybersource documentation for creating a Shared Secret Key](https://developer.cybersource.com/docs/cybs/en-us/platform/developer/all/rest/rest-getting-started/restgs-jwt-shared-secret-intro/restgs-shared-secret-create-intro/restgs-shared-secret-create-task.html).
In the end you will need to have the following:
* Merchant ID
* Key ID
* Secret Key
### Create integration in Slicker
1. Go to Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Cybersource` from the list of integrations.
3. Give the integration a name and description to help you identify it later.
4. Enter the Merchant ID, Key ID, and Secret Key generated from the Business Center.
5. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Cybersource using the provided credentials.
If the connection fails, you will see an error message like the one below.
Please double-check the provided credentials, make sure they have the correct permissions, and try again.
# Pay.com
Source: https://docs.slickerhq.com/integrations/payments/paycom
Learn how to connect Pay.com to Slicker
### Prerequisites
Slicker integrates with Pay.com via an API key to sync payment data and provide insights into failed transactions. To set up this integration, you need:
* A Pay.com account
* Access to your Pay.com Dashboard, where API keys are managed
### Create an API key
1. Log in to your [Pay.com Dashboard](https://pay.com/).
2. Navigate to your API keys and create a new API key.
3. Under **Whitelist IP Addresses**, add all of Slicker's production IP addresses:
* `13.135.80.39`
* `13.43.168.68`
* `13.43.107.33`
4. Under **API's Endpoint**, select **Read** for every endpoint. Slicker does not require write access.
5. Create the key and copy its secret value. Production keys are prefixed with `live_`.
Keep your API key secure. Slicker only needs read permissions to sync payment data and analyze failed transactions.
### Create integration in Slicker
1. Go to Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select **Pay.com** from the list of payment integrations.
3. Provide the following information:
* **Integration name**: A descriptive name to help you identify this integration
* **Description**: Optional description for additional context
* **API Key**: The key you copied from your Pay.com Dashboard
* **Business Entity**: Optional. Leave empty if you have only a single business unit.
4. Click **Submit** to create the integration.
### What data does Slicker sync?
Once connected, Slicker will sync the following data from Pay.com:
* **Payment transactions**: Successful and failed payments
* **Decline reasons**: Detailed information about why payments failed
* **Payment methods**: Card types and other payment method details
### Troubleshooting
**Connection failed error:**
* Verify your API key is correct and has not been revoked
* Ensure all three Slicker production IP addresses are included under **Whitelist IP Addresses**
* Ensure **Read** is selected for every endpoint under **API's Endpoint**
* Check that your Pay.com account is active and in good standing
**Missing transaction data:**
* Slicker syncs your transaction history when the integration is first created, which can take a little while to complete
* New transactions typically appear shortly after they are processed by Pay.com
For additional help, contact [Slicker support](https://www.slickerhq.com/contact) or check our [FAQ](/essentials/faq).
# Stripe
Source: https://docs.slickerhq.com/integrations/payments/stripe
Learn how to connect Stripe to Slicker
If you have already created a [Stripe Billing integration](/integrations/billing/stripe) for the same Stripe account you don't have to add another one.
### 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`
* `Read` on `All Connect resources`
* `Read` on `All Reporting resources`
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 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. Leave Stripe Billing option unchecked. This integration is for syncing payment data only. If you are using Stripe Billing please refer to the [Stripe Billing integration guide](/integrations/billing/stripe).
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 payment changes to Slicker the moment they happen, for near real-time recovery tracking.
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.
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:
* **Payments** — `payment_intent.succeeded`, `payment_intent.payment_failed`, `payment_intent.processing`, `payment_intent.requires_action`, `payment_intent.canceled`
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.
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.
Using Stripe Billing? Follow the webhook steps in the [Stripe Billing guide](/integrations/billing/stripe) instead — it adds the invoice and subscription events.
### 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.
# Worldpay
Source: https://docs.slickerhq.com/integrations/payments/worldpay
Learn how to connect Worldpay to Slicker
### Prerequisites
Slicker integrates with Worldpay via Worldpay's Access API. Credentials for this API are only created by Worldpay's implementation managers.
### Create credentials
Request credentials from your Worldpay Implementation Manager for the Payment Queries Access API.
They will provide you with a username and password which you can use to create a Slicker integration.
### Create integration in Slicker
1. Go to Slicker's [new integration page](https://app.slickerhq.com/integrations/new).
2. Select `Worldpay` from the list of integrations.
3. Give the integration a name and description to help you identify it later.
4. Enter the username and password given to you by Worldpay's Implementation Manager.
5. Click the `Submit` button to create the integration.
### Troubleshooting
On integration creation, Slicker will attempt to connect to Worldpay 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.
# Introduction
Source: https://docs.slickerhq.com/introduction
Slicker reduces involuntary churn and optimizes revenue recovery for subscription businesses.
## What is Slicker?
Slicker helps subscription businesses reduce involuntary churn and recover lost revenue. Our churn prevention platform combines industry knowledge and machine learning to create personalized strategies tailored to each business.
We analyze a wide range of data points, including payment error codes, issuer details, network error messages, customer behavior, and subscription history. This approach ensures recovery efforts are optimized and align with the specific needs of your business.
## Why Slicker?
Involuntary churn due to failed payments can significantly impact your subscription business. Slicker solves this by:
* **Optimizing payment retries**: Using data-driven insights to time retries when they are most likely to succeed.
* **5-minute setup**: We integrate directly with your payment processors and billing systems, no code changes required.
* **Automated recovery emails**: When retries aren't enough, Slicker sends targeted emails from your own domain to prompt customers to update their payment method or approve a transaction.
* **Your own team of payment experts**: Our platform analyzes transaction data, customer behavior, and industry trends to implement strategies tailored to your business, acting as an extension of your team.
## Useful links
Explore key sections of our documentation to get started and make the most of Slicker.
Learn how to set up your Slicker account and start recovering revenue.
Step-by-step guide to integrate Slicker with your billing and payment providers.
Discover how Slicker optimizes payment recovery strategies.
Dive into analytics to track your recovery performance and insights.
Learn how automated recovery emails work alongside retries to recover failed payments.
See how Slicker routes payments across multiple gateways to maximize success rates.