# ProsperStack Docs
> The retention optimization platform for high-volume subscription businesses
This file contains all documentation content in a single document following the llmstxt.org standard.
## Introduction
ProsperStack is a customer retention platform for subscription businesses in
SaaS, digital media and ecommerce. It helps teams measure, test and optimize
retention performance.
This documentation describes how to implement, set up and use ProsperStack. Core
sections explain how to build cancellation experiences, target interventions,
collect feedback and measure results. Winback campaigns, revenue recovery and
conversion incentives, along with the technical implementation details, are also
available.
:::tip Get individualized help from AI
Ask your preferred AI assistant to use the
[ProsperStack documentation index](https://docs.prosperstack.com/llms.txt) for
guidance tailored to your setup. Include relevant subscription platform and
integration details, but don't share API keys or other sensitive information.
:::
## Overview
- **[Getting started](/getting-started)** — Plan your implementation, connect
integrations, build, test and launch.
- **[Cancellation flows](/cancellation-flows/customizing-a-flow)** — Configure
your cancellation experience, collect exit feedback, present alternatives to
cancellation, measure outcomes and test improvements.
- **[Offers](/offers/creating-an-offer)** — Create incentives and optimize
performance with A/B tests and Autopilot.
- **[Customer segmentation](/customer-segmentation/creating-a-segment)** — Use
subscription, CRM/CDP and custom data to target flows, steps and offers to
distinct customer groups.
- **[Subscribers](/subscribers/viewing-subscribers)** — Find individual
subscribers and review their subscriptions, retention sessions, retained
revenue, offer links and automation enrollments.
- **[Sessions](/sessions/viewing-sessions)** — Review individual cancellation
sessions, including answers, presented offers and cancellation outcomes.
- **[Insights](/insights/reporting-overview)** — Analyze retention, retained
revenue, offers, deflections and customer feedback across flows and segments.
- **[Automations](/automations)** — Coordinate event-based workflows for use
cases such as winback campaigns and failed payment recovery.
- **[Conversion](/conversion)** — Create and measure targeted incentives for
trial and freemium users.
- **[Customer portal](/customer-portal/enabling-the-customer-portal)** —
Configure a hosted, self-service subscription management portal for your
subscribers.
- **[Account](/account/general-settings)** - View account settings, subscription
details and invoices, add users and configure SSO.
- **[Subscription platforms](/subscription-platforms/connecting-your-subscription-platform)**
— Connect your subscription platform and reference platform-specific details.
- **[Integrations](/integrations/slack)** — Connect ProsperStack to CRM/CDP,
messaging, analytics, customer engagement and compatible AI tools.
- **[For developers](/for-developers/embedding-the-flow)** — Embed flows, test
implementations, customize styling and work with APIs, webhooks and data
connectors.
## AI access via MCP
[Set up MCP access](/integrations/mcp-server) to allow AI tools like Claude,
ChatGPT and Gemini to analyze retention data in ProsperStack and set up flows,
offers, segments and more.
## First steps
Refer to the [Getting started](/getting-started) guide to plan your
implementation, connect your subscription platform, build and test your first
cancellation flow, and coordinate launch.
---
## Implementation overview
# Getting started
Launching ProsperStack is a joint effort involving the owners of your
subscription experience, retention strategy and technical implementation. This
guide covers initial setup, flow configuration, testing and launch.
## Implementation
Typically there are six stages of implementation. Configuration and integration
can happen in parallel after your subscription platform is connected.
| Stage | Typical owner |
| -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| [Connect your platform](/getting-started/connect-your-subscription-platform) to make subscription data available in ProsperStack | Subscription platform administrator |
| [Integrate ProsperStack](/getting-started/integrate-prosperstack) to open cancellation sessions | Technical implementation owner |
| [Import customer context](/getting-started/import-customer-context) to support personalization, targeting and reporting | Customer data owner and/or technical implementation owner |
| [Configure your cancellation flow](/getting-started/configure-your-cancellation-flow) to match your retention strategy | Retention owner |
| [Preview and test](/getting-started/preview-and-test) the experience and end-to-end behavior | Retention owner and technical implementation owner |
| [Launch your cancellation flow](/getting-started/coordinate-launch) with live traffic | Technical implementation owner |
Before implementation begins, review
[roles and responsibilities](/getting-started/roles-and-responsibilities) to
identify an owner for each part of the project and align on the scope of work.
---
## Roles and responsibilities
Launching ProsperStack involves business and technical decisions across several
teams. The following division of labor is a useful starting point.
| Role | Usually responsible for |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Retention owner | Flow strategy, cancellation reasons, offers, copy, approvals and success metrics |
| Technical implementation owner | Application, website, customer portal or Shopify theme integration; callbacks, signing, deployment and rollback |
| Subscription platform administrator | Credentials, permissions, test data and validation of subscription changes |
| Customer data owner | Customer context, CRM/CDP access, property mappings, data quality and refresh requirements |
| Design or brand | Logo, imagery, tone and optional [custom CSS](/for-developers/custom-css) |
| Legal or compliance | Required disclosures, acknowledgement language and cancellation requirements |
| ProsperStack team | Product guidance, platform-specific setup support and troubleshooting during onboarding, as agreed in your onboarding plan |
Depending on your organization, the technical implementation owner may work in
engineering, IT, digital product, web development or ecommerce.
Your team remains responsible for production access, code and theme changes,
business and legal decisions, and final launch approval. If you use a custom
subscription integration, your team also owns the code that performs all
subscription changes. Confirm any additional implementation services or launch
support with ProsperStack.
## Before you begin
Identify the owner for each implementation stage and make sure the right people
have access to the systems they will manage. In particular, determine who can:
- Administer your subscription platform
- Administer the CRM, CDP or other source of customer context
- Update your application, website, customer portal or Shopify theme
- Approve your cancellation experience, offers and copy
- Validate legal and compliance requirements
- Deploy the production entry point at launch
---
## Connect your subscription platform
**Typical owner:** Subscription platform administrator
**You will need:** Administrator access to your subscription platform; and for
Shopify-based platforms, your Shopify store
Connecting your subscription platform allows ProsperStack to identify customers
and subscriptions, perform supported cancellation and offer actions, and report
on outcomes.
Refer to your
[platform's specific guide](/subscription-platforms/connecting-your-subscription-platform)
for help with required credentials and permissions.
If your platform is not supported, use a
[custom integration](/subscription-platforms/custom). With a custom integration,
your application is responsible for handling cancellations, coupons, pauses and
other subscription changes based on the result returned by ProsperStack.
:::tip
Use [test mode](/for-developers/test-mode) to connect a test or development
account when one is available from your subscription platform. Test mode is
isolated from live billing data and has its own client ID.
:::
After the platform is connected, continue to
[integrating ProsperStack](/getting-started/integrate-prosperstack). Flow
configuration and technical integration can proceed in parallel.
---
## Integrate ProsperStack
**Typical owner:** Technical implementation owner
**You will need:** Access to the application, website, customer portal or theme
that currently handles cancellation
ProsperStack replaces or intercepts the point where an authenticated customer
currently starts a cancellation. The right integration path depends on where
customers manage their subscriptions.
## Application or website embed
Use the [ProsperStack JavaScript library](/for-developers/embedding-the-flow)
when the cancel action lives in your application or website. Your implementation
needs to:
1. Load the flow library
2. Call it when the customer selects the cancel action
3. Pass the ProsperStack client ID and the current subscription's platform ID
4. Handle the result after the customer completes a session
The customer and subscription identifiers must come from the signed-in
customer's session or another trusted source.
## Shopify subscription portal or theme
For supported Shopify subscription platforms, follow your platform's setup guide
to connect Shopify and install the ProsperStack customer portal snippet. The
snippet is generated for your account and added to the appropriate Shopify theme
or subscription portal location.
Platform guides: [Recharge](/subscription-platforms/recharge),
[Bold](/subscription-platforms/bold),
[Ordergroove](/subscription-platforms/ordergroove),
[Submarine](/subscription-platforms/submarine),
[Stay AI](/subscription-platforms/stay-ai),
[Recurly Commerce](/subscription-platforms/recurly-commerce),
[Seal Subscriptions](/subscription-platforms/seal-subscriptions)
## ProsperStack customer portal
If your connected platform supports it, you can
[enable the ProsperStack customer portal](/customer-portal/enabling-the-customer-portal)
and link to it from your website without an embedded flow. Customers verify
their identity by email before managing their subscription.
---
## Import customer context
**Typical owners:** Customer data owner and/or technical implementation owner
While billing and subscription data are available via your connected
subscription platform, importing additional customer context—such as usage
metrics, customer health or loyalty points—allows for more precise
[customer segmentation](/customer-segmentation/creating-a-segment), greater
personalization and deeper reporting.
## Importing your data to custom properties
To support as many data sources as possible, ProsperStack provides a variety of
methods to synchronize systems. Regardless of where your data comes from, it all
goes to the same place in ProsperStack:
[custom properties](/customer-segmentation/custom-properties).
### Flow embed
Pass subscriber and subscription custom properties in the
[flow embed](/for-developers/embedding-the-flow#custom-properties) from your
application.
### CRM/CDP integrations
**Required plan:** Prosper or Enterprise.
ProsperStack has native integrations with popular CRM/CDP platforms:
- [HubSpot](/integrations/hubspot), [Salesforce](/integrations/salesforce) and
[Intercom](/integrations/intercom) — map customer records to subscriber custom
properties
- [Segment](/integrations/segment) — send Identify traits from connected CDP
sources to subscriber custom properties
- [Klaviyo](/integrations/klaviyo) — map profile properties and make Klaviyo
segments available in ProsperStack
- [Yotpo](/integrations/yotpo) — map loyalty data to subscriber custom
properties
### Subscription platform metadata
**Required plan:** Prosper or Enterprise.
When additional context is stored as metadata in your subscription platform, map
it directly to custom properties (where supported). See the metadata
instructions for [Stripe](/subscription-platforms/stripe),
[Chargebee](/subscription-platforms/chargebee) and
[Recurly](/subscription-platforms/recurly).
### Custom data connectors
**Required plan:** Prosper or Enterprise.
Use a [custom data connector](/for-developers/data-connectors) when you want
context to be retrieved on demand. At the start of a cancellation session,
ProsperStack calls your endpoint with subscriber and subscription details. The
endpoint then returns values to map to custom properties before segmentation and
routing logic are evaluated.
### API
**Required plan:** Prosper or Enterprise.
Use the [ProsperStack API](/for-developers/api) to update subscriber or
subscription custom properties from your application, data pipeline or
automation platform.
### File processing
**Required plan:** Enterprise.
Enterprise customers can arrange recurring automated processing of customer data
delivered through an Amazon S3 bucket or FTP. This option is suited to scheduled
batch exports and systems that cannot send updates through an API.
---
## Configure your cancellation flow
**Typical owner:** Retention owner
**You will need:**
- Your brand logo, voice and any required legal or compliance language
- The cancellation reasons you want to measure
- The retention alternatives you can offer, such as a discount, pause, plan
change or help resource
## Customize your flow
[Configure your cancellation steps](/cancellation-flows/customizing-a-flow),
including some or all of:
- An [instant cancel option](/cancellation-flows/compliance) if needed for
compliance, as determined by your legal team
- An acknowledgement of important billing, access or data consequences
- An [exit survey](/cancellation-flows/creating-a-question)
- [Deflections](/cancellation-flows/creating-a-deflection) and
[offers](/cancellation-flows/presenting-offers-during-cancellation)
- A [confirmation screen](/cancellation-flows/showing-a-confirmation-screen)
Use [conditional steps](/cancellation-flows/displaying-a-step-conditionally),
[customer segments](/customer-segmentation/creating-a-segment) and
[multiple flows](/cancellation-flows/multiple-flows) when experiences need to
vary.
## Define the cancellation outcome
In [flow settings](/cancellation-flows/customizing-a-flow#flow-settings),
specify what happens when a customer confirms cancellation. Depending on your
platform, ProsperStack can cancel the subscription, change its plan or return
the result for your application to handle. Also decide whether cancellation is
immediate or occurs at the end of the billing period.
---
## Preview and test
**Typical owners:** Retention owner and technical implementation owner
Flow previews validate a flow's content and logic, while end-to-end tests
validate the real entry point, customer data and subscription outcome.
## Preview the flow
[Preview a flow](/cancellation-flows/previewing-a-flow) to:
- Walk every answer, deflection and offer path
- Compare draft and published versions
- Simulate relevant segments and custom properties
- Review desktop, tablet and mobile layouts
- Share a configured preview link with stakeholders for approval
Preview mode does not replace an end-to-end integration test because it does not
use a live subscription or test your cancel button integration.
## Run end-to-end tests
In a development or staging environment, use your
[test mode](/for-developers/test-mode) client ID and a test subscription.
For Shopify, test the theme or portal that contains the snippet.
Scenarios to test:
- A customer completes cancellation
- A customer accepts an enabled offer
- A customer closes the flow without completing it
- The correct flow and conditional content appear for representative customer or
subscription data
- Confirmation text, emails and downstream automations match the resulting
subscription state
---
## Coordinate launch
**Typical owner:** Technical implementation owner
[Publishing a flow](/cancellation-flows/publishing-changes) controls which
version ProsperStack serves. Your application deployment, Shopify theme
publication or customer portal link controls whether customers enter
ProsperStack at all.
At launch, publish the approved flow, deploy or enable the production entry
point, and complete the controlled smoke test. Then review
[sessions](/sessions/viewing-sessions) to confirm that customers enter the
expected flow and that outcomes are properly handled.
## Launch checklist
- [ ] Production and test subscription platform connections are configured as
needed
- [ ] The integration path and owner are confirmed
- [ ] Customer context sources, mappings and refresh behavior are validated
- [ ] The existing cancel entry point opens ProsperStack with the correct
subscription
- [ ] Cancellation timing, offers, copy and compliance requirements are approved
- [ ] Flow paths have been previewed and tested end to end
- [ ] Desktop and mobile experiences have been reviewed
- [ ] The correct flow is published and the production entry point is ready
- [ ] Deployment, test, monitoring and rollback owners are available
---
## Customizing a flow
A cancellation flow turns the cancellation moment into a structured retention
experience. Use flow steps to capture targeted feedback, understand a customer's
intent and present appropriate offers and deflections.
Survey questions, conditional logic and interventions can be adjusted as you
learn which experiences improve outcomes for different customer segments.
:::tip Build flows with AI
[Connect your preferred AI tool using MCP](/integrations/mcp-server) to create
and update flows, offers, segments and other resources.
:::
To start customizing a flow, click **Flows** in the left navigation.
The main Flows page displays your existing flows and
[A/B tests](/cancellation-flows/flow-ab-testing).
If [multiple flows](/cancellation-flows/multiple-flows) is enabled, you can also
create a new flow and manage
[flow routes](/cancellation-flows/multiple-flows#routing-customers-to-a-flow).
## Flow settings
To edit flow settings from the Flows page, click the ellipsis menu and then
**Flow settings**.
Or from the flow editor, click the **Settings** button.
### Basic settings
Specify a title for internal use and upload your logo to display in the flow.
#### Tags
Use tags to categorize your flows. Find relevant flows faster with the tag
dropdown on the Flows page.
### Cancellation settings
#### On cancel
Specify what action should occur when a subscriber cancels their subscription
through this flow:
- **Do nothing** - Handle cancellation on your end.
- **Cancel subscription** - Automatically cancel the subscription in the
connected subscription platform (not available with a "Custom" integration).
Choose whether the subscription should be canceled immediately or at the end
of the billing period.
- **Change subscription plan** - Automatically change the subscription plan in
the connected subscription platform (not available with a "Custom"
integration). Select a plan and use **Change plan at** to choose whether the
plan changes immediately or at the end of the billing period. ProsperStack can
also optionally apply prorated charges and credits.
When immediate cancellation is selected and the connected platform supports the
option, enable **Cancel unpaid invoices** to cancel any unpaid invoices when the
subscription is canceled.
#### Remove add-ons when changing plans
Enable this option to automatically remove add-ons from the subscription in the
connected subscription platform when ProsperStack changes the subscription's
plan. The **Remove all add-ons from subscription** option appears only for
supported platforms.
#### If previously canceled - Prevent cancellation
Display a customizable message and exit the flow if the subscription was
previously canceled via ProsperStack.
#### One-click cancel
Enable [one-click cancel](/cancellation-flows/compliance) to display a
persistent cancellation link that allows subscribers to cancel immediately from
any step in the flow.
### Security
#### Require signatures
Require cancellation flow requests to be signed with your account secret.
[Learn more about request signing.](/for-developers/embedding-the-flow#signing-requests)
Implement and test signed requests before enabling this setting. In the
confirmation dialog, select **I have verified that cancellation flow request
signing has been implemented**, then click **Enable**. Finish by clicking
**Save** in flow settings.
## Step types
Each step in the cancellation flow serves a unique purpose. Pick from the
available step types when designing the right flow for your business.
Click a step from the Flows page to customize the step in the flow editor.
### Acknowledgements
Acknowledgements are statements the customer must accept before completing
cancellation and are represented by checkboxes.
**Acknowledgement examples:**
- I understand that my account will be immediately disabled. No refunds will be
given for service not used.
- I understand that my data may be deleted. A data backup can be created from
the Administration section.
Use acknowledgements to clarify what will happen when the cancellation is
complete, such as billing details, the effective date of cancellation or loss of
data that will result.
To add an acknowledgements step, click the plus icon that appears between steps
in the top section of the flow editor and choose **Acknowledgements**. Enter an
internal **Title** and the subscriber-facing **Label**, then click **Add**. To
change an acknowledgement, select its step, click **Edit**, update the fields
and click **Save**.
### Questions
Knowing why your customers leave can provide vital insight into your business.
By default, the exit survey has two questions: the multiple-choice "primary
reason for leaving" question and an open-ended text box. To get you started, the
"reason for leaving" question is pre-populated with the most common options seen
across cancellation flows.
[Add more questions](/cancellation-flows/creating-a-question) based on your
service's unique needs.
[Questions can be displayed conditionally](/cancellation-flows/displaying-a-step-conditionally)
based on customer [segments](/customer-segmentation/creating-a-segment) or
previous answers, e.g. if the customer is leaving for a competitor, you can ask
which competitor.
Question responses can also be used in
[offer rules](/cancellation-flows/presenting-offers-during-cancellation) to
determine which offers are presented to your customers. For example, a customer
who complains about price might be offered a coupon, whereas a customer that had
issues with support might be offered an upgrade to a better tier of support.
### Deflections
Sometimes a customer may be leaving because they didn't understand how to use
the product, had a bad support experience or just didn't realize your product's
full potential. [Deflection cards](/cancellation-flows/creating-a-deflection)
are a way to display custom content so you can reinforce your product's value
and offer an alternative to cancellation.
The content of a deflection card can be completely customized and an action
button can be configured to redirect the customer to a URL.
[Configure the action button](/cancellation-flows/creating-a-deflection#customizing-deflection-actions)
to redirect cancellations to a help article, a live chat widget, a custom page
in your application or anything else you think up.
### Offers
Offer steps allow you to make a last attempt to prevent your customer from
canceling, e.g. via a coupon, trial extension or another intervention. Using
[segments](/customer-segmentation/creating-a-segment), question responses and
[offer types](/offers/creating-an-offer), you can create complex rules for when
to present offers and to whom.
[Presenting offers during cancellation](/cancellation-flows/presenting-offers-during-cancellation)
covers this in detail.
### Confirmation
[Create a confirmation step](/cancellation-flows/showing-a-confirmation-screen)
to display a message at the end of the flow (after a subscriber has canceled or
accepted an offer).
### Instant cancel
Give subscribers an
[immediate option to cancel](/cancellation-flows/compliance), in compliance with
regulations in certain jurisdictions.
## Text
All text in the flow can be customized to match your product's voice. Click the
pencil icon next to any piece of text in the flow editor to begin customizing
the text.
For shared labels and default flow text, click **Settings** in the flow editor
and then **Customize text**. If translations are enabled, select the language
you want to edit, update the available text fields and click **Save**.
### Using subscriber and custom property tags
**Property tag example:** A first name property tag is inserted into the
sentence, “\{First name\}, we’ve prepared a special offer just for you.” At
runtime, the tag is replaced by the subscriber's first name.
Property tags can be inserted in text fields to refer to a subscriber's first
name, last name, email address or values from any
[custom properties](/customer-segmentation/custom-properties). Click the tag
icon at the top of the text editor to insert a property tag.
When inserting a tag, you can also enter a fallback text value to use if the
subscriber or custom property is not set.
### Formatting date custom properties
When inserting a date custom property tag, select a formatting option to control
how the date is displayed.
## Languages & translations
Support for
[languages & translations](/cancellation-flows/languages-and-translations) is
included in the Enterprise plan.
## Design
In addition to uploading your logo, the design of the flow can be completely
customized with [custom CSS](/for-developers/custom-css).
## Updating your flow
When you make changes to your cancellation flow, a draft version of the flow is
created. You can make as many changes as you need without affecting your
production cancellation flow. Once you're ready for your modified cancellation
flow to go live, [publish your changes](/cancellation-flows/publishing-changes)
for them to take effect.
---
## Creating a question
Cancellation questions turn customer feedback into evidence you can analyze by
segment and outcome. Ask questions that help you test a specific hypothesis or
inform a retention, product, pricing or customer experience decision. The
default cancellation flow starts with two standard questions, and you can add
more as needed.
**Default survey example:**
- A required multiple-choice question, **What is your primary reason for
leaving?**, with the options **Too expensive**, **No longer needed**, **Not
enough value / ROI**, **Not satisfied with service or features**, **Billing
issue**, **Support issue**, **Our company/product is no longer running** and
**Temporary, will be back**.
- An open-ended question, **How can we improve?**, with an **Enter comments**
field.
## Question and form steps
Cancellation flows contain questions either as stand-alone steps or as part of
form steps, which can contain multiple questions.
Question and form steps are quite similar. The primary difference is that
question steps ask a single question, whereas forms typically contain multiple
questions.
### Which should you choose
Asking a single question per step can help users focus on each question and make
the appearance or disappearance of conditional questions less jarring.
On the other hand, forms reduce friction by decreasing the number of steps a
user must complete.
If you’re unsure which to choose, we recommend using a form.
## Creating a question
The steps to create a question depend on whether it’s going to be part of a form
or a stand-alone question.
### Within a form
Open the flow editor by clicking **Flows** in the left navigation.
#### Creating a question within an existing form
Select the desired form step in the flow steps.
Click **Add question** and select the [type of question](#question-types).
#### Creating a new form
You may create additional forms. In the flow editor, click the plus icon that
appears between steps in the top section and select **Form**. Give it a name for
reference.
### Stand-alone question
Open the flow editor by clicking **Flows** in the left navigation and then the
pencil icon in the flow steps diagram.
In the flow editor, click the plus icon that appears between steps in the top
section and select the type of question you’d like create (**Multiple choice**,
**Text** or **Return likelihood**).
## Question types
Choose between three question types:
- **Multiple choice** - a fixed list of options
- **Text** - open-ended feedback
- **Return likelihood** - 1-10 rating of a subscriber’s likelihood to return
### Multiple choice
Multiple choice questions have a title (e.g. “What is your primary reason for
leaving?”) and an optional hint. You can use hints to add extra detail.
#### Adding options
Click the **Add option** link to add a new option to a multiple choice question.
Enter a title and an optional reason code for your question option.
###### Reason codes
Reason codes are used when sending survey response data to third-party
integrations. This allows you to represent survey responses with a consistent
value that does not change if you update the wording of the multiple choice
option.
**Note for Chargebee integrations:** To send cancel reason codes to Chargebee,
enable in Settings > Integrations > Subscription platform > Configure. Reason
codes must match exactly (case sensitive) what's in Chargebee. If a reason code
is not specified in ProsperStack, it will default to "Other" (make sure you
allow "Other" in Chargebee).
#### Reordering options
Drag and drop question options using the drag handle to the left of the option
text to change the order.
#### Option conditions
Question options can be displayed only when certain conditions are met, based on
customer [segments](/customer-segmentation/creating-a-segment), custom
conditions or answers to previous questions.
Click the route icon to open the conditions panel.
### Text
Text questions have a title (e.g. “How can we improve?”) and an optional hint.
You can use hints to add extra detail.
Additionally you may specify placeholder text to be displayed when the field is
empty.
### Return likelihood
Asking your customer’s likelihood to return during cancellation can provide
valuable insights regarding which customers to target for winback and
remarketing campaigns.
Return likelihood questions have a title (e.g. "What is your likelihood to use
our product again?") and an optional hint. You can use hints to add extra
detail.
## Question settings
Questions have additional settings.
For questions within a form, hover over a question to display the settings
toolbar.
For stand-alone questions, the settings toolbar is visible when the step is
active.
### Requiring a question
Questions are optional by default, but can be made required. When the question
is the active step, an options bar appears in the upper right. Click the
asterisk icon to toggle between optional and required.
### Multiple choice settings
Multiple choice questions have additional settings.
#### Select multiple
Allow the user to select multiple options instead of a single one.
#### Randomize options
The order of options can be randomized to help prevent the first few options
from being over-represented in your data.
#### Other, please specify
Display a final option labeled "Other" that allows the user to be more specific.
### Displaying a question conditionally
Questions can be displayed only when certain conditions are met, based on
customer [segments](/customer-segmentation/creating-a-segment) or answers to
previous questions.
[Learn more about step conditions.](/cancellation-flows/displaying-a-step-conditionally)
## Reordering questions
For questions within a form, drag and drop questions within a step.
For stand-alone questions, drag and drop questions in the step diagram.
---
## Creating a deflection
Deflection cards address cancellation intent without requiring an incentive. Use
deflections to reinforce value, direct customers to support options or present
other relevant paths.
**Deflection example:** A card headed **Need some help getting started?** tells
the customer to unlock the product's full potential by following a step-by-step
guide, with a **Check out the guide** action.
To create a deflection, click **Deflections** in the left navigation and then
the **Create a deflection** button. Deflections can also be created when adding
or editing [deflection rules](#deflection-rules).
## Deflection details
Deflections are made up of a heading, content, [snapshot items](#snapshot-items)
and [actions](#customizing-deflection-actions).
### Name
Give the deflection a unique name for internal reference.
### Tags
Use tags to categorize your deflections. Find relevant deflections faster with
the tag dropdown on the Deflections page. To create a new tag, type the name and
click **+ Add**.
### Heading & content
Craft your tailored deflection message using rich text, images and video.
Use the [rich content toolbar](/cancellation-flows/editing-rich-content) to add
headings, format the content of your message or insert tags, images and video.
### Snapshot items
Snapshot items allow you to present customer data to reinforce your product's
value.
Click the **Add snapshot item** button to add a new snapshot item to the
deflection. You can add up to eight items per deflection.
Snapshot items consist of an icon, a custom property and a text label.
- **Icon** — Select an optional icon to display with your snapshot item. You can
select from thousands of icons in multiple styles.
- **Property** — Select a
[custom property](/customer-segmentation/custom-properties) that contains the
data you want to display to your subscriber. You can also create a custom
property from the selector.
- **Minimum value** — If your selected custom property is a number, you can
require that the property be at least this value. If the custom property value
is less than this number, the item will not be displayed.
- **Date format** — For a date property, choose **Default**, **Full**, **M/D/Y**
or **D/M/Y**.
- **Text** — Enter a label for your item.
#### Minimum snapshot items
**Required plan:** Prosper or Enterprise.
If a snapshot item uses data from a custom property and that custom property is
not present for a particular subscriber (or does not meet the configured minimum
value), the item will not be displayed. If a snapshot deflection would not
display any items since they have all been skipped, the entire snapshot
deflection step will be skipped.
Use **Minimum items** to skip the deflection when fewer than the specified
number of snapshot items can be shown.
### Customizing deflection actions
Deflection actions are call-to-action buttons displayed below the deflection
content.
Click **Add action** to create a new action button.
Give the action an optional code, enter the text to be displayed in the button,
and specify what should happen when a subscriber clicks the button.
#### Type
- **URL** — When a canceling subscriber clicks the action button, they'll be
redirected to the URL you specify. Use it to point them to a help article,
trigger some custom logic in your application, or anything else you can think
of. Select **Open URL in new tab** to preserve the cancellation flow tab. For
actions that open in a new tab, use **End session when clicked** to choose
whether clicking the action completes the session. An action that opens in the
same tab always ends the session.
- **Close flow** — Close the cancellation flow.
- **Route to another flow** — Send the canceling subscriber to a different flow.
Learn more about [multiple flows](/cancellation-flows/multiple-flows).
## Deflection rules
Like [offers](/cancellation-flows/presenting-offers-during-cancellation),
deflections can be targeted to specific customers based on a set of rules.
To customize deflection rules, click **Flows** in the left navigation and then
click a deflection step or create a new one.
### Creating a deflection step
In the flow editor, click the plus icon that appears between steps in the top
section.
Give it a title.
Deflection steps can also be moved around in the flow the same way as any other
step — just drag and drop.
### Adding and editing deflection rules
Click **Add rule** to start a new rule or click into an existing rule to enter
editing mode.
### Understanding rules
A rule consists of three parts:
- **Segments** — segments subdivide your customers into groups based on payment
criteria like MRR, billing interval, subscription duration or plan, data from
your CRM or CDP or custom data from your application or service.
[Creating a segment.](/customer-segmentation/creating-a-segment)
- **Answers** — the responses customers give to multiple choice questions.
- **Deflections** — value reminders, support paths and other non-incentive
alternatives that may prevent cancellation.
A rule defines which deflections to show to customers based on segments and
answers. If a customer exists in _any_ of the specified segments and answers
with _any_ of the specified answers, the customer matches the rule, and will be
displayed one of the rule's deflections.
When a rule has multiple deflections, one is chosen randomly to display to the
customer.
### Deflection rule groups
**Required plan:** Enterprise.
Deflection rule groups allow for finer control of deflection randomization
inside a deflection rule.
Click the **Add group** button to add a group inside a deflection rule. You can
configure as many groups as needed. If the deflection rule matches, a random
group will be chosen based on the configured weights.
For example, in the example group above:
- 25% of matches will get no deflection
- 25% of matches will get the "Snapshot" deflection
- 50% of matches will get either the "Guide" or the "Support" deflection (chosen
randomly)
### Rule evaluation
Rules are evaluated from the top down. When a customer matches a rule, rule
evaluation stops and no more rules are evaluated.
For example, in the example below, if the customer matches the second rule, they
will be presented with the "Guide" deflection. The remaining rule will not be
considered.
**Rule evaluation example, in top-down order:**
1. Customers in **Free trials**, with any answer, are presented no deflection.
2. Customers in **Premium plan** or **Pro plan** who answered **Not satisfied
with service or features** are presented the **Guide** deflection.
3. Any customer who answered **Billing issue** or **Support issue** is presented
the **Support** deflection.
If a customer matches a rule with no deflections, then no deflection is
presented and rule evaluation stops. In the example above, if the customer
matched the first rule, no deflection would be presented to that customer at
cancellation.
---
## Presenting offers during cancellation
Use [offers](/offers/creating-an-offer) to save customers at the point of
cancellation. Rather than showing the same incentive to every customer, you can
use offer rules to customize which offers are shown based on customer segments
and cancellation answers, allowing you to test offers and compare results across
distinct customer contexts.
## Rules
To customize offer rules, click **Flows** in the left navigation and then click
the **Offers** step.
Click **Add rule** to start a new rule or click into an existing rule to enter
editing mode.
Drag existing rules by their handles to change their order. Rules are evaluated
from top to bottom, so place more specific rules before broader ones.
### Understanding rules
A rule consists of three columns:
- **Condition** — Target
[customer segments](/customer-segmentation/creating-a-segment),
[segment groups](/customer-segmentation/creating-a-segment-group) or inline
conditions.
- **Answer** — Target answers from any eligible earlier multiple choice
question.
- **Offer** — Choose which offers to present, if any.
A customer matches the rule when they match _any_ selected segment, segment
group or inline condition **and** choose _any_ selected answer for _each_
configured question. Choose **Any** in the Condition or Answer picker when that
part of the rule should not restrict matching.
**Offer rule example:** Customers in **Premium plan** or **Pro plan** who
answered **Too expensive** or **Not satisfied with service or features** are
randomly presented either **40% off for 3 months** or **45% off for 3 months**.
In the example above, any customers in the segments "Premium plan" or "Pro plan"
who answered "Too expensive" or "Not satisfied with service or features" would
match the rule and be presented one of the two associated offers.
When a rule has multiple offers, one is chosen randomly to display to the
customer.
When the rule is configured, click **Save**. Offer rule changes are part of the
flow draft and must be [published](/cancellation-flows/publishing-changes)
before they affect the live flow.
### Offer rule groups
**Required plan:** Enterprise.
Offer rule groups allow for finer control of offer randomization inside an offer
rule.
Click the **Add group** button to add a group inside an offer rule. You can
configure as many groups as needed. If the offer rule matches, a random group
will be chosen based on the configured weights.
For example, in the example group above:
- 25% of matches will get no offer
- 25% of matches will get the "40% off for 3 months" offer
- 50% of matches will get either the "45% off for 3 months" or the "50% off for
1 month" offer (chosen randomly)
### Rule evaluation
Rules are evaluated from the top down. When a customer matches a rule, rule
evaluation stops and no more rules are evaluated.
For example, in the example below, if the customer matches the second rule, they
will be presented with the "45% off for 3 months" offer. The remaining rule will
not be considered.
**Rule evaluation example, in top-down order:**
1. Customers in **Free trials**, with any answer, are presented no offer.
2. Customers in **Premium plan** or **Pro plan** who answered **Too expensive**
or **Not satisfied with service or features** are presented **45% off for 3
months**.
3. Any customer who answered **Temporary, will be back** is presented **Pause
subscription**.
If a customer matches a rule with no offers, then no offer is presented and rule
evaluation stops. In the example above, if the customer matched the first rule,
no offer would be presented to that customer at cancellation.
### Comparing offers (A/B testing)
ProsperStack makes it easy to experiment with different offers to find which
works best. When you add multiple offers to a rule the offers will be presented
randomly. After enough data is collected, you can compare the acceptance rates
of the offers to find which are most effective at retaining customers.
ProsperStack also offers
[advanced A/B testing of offers](/offers/offer-ab-testing) for users on the
Prosper and Enterprise plans.
### Multiple offer steps
By default, a cancellation flow starts with a single offer step at the end of
the flow. If you'd like to present multiple offers during the flow, you can add
more offer steps by clicking the **+** icon between steps at the top of the
editor and choosing **Offer** in the menu. Enter a title and click **Add**.
Offer steps can also be moved around in the flow the same way as any other step
— just drag and drop.
### When offers are not shown
In some cases offers can't be presented despite matching an offer rule, e.g.
when the customer has previously accepted an offer. See
[When offers are not shown](/offers/when-offers-are-not-shown) for details.
---
## Showing a confirmation screen
:::info[Note]
Confirmation steps require version 2.0 of the flow library. See the
[2.0 upgrade guide](/for-developers/embedding-the-flow#200) for details.
:::
If you want to display a confirmation message at the end of the flow (after a
subscriber has canceled or accepted an offer), you can add a **Confirmation**
step.
**Confirmation example:** **Offer accepted.** Your offer has been accepted. Your
discount will be applied on your next invoice.
To add a confirmation step, open the flow editor by clicking **Flows** in the
left navigation and then the pencil icon in the flow steps diagram.
In the flow editor, click the plus icon that appears after the last step in the
top section and select **Confirmation**. You can only have one confirmation step
and it must be the last step in the flow.
## Configure confirmation rules
You can display different confirmation messages based on rules. Rules are
separated by outcome: **Saved** and **Canceled**. Select the applicable tab,
then click **Add rule**.
Each rule has the follow parts:
- **Condition** — Select saved segments, segment groups or inline conditions. A
customer can match any selected segment or condition.
- **Answer** — Select answers from multiple choice questions. A customer must
choose one of the selected answers for each configured question. Choose
**Any** when a question should not restrict the rule.
- **Offer** — For **Saved** rules, choose **Any offer** or select the offers the
customer must have accepted. This criterion does not appear for **Canceled**
rules.
- **Confirmation** — Select the confirmation screen to display, or select
**None** when a matching rule should end the flow without showing one.
Click **Save** to finish adding or editing the rule.
To change an existing rule, select its row, make your changes and click
**Save**.
## Create and edit confirmation screens
From the rule's **Confirmation** column, select an existing confirmation or
click **Create confirmation**. Configure:
- **Name** — A unique internal name
- **Icon** and **Color** — The icon displayed above the message and its color
- **Heading** — The subscriber-facing heading
- **Content** — The subscriber-facing rich text message
Click **Save** to create the confirmation.
## Rule evaluation and order
Saved and Canceled rules are evaluated independently from top to bottom. Drag
rules to change their order. ProsperStack displays the confirmation selected by
the first matching rule.
If no rule matches or if the first matching rule has no confirmation message,
the flow ends without displaying a confirmation screen. Edits to rules remain
part of the flow draft until you
[publish the flow](/cancellation-flows/publishing-changes).
## Notes for developers
When using a confirmation step in your flow, your integration may need to
specify an extra option. See the
[confirmation step notes](/for-developers/embedding-the-flow#showing-a-confirmation-message-after-the-flow)
in the developer documentation for details.
---
## Displaying a step conditionally
Sometimes you want to ask a question or present a deflection as a follow-up
based on a previous answer. For example, if a customer is leaving for a
competitor, you may want to ask which competitor. Or a flow step may only be
relevant to certain segments of your customers, such as free trials.
Step conditions allow you to display a flow step based on customer
[segments](/customer-segmentation/creating-a-segment), custom conditions or
answers to previous questions.
To edit step conditions, open the flow editor by clicking **Flows** in the left
navigation and then clicking the step you want to edit.
Click the arrow diamond icon to open the conditions panel.
## Conditions panel
Click segments and answers to toggle them on and off. You can also use inline
property conditions.
The flow step will be displayed if _any_ segment or condition matches **and**
_any_ answer matches for _each_ question.
### Adding an inline condition
You can also set conditions inline without having to create a segment.
Click **+ Add condition** to start.
Select a property, operator and value, then click **Save**.
---
## Previewing a flow
You can preview your cancellation flows at any time to test out changes and view
your cancellation experience from a subscriber's perspective.
Click the **Preview** button at the top of the flow editor to open a preview
cancellation session.
At the top of the preview are options to configure the language (Enterprise
plan), a real subscription to preview as, segments, custom properties and screen
size used for your preview session. You can also share previews and toggle
between published and draft versions of the flow.
## Responsive previews
To preview how your cancellation flow will look on different devices, you can
enable the responsive toolbar. Click the toggle button at the top of the flow
preview to open the responsive mode toolbar.
Select from the available preset device sizes (laptop, tablet, mobile) or enter
custom dimensions to see how your flow will look at different sizes.
Choose **Full screen** to preview the embedded full-page experience or **Modal**
to preview the flow in its modal presentation.
The ProsperStack cancellation flow is fully responsive, so it should work and
look great on all commonly used device sizes.
## Previewing as a subscription
Click the **Subscription** button at the top of the flow preview to preview the
flow as one of your account's real subscriptions, using their actual segments,
offers, properties and merge tags.
Search for the customer and select which of their subscriptions to preview. If
the subscription hasn't been synced to ProsperStack yet, click **Sync and
preview** to import it and preview it.
Previewing as a subscription doesn't create a session, apply an offer, or notify
the customer. While a subscription is selected, the segment and properties
options are unavailable, since those are determined by the subscription instead.
Clear the subscription to configure them manually again.
## Previewing with customer segments
You can select customer segments to use for a preview session, allowing you to
easily preview
[conditional steps](/cancellation-flows/displaying-a-step-conditionally) or
evaluate that your
[offer rules](/cancellation-flows/presenting-offers-during-cancellation) are
working as intended.
Click the segment dropdown to toggle which segments to use for your preview
session.
This option is unavailable while previewing as a subscription, since segments
are then determined by the subscription you selected.
## Previewing with subscriber and custom properties
To preview your
[subscriber property tags](/cancellation-flows/customizing-a-flow#using-subscriber-and-custom-property-tags)
or test out custom properties used in
[snapshot deflection items](/cancellation-flows/creating-a-deflection#snapshot-items),
you can configure subscriber and custom properties for a preview session.
Click the **Properties** button to open the property configuration dialog.
This option is unavailable while previewing as a subscription, since property
values are then taken from the subscription you selected.
### Subscriber details
In the subscriber details section, you can configure the values used for
[subscriber property tags](/cancellation-flows/customizing-a-flow#using-subscriber-and-custom-property-tags)
in your preview session. Leave these blank to use any configured fallback
values.
### Subscriber, subscription and custom properties
The property selector includes supported subscriber properties, subscription
properties and custom subscriber or subscription properties. Select a property
and provide the value ProsperStack should use in the preview. Use **Add
property** to configure additional values.
If you have any customer segments that use the configured properties, those may
be matched as a result of the preview values. Any matching segments are
indicated in the segment dropdown.
### Saving default values
Click the **Save as default** button to save all configured properties as the
default values whenever previewing the flow. You can override the defaults
temporarily for a preview session by altering a property value and clicking
**Done**. Click **Reset to default** to reset all values to your configured
defaults.
## Previewing unpublished changes
If you have unpublished changes to your cancellation flow, you can toggle the
flow preview between showing your live version or your unpublished changes.
Read more about publishing changes to your cancellation flow in
[the next section](/cancellation-flows/publishing-changes).
## Sharing previews
Generate a link to share the published or draft state of your cancellation flow
with stakeholders.
Click **Share** and then the **Copy to clipboard** button.
Note that the current settings (segments, properties, etc) will be applied to
the shared flow preview. If you're previewing as a subscription, that selection
is not included in the shared link — only the segment and property settings
you've configured manually.
---
## Publishing changes
When you make changes to your cancellation flow, a draft version of the flow is
created. You can make as many changes as you need without affecting your live
cancellation flow.
When you have unpublished changes, you'll see an orange indicator by the
**Publish** button at the top right of the flow editor screen.
## Previewing changes
If you have unpublished changes, you can toggle the flow preview between showing
your live version or your unpublished changes.
## Publishing
Once you're happy with your changes, you can publish your flow to update your
live cancellation experience. Click the **Publish** button at the top right of
the flow editor screen and then click **Publish changes** in the menu.
You can leave a note to describe the nature of the changes. Notes appear as
[annotations on Insight reports](/insights/reporting-overview#chart-annotations)
to help you associate changes with results.
## Discarding changes
If you choose not to publish changes, you may discard them. Click the
**Publish** button at the top right of the flow editor screen and then click
**Discard changes** in the menu.
In the confirmation dialog, click **Discard changes** again. This permanently
removes the unpublished draft changes and restores the draft to the currently
published flow.
---
## Compliance
Some jurisdictions regulate cancellation processes. ProsperStack provides a
couple options to facilitate compliance:
- **One-click cancel** — Display a link to cancel immediately from any step in
your cancellation flow.
- **Instant cancel step** — Give subscribers an immediate option to cancel as
the first flow step, while asking for feedback and optionally displaying a
retention offer.
Both compliance options can be enabled for all, none or some subscribers using
customer segmentation.
## Enabling one-click cancel
The one-click cancel option displays a persistent cancellation link that allows
subscribers to cancel immediately from any step in your cancellation flow. It
appears in the left column beneath the headline and subheadline.
Configure this option in flow settings. Click **Flows** in the left navigation,
find the flow you want to edit, click the ellipsis menu and then **Flow
settings**. Or from the flow editor, click the **Settings** button.
You can choose to show the persistent link to none, all or some subscribers
using segments or conditions.
Click **Save** to finish editing the rule and then click **Save** in the upper
right to save flow settings.
The link's [text can be customized](/cancellation-flows/customizing-a-flow#text)
like any other flow text, and its appearance can be modified with
[custom CSS](/for-developers/custom-css).
## Creating an instant cancel step
The instant cancel step gives subscribers an immediate option to cancel, while
asking for feedback and optionally displaying a retention offer.
Click **Flows** in the left navigation and then click the pencil icon to open
the flow editor.
In the flow step diagram, click the plus icon that appears before the first step
and select **Instant cancel**. This step type must always come before all other
steps.
Give it a title and click **Save**.
### Customizing text
Like elsewhere in the flow,
[all text is customizable](/cancellation-flows/customizing-a-flow#text). Click
the pencil icon next to any piece of text to start customizing.
### Setting up offer rules
You may optionally display a retention offer on the instant cancel step.
Which offer to display is determined by
[offer rules](/cancellation-flows/presenting-offers-during-cancellation#understanding-rules).
### Limiting to specific segments
To display the instant cancel step only to specific customer segments, use
[step conditions](/cancellation-flows/displaying-a-step-conditionally).
---
## Flow A/B testing
**Required plan:** Prosper or Enterprise.
Flow A/B testing lets you run controlled experiments on complete cancellation
experiences. Compare a control with one or more variants to determine whether
changes to questions, messaging, logic or interventions improve retention
performance.
ProsperStack assigns traffic to the variants and compares their retention rates,
giving you evidence to decide which experience to keep and what to test next.
## Creating an A/B test
To create a flow A/B test, you need at least two cancellation flows. Navigate to
**Flows** and select **A/B tests**, then click **Create A/B test**.
Enter a unique **Name**, select a flow as the **Control** and select another
flow as **Variant 1**. You can also add an optional **Variant 2**. Click
**Save**.
### Assignment
By default, an A/B test uses **sticky assignment**: once a subscription is
assigned a variant, it will keep seeing that same cancellation flow every time
it enters the test. This keeps the experience consistent for a returning
customer and avoids skewing results if the same subscription starts a
cancellation session more than once during the test.
If you'd rather have each cancellation attempt assigned a flow independently at
random, uncheck **Sticky assignment** when creating or editing the test.
### Variant weights
**Required plan:** Enterprise.
Weights control how likely a customer is to see a variant in an A/B test. For
example, you can use weights to roll out a flow variant to a small percentage of
customers to validate effectiveness before committing to a full launch.
## Routing cancellations to an A/B test
To activate an A/B test, select the test in the
[flow routes editor](/cancellation-flows/multiple-flows#routing-customers-to-a-flow).
When the rule containing an A/B test is matched, the subscriber will be routed
to a cancellation flow chosen from the A/B test in proportion to the variant
weights. With sticky assignment enabled, a subscription is routed to the same
flow on every subsequent match; otherwise a flow is chosen at random each time.
ProsperStack will track the results and update your A/B test metrics in
real-time.
## Ending an A/B test
When your A/B test has collected enough data to determine a winning cancellation
flow, you can end the test by clicking the **End test** button. If a
statistically significant winner can be determined automatically, it will be
pre-selected. Confirm the winning flow to end the test.
Once a test is complete, the winning flow will be selected for any sessions that
are routed to the A/B test.
---
## Multiple flows
**Required plan:** Prosper or Enterprise.
If you have multiple products or different segments of customers that require a
unique cancellation flow, you can create multiple flows in ProsperStack to offer
customized cancellation experiences tailored to specific customers.
## Creating a new flow
To create a new cancellation flow, navigate to the **Flows** screen and click
the **Create flow** button. Enter a unique **Name**, then click **Create**.
## Duplicating an existing flow
On the **Flows** screen, find the flow you want to duplicate and click the
ellipsis menu, then choose **Duplicate flow**.
Give it a name and click **Duplicate**.
## Routing customers to a flow
When you have multiple flows, you can route customers to a flow based on
[customer segments](/customer-segmentation/creating-a-segment).
To manage flow routing rules, click the **Manage routes** button in the
**Flows** screen.
Click **Add rule** to start a new rule or click into an existing rule to enter
editing mode.
### Understanding rules
A flow route rule consists of two parts:
- **Condition** — Select [segments](/customer-segmentation/creating-a-segment),
[segment groups](/customer-segmentation/creating-a-segment-group) or inline
conditions.
- **Flow** — Select one or more cancellation flows, or select a
[flow A/B test](/cancellation-flows/flow-ab-testing).
A rule defines which flows to route a customer to based on segments. If a
customer exists in _any_ of the specified segments, the customer matches the
rule, and will be routed to one of the rule's flows.
**Routing rule example:** Customers in **Free trials** are routed to the **Free
trials** cancellation flow.
In the example above, any customers in the segment "Free trials" would be routed
to the "Free trials" cancellation flow.
When a rule has multiple flows, one is chosen randomly to route the customer to.
### Rule evaluation
Rules are evaluated from the top down. When a customer matches a rule, rule
evaluation stops and no more rules are evaluated.
For example, in the example below, if the customer matches the first rule, they
will be routed to the "Free trials" cancellation flow. The remaining rule will
not be considered.
**Routing example, in top-down order:**
1. Customers in **Free trials** are routed to the **Free trials** flow.
2. Customers in **Pro plan** or **Premium plan** are routed to the **Pro** flow.
Drag rules to change the order. Rule edits and reordering are staged until you
save the overall routing configuration.
### Default flow
If no route rule is matched by a canceling customer (or you have not configured
any route rules), the default cancellation flow will be used. You can change
your default cancellation flow using the **Default flow** dropdown.
### Saving route changes
When you save changes to your flow routing configuration, the changes will take
effect immediately. Use [test mode](/for-developers/test-mode) to try out
changes to your flow without affecting your live cancellation experience.
## Displaying a message when cancellation is prohibited
It's not unusual to have cases where users should be prevented from
cancellation. Use custom "eligibility messages" in ProsperStack to define these
cases.
**Eligibility message example:**
> **Annual contract**
>
> Thank you for being a valued customer. Because you are currently enrolled in
> an annual contract, cancellation is not available until the contract term
> ends. Please refer to your contract details for the renewal date or contact
> our support team for assistance.
Eligibility messages are configured with flow routing. Click the **Manage
routes** button on the **Flows** screen to access.
Click **Add rule** to start a new eligibility message rule or click into an
existing rule to enter editing mode.
Like flow routes, eligibility messages are configured as a set of rules. Each
rule consists of two parts: segments and messages.
Rules are evaluated from top down. If a customer matches _any_ of the specified
segments, the customer will be displayed the associated eligibility message and
prevented from accessing cancellation.
Reuse an existing message or click **Create message** to set up new message
copy. Enter a required **Name**, then configure the subscriber-facing **Header**
and rich-text **Message**. Click **Save** to return to the rule.
To update an existing message, use its edit action, change the fields and click
**Save**. Select the message as the rule destination and save the rule, then
save the overall routing configuration as described above.
---
## Languages & translations
**Required plan:** Enterprise.
Multilingual support allows you to translate your flows and offers.
## Adding a language
Configure languages from the flow editor. Click **Flows** in the left navigation
and then click the pencil icon to open the editor.
Click the language menu in the top left and select **Language settings**.
Choose from available languages and click **Save**. Your selected languages will
now be visible in the language menu.
## Viewing translations
To view your flow in a particular language, click the language menu in the top
left and choose a language.
The flow will now display your translations for the selected language. Text that
hasn't been translated will default to English.
## Editing translations
Once you've [added a language](#adding-a-language), you'll see the translation
selector wherever you edit subscriber-facing content, including offers,
deflections, survey questions and flow text.
Click between languages to view and edit your translations.
---
## Editing rich content
Some fields in ProsperStack, such as deflection and offer content, support rich
text, which allows you to add headings, format text, and insert tags, links and
media.
## Adding a link
To add a link, select the text that you want to make into a link. Click the link
icon in the editor toolbar to open the link dialog, enter a destination **URL**
and click **Apply**.
## Adding and editing images
To insert an image, click the image icon in the editor toolbar to open the image
dialog. Drop an image onto the upload area or click the area to select a file,
then click **Insert image**.
To replace an inserted image, select it in the editor and click the pencil icon.
Drop or select the replacement image, then click **Save**.
## Inserting videos
You can also insert videos in the content section to present a custom video
message to your subscribers. Supported video platforms include Vimeo, Wistia,
Loom and YouTube.
Click the video icon in the editor toolbar to open the video dialog. Choose your
video provider and paste the URL to the video in the **Video URL** text box.
If you'd like the video to auto-play when the deflection card is viewed by a
subscriber, toggle the **Auto-play** option. Select **Start muted** to begin
playing the video without sound, which allows autoplay to work on all devices
including mobile browsers. If you leave **Start muted** off, the video will play
with sound but may not autoplay on mobile browsers.
To edit an inserted video later, select it in the editor, click the pencil
overlay, update its settings and click **Save**.
## Inserting property tags
Property tags personalize content with subscriber details or custom property
values.
To insert a property tag, click the tag icon in the toolbar editor to open the
tag dialog and choose a property.
If the property is a date, choose its **Date format**.
If the property is numeric, choose its **Number format**:
- **Unformatted** displays a value without separators, such as `100000`.
- **Formatted** adds number separators, such as `100,000`.
- **Currency** displays the value as currency, such as `$100,000`.
Optionally enter a **Fallback** to display when the property has no value.
Click **Insert tag**.
---
## Creating an offer
Offers are used to incentivize customer actions. Offers can support retention,
conversion, reactivation and payment recovery objectives.
To create an offer, click **Offers** in the left navigation and then the
**Create offer** button.
## Goal
The first step when creating an offer is to choose a goal. The goal determines
where the offer can be used, what features are available, and how success is
measured.
ProsperStack supports four goals:
- **Retention** - Incentivize at-risk or churning subscribers to stay
- **Conversion** - Encourage free users to upgrade to a paid subscription
- **Reactivation** - Re-engage former subscribers with targeted offers
- **Payment recovery** - Reclaim lost revenue through targeted offers
Click the desired goal to continue.
:::info[Note]
You may not see the goal step if your account does not have access to additional
goal types. Contact us to learn about adding additional goals to your account.
:::
## Context
The next step is to choose offer context. The context determines where the offer
can be used.
- **Cancellation flow** - Present retention offers
[during cancellation](/cancellation-flows/presenting-offers-during-cancellation)
based on complex offer rules.
- **Conversion campaign** - Show popup or banner-based offers as part of a
[conversion campaign](/conversion/presenting-offers).
- **Landing page** - Display an offer on a dedicated page and link to it from an
email [automation](/automations/creating-an-email#linking-to-an-offer) or
elsewhere.
Click the desired context to continue.
:::info[Note]
Not all contexts are available for all goals. For example, the "cancellation
flow" context is only available for retention offers.
:::
## Type
ProsperStack supports a variety of common offer types, including **Coupon**,
**Change plan**, **Trial extension**, **Pause subscription**, **Reschedule
order**, **Product swap**, **Custom** and more. Which types are available
depends on goal and context.
[Learn more about offer types](/offers/offer-types).
Click the desired type to continue creating your offer.
## Basic details
Offer details depend on the goal, context and type, but most offers require the
same basic details, which are described below.
For type-specific fields, see the [offer type](/offers/offer-types) section.
### Name
Enter a unique name for your new offer (for coupons, this may appear on receipts
and invoices).
### Tags
Use tags to categorize your offers. Find relevant offers faster with the tag
dropdown on the Offers page. To create a new tag, type the name and click **+
Add**.
### Style
The style option depends on offer context.
#### Cancellation flow
Retention offers can be presented as a modal that pops up over your cancellation
flow or as a step within the cancellation flow.

#### Conversion campaign
Conversion offers can be presented as a modal appearing in the center of the
page or as a banner across the top of the page.

#### Landing page
There are no style options for landing page offers.
### Time mode
Conversion offers can be time-limited (i.e. exploding offers) or available
indefinitely.
- **None** — Offer is available indefinitely.
- **Fixed** — Offer is available for a fixed time range, i.e. a holiday sale.
Select a date range the offer will be valid for.
- **From first seen** — Offer is available for a limited time after first seen.
When each customer sees the offer for the first time, they will have the
specified amount of time to accept the offer before it expires.
For **From first seen**, choose whether the offer remains available for **1
hour**, **12 hours**, or **24 hours** after each customer first sees it.
When **Fixed** or **From first seen** is selected, toggle **Show countdown
timer** to choose whether the remaining time is displayed to the customer. The
offer's availability is still limited by the configured time even when the
countdown is hidden.
### Allow override
If you'd like your offer to be available to subscribers who have previously
accepted an offer, enable the **Allow override** option. For more details on
offer overrides, see the guide on
[advanced offer scenarios](/offers/advanced-scenarios). See
[When offers are not shown](/offers/when-offers-are-not-shown) for all checks
that may exclude an offer after it matches a rule.
## Customizing offer appearance
In the **Offer modal** section, you can customize the following fields to
control the appearance and content of your offer:
- **Banner** — Show a "Special Offer" banner with the offer
- **Headline** — The heading text that appears at the top of the offer
- **Image** — An image to display in the offer body
- **Content** — Rich text content to display in the offer body
- **Button text** — Customize the text of the **Accept offer** button
Use the [rich content toolbar](/cancellation-flows/editing-rich-content) to add
headings, format text or insert tags, images and video.
### Using images in offers
Use images in your offer content to present a customized message that matches
your brand.
When using an image in your offer, the **Headline** and **Content** fields are
optional.
### Custom branding
For more advanced control of offer appearance, you can use custom CSS to
completely change the look and feel to match your brand.
[Learn more about using custom CSS.](/for-developers/custom-css)
## Confirmation modal
For conversion campaign offers, enable **Show confirmation modal** to ask the
customer to confirm before the offer is accepted. Configure the **Content**,
**Confirm button text**, and **Cancel button text** that appear in the modal.
## Metadata
Use **Metadata** to add key-value data to an offer. When a customer accepts the
offer, the metadata is returned with the flow payload. See
[Offer metadata](/for-developers/custom-subscription-platform#offer-metadata)
for an integration example.
Pause subscription and change -frequency offers also support metadata on each
individual option. Use option metadata when your application needs different
data depending on which pause duration or billing frequency the customer
chooses.
## Languages & translations
Support for
[languages & translations](/cancellation-flows/languages-and-translations) is
included in the Enterprise plan.
---
## Offer types
With ProsperStack you can present a variety of different offers to your
customers to entice them to remain with you.
:::info[Note]
Available offer types vary by connected subscription platform. Refer to the
[platform feature support reference](/subscription-platforms/connecting-your-subscription-platform#supported-platforms)
for details on the offer types supported by your platform.
:::
## Coupon
**Supported goals:** Retention and Conversion.
**Coupon** offers are a discount applied to the customer's subscription. When
you create a coupon in ProsperStack, you can either use a coupon that you've
already created in your subscription platform or you can have ProsperStack
create a new one for you.
To create a new coupon in your subscription platform, select **Create new
coupon**, or to use a coupon you've already created, select **Use existing
coupon**.
If you're creating a new coupon, fill in the details of the coupon, including
discount amount and duration. If you're using an existing coupon, the coupon
details will be prefilled automatically.
### Discount types
Coupons can be one of the following types:
- **Percentage** — discounts the subscription by a percentage of the invoice
amount.
- **Fixed amount** — discounts the subscription by a fixed dollar amount.
- **Script** — a Stripe
[script coupon](https://docs.stripe.com/billing/subscriptions/script-coupons)
whose discount amount is computed by a Stripe-hosted script. As the exact
discount cannot be displayed in advance, script coupons are described
generically as "a discount on your subscription." Script coupons cannot be
used with payment-collecting offer goals (reactivation, conversion, or payment
recovery).
### Coupon duration
When creating a coupon, choose how long the discount applies. Available choices
depend on your subscription platform:
- **Once** — Apply the discount one time.
- **Forever** — Apply the discount for the remaining life of the subscription.
- **Multiple months** or **Multiple billing cycles** — Apply the discount for a
limited number of months or billing cycles.
### Coupon ID
When using a [custom platform integration](/subscription-platforms/custom), you
can enter an optional **Coupon ID** or code from your billing system. This value
is returned as the coupon's platform identifier so your application can apply
the corresponding discount. For supported connected platforms, ProsperStack
creates or retrieves the platform coupon identifier automatically.
### Choose a subscription or customer coupon
If supported by your subscription platform, you can choose whether the coupon
should be applied to just the subscription that is being canceled or the entire
customer. In most situations, we recommend choosing **Subscription**, but if
you'd like the coupon to be applied to all of the customer's subscriptions,
select **Customer**.
### Apply discount to order or items
On platforms that support per-item discounting, you may be able to choose how a
new percentage-based coupon discount is applied:
- **Order** — The discount is applied to the order as a whole, even if the order
is comprised of items belonging to multiple subscriptions.
- **Items** — The discount is applied only to the items belonging to the
subscription that was passed into the cancellation flow. These discounts
usually combine with any "subscribe and save" discounts already on the item.
This option is only available for percentage coupons and cannot be changed after
the coupon has been created. Fixed-amount coupons always apply to the order as a
whole.
### Replacing other active coupons
By default, a coupon offer will not be presented to a canceling subscriber if
the subscriber already has an active coupon. If you'd like your new coupon to
replace any other coupons the subscriber may have active, you can enable the
**Replace coupons** option. See
[When offers are not shown](/offers/when-offers-are-not-shown#coupon) for other
conditions that can exclude a coupon offer.
### Ending trial when accepted
When a conversion offer is accepted, by default the customer's trial will
automatically end. If you prefer to have the trial continue through the original
term, you can disable the "End trial" option. Note that the coupon will take
effect at the end of the trial period.
## Change plan
**Supported goals:** Retention and Conversion.
**Change plan** offers will switch the customer to a new pricing plan as an
alternative to canceling.
Select the plan the offer should switch a customer to from your list of
available billing plans.
If your subscription platform supports scheduled plan changes, use **Change at**
to choose when the accepted offer takes effect:
- **Immediately** — Switch the subscription as soon as the customer accepts the
offer.
- **End of period** — Switch the subscription at the end of its current billing
period.
On platforms without this choice, the subscription changes immediately.
For supported immediate plan changes, enable **Reset billing date** to begin a
new billing cycle on the date the plan changes. This option is not available for
changes scheduled at the end of the billing period.
If you'd like the customer to be billed for any prorated charges or credits when
an immediate plan change occurs, toggle the **Apply prorated charges or
credits** option.
### Applying a coupon to the new plan
You can also apply a coupon to the new plan by selecting one of your existing
coupon offers in the **Additional coupon offer** section.
The selected coupon will be automatically applied when the change plan offer is
accepted by a customer.
## Upgrade
**Supported goals:** Retention and Conversion.
**Upgrade** offers move a customer to a higher-tier subscription option. The
destination field depends on your subscription platform:
- For Naviga, select a **Paper Code**, then select the **Upgrade offer** within
that publication.
- For Piano, select an **Upgrade term**. If the selected dynamic term contains
defined billing periods, also select the required **Period** to apply when the
offer is accepted.
When **Upgrade at** is available, choose **Immediately** or **End of period**.
If the option is not available, the upgrade occurs immediately.
## Downgrade
**Supported goals:** Retention and Conversion.
**Downgrade** offers move a customer to a lower-tier subscription option. On
Naviga, select a **Paper code** and then the **Downgrade offer**.
For **Downgrade at**, choose **Immediately** or **End of period**.
## Trial extension
**Supported goals:** Retention and Conversion.
**Trial extension** offers will extend the customer's trial by a fixed amount of
days.
Enter the number of days you'd like the offer to extend a customer's trial for.
When the offer is accepted, the customer's trial period will be automatically
extended in your subscription platform.
By default, trial extension offers are shown only to subscribers with an active
trial. On supported platforms, enable **Allow without active trial** to make the
offer available without one. When this setting is enabled, select **Apply
prorated charges or credits** to use proration when the extension is applied
without a trial.
## Pause subscription
**Supported goal:** Retention.
**Pause subscription** offers will pause the customer's subscription (halt
payments) for a fixed period of time. A pause subscription offer can pause the
customer's subscription for a preset period of time or allow the customer to
select from up to three duration options.
You can create up to three distinct pause options to present to the customer.
Click **Add option** to add additional options.
For each pause option, choose the **Duration**. Depending on your subscription
platform, the choices can include:
- **Billing cycles**
- **Multiple months**
- **Multiple weeks**
- **Multiple days**
- **Indefinitely**
- **Choose date**
For billing cycles, months, weeks, or days, enter a positive number.
With **Choose date**, the customer selects when to start and resume the pause
while accepting the offer.

When adding multiple options, the text of each option can be customized.
### Pause billing date options
When creating a pause offer, you can also choose how the billing date is handled
during the pause:
- **Do nothing (none)** — Pauses payments without changing the existing billing
schedule. Once the pause ends, billing resumes on the original billing dates
as if no pause had occurred.
- **Extend by length of pause (extend)** — Shifts the next billing date forward
by the length of the pause, so customers receive their full remaining prepaid
time once the pause ends.
- **Reset when pause ends (reset)** — Starts a new billing cycle on the day the
pause ends, resetting the billing schedule entirely.
**Note:** The **extend** and **reset** billing date options are only available
with the Stripe platform integration.
#### How billing dates are shifted during pauses
For pauses using the **extend** or **reset** options, ProsperStack sets a trial
period until the date when the subscription should resume billing. This moves
the billing date forward without prorated charges and allows you to either
preserve the customer's full prepaid value or start a new billing cycle,
depending on the billing date option you've chosen.
### Choose when to pause the subscription
If
[supported by your subscription platform](/subscription-platforms/connecting-your-subscription-platform#supported-platforms),
you can choose to either pause subscriptions immediately or at the end of the
customer's billing period.
## Modify subscription
**Supported goal:** Retention.
**Modify subscription** offers can make changes to the customer's subscription
such as adding or removing line items or add-ons.
If your subscription platform supports multiple subscription line items (i.e.
multiple plans per subscription), you can select plans to add to the
subscription as well as plans to remove.
If your platform supports add-ons, you can select add-ons to add or remove from
the subscription.
On platforms that support add-on quantities, configure each included add-on with
either a fixed **Quantity** or **Match plan quantity**. Matching uses the
quantity of the subscription's plan instead of a fixed value. The fixed quantity
defaults to 1.
For removed add-ons, choose **Specific add-ons** to select the individual
add-ons that should be removed, or **All add-ons** to remove every add-on from
the subscription.
With the **Modify at** option, you can choose to apply the changes immediately
or at the end of the customer's billing period.
You can also choose whether or not the customer will be billed for any prorated
charges or credits with the **Apply prorated charges or credits** option. This
option is only available when the modification is set to apply immediately.
When a modify subscription offer is accepted, ProsperStack will apply the
changes to the subscription automatically.
## Reschedule order
**Supported goal:** Retention.
**Reschedule order** offers allow customers to skip or reschedule their next
order as an alternative to cancellation.
By default, customers can skip or reschedule, but rescheduling can be disabled
when creating the offer.
Enter **Skip button text** and **Reschedule button text** to customize what your
subscribers see.
## Change frequency
**Supported goal:** Retention.
**Change frequency** offers allow customers to modify delivery frequency based
on options you configure.
You can create up to three distinct options for the customer to choose from.
Click **Add option** to add another frequency.
For each frequency option, select an **Interval** (**Years**, **Months**,
**Weeks**, or **Days**) and enter a number.
When presenting multiple choices, you can customize the **Text** shown to the
customer.
## Product swap
**Supported goal:** Retention.
**Product swap** offers allow customers to choose a different product instead of
canceling.
When creating the offer, select whether to display any available products or
specific products. When specifying products, you may also choose which product
variants are made available.
To present more than one specific product, select the first product and its
available variants, then click **Add product**. Repeat this for each additional
product.
**Note for Bold integrations:** The "any available" option will present products
from within a subscription group, based on the customer's current product.
## Free / discounted gift
**Supported goal:** Retention.
Select a product from your catalog to offer as a gift. If the product has
multiple variants, choose a variant to present.
For Ordergroove, this type appears as **Discounted gift** and can represent a
discounted or free incentive. After choosing the product and variant, select the
required platform **Offer** that defines the promotion.
## Purchase
**Supported goal:** Conversion.
Use a **Purchase** offer to present a one-time purchase to your users, such as a
data migration or additional usage credits.
Specify a product and plan from your catalogue. Only one-time products/plans are
available.
## Reactivate
**Supported goal:** Reactivation.
**Reactivate** offers encourage former subscribers to start a new subscription.
They are available for landing page offers on supported subscription platforms.
Configure the incentive using the same options described in the
[Coupon](#coupon) section.
When the customer accepts the offer, ProsperStack uses the applicable plan and
payment information to reactivate the subscription and applies the configured
coupon through your subscription platform.
## Payment recovery
**Supported goal:** Payment recovery.
**Payment recovery** offers encourage subscribers with a failed payment to
update their payment information. They are available for landing page offers on
supported subscription platforms.
Configure the incentive using the same options described in the
[Coupon](#coupon) section.
When the customer accepts the offer, ProsperStack applies the coupon and uses
the updated payment method to retry an identifiable past due invoice. If no past
due invoice can be identified, the subscription platform handles its normal
payment retry process.
## Custom
**Supported goals:** Retention, Conversion, and Reactivation.
**Custom** offers allow you to create unique ways to incentivize your customers
to stay. Implement custom logic in your application to take action when they are
accepted.
---
## Offer A/B testing
**Required plan:** Prosper or Enterprise.
Offer A/B testing lets you compare incentives or messaging under controlled
conditions. Use a control and one or more variants to test a specific hypothesis
about what customers will accept and which intervention produces better
retention outcomes.
ProsperStack assigns traffic to the variants and compares their acceptance
rates. Consider acceptance alongside retained value and longer-term performance
when deciding which offer to keep and what to test next.
## Creating an A/B test
To create an offer A/B test, you need at least two offers. Navigate to
**Offers** and select **A/B tests**, then click **Create A/B test**.
Enter a unique **Name**, select an offer as the **Control** and select another
offer as **Variant 1**. You can also add an optional **Variant 2**. Click
**Save**.
### Sticky assignment
By default, an A/B test uses **sticky assignment**: once a subscription is
assigned a variant, it will keep seeing that same variant every time it enters
the test. This keeps the experience consistent for a given customer across
multiple cancellation attempts.
If you'd rather have each cancellation attempt independently assigned a variant
at random — rather than sticking to whatever the subscription saw previously —
uncheck **Sticky assignment** when creating or editing the test.
### Variant weights
**Required plan:** Enterprise.
Weights control how likely a customer is to see a variant in an A/B test. For
example, you can use weights to roll out a new offer to a small percentage of
customers to validate effectiveness before committing to a full launch.
## Using an A/B test in a cancellation flow
To activate an A/B test, select the test in the
[offer rules editor](/cancellation-flows/presenting-offers-during-cancellation#rules)
in a cancellation flow. When the rule containing an A/B test is matched, the
subscriber will be presented an offer from the A/B test, chosen according to the
variant weights and the test's assignment setting. ProsperStack will track the
results and update your A/B test metrics in real-time.
## Ending an A/B test
When your A/B test has collected enough data to determine a winning offer, you
can end the test by clicking the **End test** button. If a statistically
significant winner can be determined automatically, it will be pre-selected.
Confirm the winning offer to end the test.
Once a test is complete, only the winning offer will be presented in any
cancellation flows using the A/B test.
---
## Autopilot offers
**Required plan:** Prosper or Enterprise.
Autopilot accelerates offer experimentation within the strategy and guardrails
you define. It tests incentive and copy variants, learns from customer outcomes
and allocates more traffic to stronger performers. As it continues to run,
Autopilot pauses underperformers and introduces new variants over time.
## How Autopilot offers work
When you [create an Autopilot offer](#creating-an-autopilot-offer), you choose
whether to optimize copywriting, discounts or both. For coupon offers, you set
the boundaries: max discount and duration, gross margin and more.
Once you've configured your offer, Autopilot creates incentive and/or copy
variants based on your choices. AI-generated copy always requires your approval
before going live. Once the offer is added to a cancellation flow, Autopilot
will test performance, adjust traffic allocation based on results, and keep
exploring while favoring stronger performers.
## Creating an Autopilot offer
To create an Autopilot offer, navigate to the **Offers** screen, click the
**Autopilot offers** tab, and then click the **Create Autopilot offer** button.
### Goal, context and type
As with other offers, you must choose offer goal, context and type.
The available goals depend on your account features and connected subscription
platform.
Click the desired options to continue creating your offer. Learn more about
[offer types](/offers/offer-types).
### Strategy
All offer types support copywriting optimization. For coupon offers, you can
choose to optimize discount, copywriting or both.
- **Copywriting** — Autopilot creates copy variants with unique headlines,
content and button text.
- **Discount** — Autopilot creates incentive variants to test different discount
and duration combinations.
- **Both** — Autopilot creates and optimizes both copy and incentive variants.
Click the desired strategy to continue creating your offer.
### Basic details
Enter a unique name for your new Autopilot offer and provide its basic details.
To learn more about these standard options, refer to the
[creating an offer](/offers/creating-an-offer#basic-details) page.
#### Control
Specify a control offer to compare Autopilot performance against a known
baseline. When a control is configured, 20% of traffic goes to the control and
80% to Autopilot.
### Offer incentives
When using just the copywriting strategy, you'll configure your incentives like
you would for a standard offer. See [offer types](/offers/offer-types) for
details.
When using the discount strategy for coupon offers, you'll provide guardrails
for incentive variant generation.
- **Optimize for** — Choose whether Autopilot should maximize customer retention
(acceptance rate) or long-term value, factoring in average post-offer payments
and gross margin (forecasted value). Forecasted value is only compatible with
monthly-equivalent subscriptions (monthly, 28-day, 30-day, and 4-week plans).
- **Discount range** — Minimum and maximum discount Autopilot may use.
- **Max duration** — Longest discount period Autopilot may offer.
- **Max generosity** — From low to high, how aggressive Autopilot can be when
combining discounts and durations. For example, you may want to allow a
maximum 100% discount and a maximum 12 month duration, but not both at the
same time.
- **Gross margin** — The percentage of revenue kept after subtracting direct
costs. For example, if it costs $20 to provide a $100 subscription, the gross
margin is 80%. Gross margin helps Autopilot avoid unprofitable
discount-duration combinations.
- **Require approval for incentive variants** — When enabled, new incentive
combinations need your approval before going live.
### Copywriting
If you choose to use AI-generated copy, Autopilot will create copy variants with
unique headlines, content and button text. You may optionally provide additional
instructions for the AI to follow when generating copy.
Otherwise, you'll be asked to enter standard copy fields like any other offer.
Click **Save** to continue.
### Review and approve offer variants
Before using an Autopilot offer that includes AI-generated copy, you must
approve at least one copy variant. If you enabled **Require approval for
incentive variants**, coupon variants also require your approval.
#### Copywriting approval
For each copy variant, you can approve as-is, make edits or regenerate
completely.
If you'd like to make minor changes to the AI-generated copy, click the pencil
icon to [open the variant copy editor](#editing-variant-copy).
Alternatively, you can click the arrows icon to discard the current text and
regenerate fresh copy.
When you're satisfied with the variant copy, click the **Approve** button.
#### Editing variant copy
Clicking the pencil icon beneath an offer variant opens a modal which allows you
to edit the offer headline, content and button text like any other offer.
Click **Save and approve** (or **Save and close**) when you're finished making
edits.
#### Editing variant metadata
Use metadata to associate custom key/value data with an individual Autopilot
variant. Open the variant menu, click **Edit metadata**, add or edit the
metadata rows and click **Save**. When that variant is accepted, its metadata is
returned with the offer data. See
[Offer metadata](/for-developers/custom-subscription-platform#offer-metadata)
for integration details.
## Viewing Autopilot offer details
The Autopilot offer detail page provides performance metrics.
- **Insights** — High-level outcomes such as acceptance (accepts, declines, and
presentations) and saved revenue when available.
- **Control** — See how Autopilot compares to your control, if selected.
- **Active variants** — View active variant metrics like acceptance rate and
forecasted revenue. The variant distribution chart shows how traffic has been
allocated across variants over time.
- **Paused variants** — Table of variants Autopilot has retired from active
rotation, with historical acceptance and dates for reference.
## Using an Autopilot offer in a cancellation flow
Before an Autopilot offer can start testing, it must be added to a cancellation
flow via the
[offer rules editor](/cancellation-flows/presenting-offers-during-cancellation#rules).
When the rule containing an Autopilot offer is matched, ProsperStack selects an
active variant (incentive and/or copy combination) for that subscriber according
to Autopilot's ongoing optimization. If you selected a control offer, a portion
of sessions receives the control instead.
---
## Advanced scenarios
The settings below override two common reasons an offer may be excluded after
matching an offer rule. For a complete overview, see
[When offers are not shown](/offers/when-offers-are-not-shown).
## Overriding previously accepted offers
By default, ProsperStack will not present an offer in the cancellation flow if
the canceling subscriber has already accepted an offer in the past. However, you
can override this default with an offer setting.
When creating or updating an offer, toggle the **Override other offers**
checkbox to allow the offer to be presented even if the subscriber has accepted
an offer in the past.
## Replacing existing coupons
As with previously accepted offers, ProsperStack won't show a coupon offer in
the cancellation flow if the canceling subscriber is already receiving a
discount from a coupon. However, if you want your coupon offer to replace
**any** existing coupon, you can enable the **Replace other coupons** setting on
your coupon offer.
When creating or editing a coupon offer, toggle the **Replace other coupons**
checkbox to allow the coupon offer to replace any existing coupons previously
applied to the subscription.
:::info[Note]
The **Override other offers** and **Replace other coupons** options described
above operate independently, so you'll need to enable both options to allow a
new coupon offer to override an existing coupon offer that a subscriber has
accepted via ProsperStack in the past.
:::
## Using segments for escalating offers
By combining the offer override options with segments, some powerful scenarios
can be achieved. For example, we can use
[offer rules](/cancellation-flows/presenting-offers-during-cancellation#rules)
to present an escalating offer to a subscriber who accepted a discount more than
six months ago.
Let's say we've saved a subscriber in the past with a coupon offer named
`25% off` that gave the subscriber a discount of 25% off for three months. Our
subscriber accepted this offer a year ago but is now attempting to cancel their
subscription again. We can create a segment with the following configuration to
target them:
- **Subscriber** — Active offer ID = `25% off`
- **Subscriber** — Days since saved > `180`
We can then create a new offer with a more enticing discount, for example
`50% off for 6 months`, making sure to enable both the **Override other offers**
and **Replace other coupons** options.
Using the created segment in the flow offer rules, we can present the new offer
only for subscribers that have previously accepted our **25% off offer** over
**180 days ago**.
Segments open up a range of powerful targeting possibilities for your
cancellation flows. You can also use segments to
[present flow steps conditionally](/cancellation-flows/displaying-a-step-conditionally)
and for generating segmented reports in the Insights section.
[Learn more about creating segments.](/customer-segmentation/creating-a-segment)
---
## Showing multiple offers
**Required plan:** Prosper or Enterprise.
## Offer groups
Offer groups allow you to present multiple options to a customer so they can
pick which offer suits them best.

Using an offer group, you can present up to three offers simultaneously. Your
subscribers can select any of the available offers presented, giving you more
options to retain a customer who might otherwise cancel.
## Creating an offer group
You need at least two eligible cancellation flow offers before you can create an
offer group. Navigate to **Offers**, select **Offer groups** and click **Create
offer group**.
Select up to three offers to display in your offer group and configure how you'd
like them to appear.
Click **Save** when you finish configuring the group.
### Options
#### Group options
- **Name** — Pick a unique name for your offer group so you can reference it in
cancellation flows and reports
- **Offers** — Select up to three of your existing offers to display
- **Offer images** — You can choose to display or hide any
[offer images](/offers/creating-an-offer#customizing-offer-appearance) you've
configured
#### Modal options
- **Headline** — Customize the headline shown at the top of the offer group
dialog
- **Content** — Add custom text to the body of the offer group dialog
- **Cancel link** — Customize the text shown in the "No thanks, I still want to
cancel" link
### Offer order
Drag offers to reorder. Enable **Randomize offer order** to vary the order when
the group is displayed.
## Using an offer group in a cancellation flow
To use an offer group in a cancellation flow, select the offer group in the
[flow offer rules editor](/cancellation-flows/presenting-offers-during-cancellation#rules).
### Offer-specific conditions
Any
[offer-specific conditions](/offers/when-offers-are-not-shown#offer-specific-conditions)
will apply to the offers you've selected in an offer group. If any of the offers
in your offer group cannot be presented to a canceling subscriber because of one
of these conditions, the offer group will not be displayed.
---
## Offer links
Offer links allow you to present offers to your customers outside of
cancellation flows and conversion campaigns.
Each offer link is a unique URL, specific to a particular subscription and
offer. This enables frictionless offer acceptance without the user having to log
in.
You can share offers links with your customers via email, SMS or any other
channel.
:::info[Note]
Offer links are only available for offers with the "landing page" context.
:::
## Creating an offer link
Offer links can be created in a couple different ways:
- [Via automations](#sharing-offer-links-via-an-automation)
- [Via the API](#creating-an-offer-link-via-the-api)
You can also create offer links in [HubSpot](#using-offer-links-in-hubspot) and
[Klaviyo](#using-offer-links-in-klaviyo) with our integrations.
### Sharing offer links via an automation
ProsperStack [automations](/automations/creating-an-automation) allow you to
trigger communications to subscribers based on conditions you specify.
When you
[include an offer in an automated email](/automations/creating-an-email#linking-to-an-offer),
offer links are automatically created for each recipient.
### Creating an offer link via the API
If you prefer to send offer links outside of ProsperStack, you can create offer
links via the API.
See the
[API reference](https://developers.prosperstack.com/#tag/offer-links/operation/createOfferLink)
for details.
## Copying an existing subscriber offer link
To copy the unique URL for an existing offer link, open the relevant
[subscriber's profile](/subscribers/viewing-subscribers), find the link in the
**Offer links** card and click **Copy link**.
## Using offer links in HubSpot
To use offer links in HubSpot workflows, you'll first need to
[connect your HubSpot account](/integrations/hubspot#connecting-your-hubspot-account)
in ProsperStack.
Once connected, you can use the **Create offer link** workflow action to
automatically create offer links in HubSpot.
### Adding the workflow action
To add the **Create offer link** workflow action, navigate to the HubSpot
workflow you want to use and click the plus icon to add a new step.
This opens the **Choose an action** panel. Find the **Integrated apps** section
at the bottom. Expand the **ProsperStack** group and click **Create ofer link**
to start configuring the action.
The action has two required fields:
- **Offer ID** — The ID of the offer, e.g. `offr_qip1JZy4rp4fJwuXiUGEpTuN`. Find
the offer ID on the offer details page in ProsperStack.
- **Platform Subscription ID** — The subscription ID from your connected
subscription platform, e.g. Stripe, stored in a HubSpot custom property on the
contact or company record.
Click **Save** to save the action.
### Using the generated offer link
Once you've added the workflow action, you can use the returned offer link URL
in subsequent workflow steps. It's available as an action output.
For example, you can reference the offer link in an email as a custom token in
the format `{{ custom.key }}`, e.g. `{{ custom.offerLinkUrl }}`.
Under Communications, choose **Send an email**.
Select the email template you want to use.
In the **Add custom tokens to email** section, click **Add token**. Enter
`offerLinkUrl` as the key and click into the property field.
In the **Choose data variable** panel, select **Action outputs** under **Action
properties** and click **Offer Link URL** within the **Create offer link**
action step.
You can now reference the offer link in the email body using the
`{{ custom.offerLinkUrl }}` token.
### Confirming the offer link was created
Before using the offer link in subsequent workflow actions, it's a good idea to
confirm that the offer link was created successfully.
To do so, you can use a workflow branch. Click the plus icon to add a new step
and choose **Branch**. Choose **One property or action output** and then click
**Select a property**.
In the **Choose data variable** panel, select **Action outputs** under **Action
properties** and click **This action's final success or failure state** within
the **Create offer link** action step. Click **Next**.
In **Branch 1** choose **is equal to** **Succeeded** and click **Save**.
## Using offer links in Klaviyo
To use offer links in Klaviyo flows, you'll first need to
[connect your Klaviyo account](/integrations/klaviyo#connecting-your-klaviyo-account)
in ProsperStack.
Once connected, you can use a **Webhook** action in your Klaviyo flows to
automatically create offer links.
### Adding the webhook action in Klaviyo
To begin, click **Flows** in Klaviyo and navigate to the flow you'd like to use.
Under **Actions** on the left panel, drag the **Webhook** action to the flow.
This opens the **Webhook details** panel.
Enter the following **Destination URL** -
`https://api.prosperstack.com/integrations/klaviyo/offer_links`
Under **Headers**, add an `X-Api-Key` header with your API key as the value. To
find your API key, click the gear icon in the main header of ProsperStack and
click the **API keys** tab.
Under **JSON body**, add the following:
```json
{
"offer_id": "...",
"platform_subscription_id": "{{ person|lookup:'...'|default:'' }}",
"offer_link_property": "..."
}
```
You will need to insert the appropriate values into the JSON body:
- **offer_id** — The ID of the offer, e.g. `offr_qip1JZy4rp4fJwuXiUGEpTuN`. Find
the offer ID on the offer details page in ProsperStack.
- **platform_subscription_id** — The subscription ID from your connected
subscription platform, e.g. Stripe, stored in a Klaviyo custom property.
- **offer_link_property** — The name of the Klaviyo custom property that will
store the generated offer link URL.
Example:
```json
{
"offer_id": "offr_XLqx2w5DigghX3qs1rhxox2a",
"platform_subscription_id": "{{ person|lookup:'Stripe Subscription ID'|default:'' }}",
"offer_link_property": "Offer Link URL"
}
```
Click **Save** to save the action.
### Using the generated offer link
Each time the webhook is called, ProsperStack will generate an offer link URL
and store it in the Klaviyo profile under the custom property you specified in
the `offer_link_property` of the JSON body.
Subsequent flow actions can therefore reference the offer link via that custom
property.
For example, custom properties can be inserted into emails via the
**Personalization** menu. In the email editor, click into a text block, click
the **Personalization** menu in the top right, scroll to the **Custom** section
at the bottom of the menu and select the name of the custom property you
specified.
### Confirming the offer link was created
Before using the offer link in subsequent flow actions, it's a good idea to
confirm that the offer link was created successfully.
To do so, you can use a conditional split. Under **Actions** on the left panel,
drag the **Conditional split** action to the flow. This opens the **Conditional
split details** panel.
Choose **Properties about someone**, select the custom property you specified
and choose **is set**.
Click **Save** to save the conditional split.
---
## When offers are not shown
There are a number of reasons why an offer might not be presented during a
cancellation session. The most common are:
- The customer did not match an
[offer rule](/cancellation-flows/presenting-offers-during-cancellation),
either because the customer isn't in the rule's segment or didn't give a
required answer
- The customer matched a rule with **Present no offer** selected
- The customer had previously accepted an offer in ProsperStack, unless
[Allow override](/offers/creating-an-offer#allow-override) was enabled
- The offer had an unmet [offer-specific condition](#offer-specific-conditions),
as described below
- The offer was included in the flow embed's
[`skipOffers`](/for-developers/embedding-the-flow#options) option
## Troubleshooting
[Session details](/sessions/viewing-sessions#viewing-session-details) can help
diagnose why an offer was not presented.
Click **Sessions** in the left navigation and then click a subscriber's name or
email in the sessions grid to view session details.
The **Offers** field in the **Details** card displays all offers which were
presented during the session.
If "No offers" is shown it indicates that either: no rule matched or the rule
was configured to present no offer. Check the **Properties** card to view
platform and custom properties at the time of the session.
If an offer badge is shown with a strikethrough, that indicates a rule matched
but the specific offer could not be displayed. Hover over the badge to see why
the offer was not presented.
## Offer-specific conditions
Offer-specific conditions are automatic eligibility checks made before
presenting an offer, based on offer type/settings and the current state of the
customer and subscription. For example, a trial extension can only be presented
to a subscription that is on trial (unless the offer is configured to allow
extensions without an active trial).
This is in contrast with offer rules. Rule conditions determine if a customer
matches the rule, while offer-specific conditions determine whether an offer can
actually be shown to that customer.
During rule evaluation, offers that fail these conditions are removed from
consideration. If no offers remain in the matching rule, no offer is presented
and evaluation stops.
In an offer group, if _any_ offer in the group fails its conditions, the whole
group is excluded.
Some checks apply only to particular subscription platforms. Available offer
types also
[vary by platform](/subscription-platforms/connecting-your-subscription-platform#supported-platforms).
### Coupon
A coupon offer is excluded when:
- The subscription is canceled.
- The subscription (or customer, in the case of Stripe) already has an active
coupon and
[Replace coupons](/offers/offer-types#replacing-other-active-coupons) is not
enabled for the offer.
- The selected coupon is no longer valid.
- A coupon limited to specific product groups, products, plans or add-ons does
not apply to the subscription.
- On Chargebee, the subscription is paused.
- On a legacy Sticky.io subscription, the offer uses a fixed amount coupon.
### Change plan
A change plan offer is excluded when:
- The subscription is canceled, contains multiple plans or is already on the
destination plan.
- The offer includes an additional coupon that fails any applicable
[coupon condition](#coupon).
- On Chargebee, the subscription is paused or has not started yet.
- On Paddle, the subscription is on trial, paused or past due.
- On Recurly, the customer has another active subscription on the destination
plan.
- On Sticky.io, one plan uses the legacy plan format and the other uses the
current plan format.
### Modify subscription
Each configured plan and add-on change is evaluated against the current
subscription. The offer is excluded when none of the changes are applicable, or
when the applicable changes would remove every plan without adding another one.
A configured change is not applicable when it would:
- Add a plan/add-on the subscription already has.
- Remove a plan/add-on the subscription does not have.
- On OpenPay, add a plan with a different billing interval or interval count.
- On Recurly, add an add-on that is not compatible with any plan on the
subscription.
The entire offer is also excluded when the subscription is canceled or, on
Chargebee, when it is paused or has not started yet.
### Pause subscription
A pause subscription offer is excluded when:
- The subscription is already paused or is on trial.
- The subscription has not started yet.
- On Naviga, the subscription is not allowed to be paused.
- On Recurly, the subscription is past due, the customer has past due invoices,
or the subscription is set not to renew at the end of the current period.
- On Stripe, the offer resets or extends the billing date using a subscription
schedule, but the subscription already has a schedule.
### Trial extension
By default, a trial extension offer is excluded when the subscription is not on
trial. Enabling **Allow without active trial** removes this condition. On
Stripe, a paused subscription remains ineligible even when that setting is
enabled.
### Product swap
A product swap offer is excluded when the subscription is canceled or contains
multiple plans. On Bold, the current plan must also have swappable products, and
every product in a swap limited to specific products must be allowed for that
plan.
### Change frequency
A change frequency offer is excluded when the subscription is canceled.
### Free/discounted gift
A free/discounted gift offer is excluded when the subscription is canceled.
### Upgrade
An upgrade offer is excluded when:
- The subscription is canceled, contains multiple plans or is already on the
destination plan.
- On Piano, the destination plan is not one of the subscription's eligible
upgrade plans.
### Downgrade
A downgrade offer is excluded when the subscription is canceled, contains
multiple plans or is already on the destination plan.
### Reactivate
A reactivate offer is excluded unless the subscription is canceled. It is also
excluded when the subscription contains multiple plans or, on platforms other
than Braintree, when the customer already has an active subscription on any of
the same plans.
### Payment recovery
A payment recovery offer is excluded when the subscription is canceled or
contains multiple plans.
### Offer types without additional conditions
Custom, Purchase and Reschedule order offers have no conditions specific to
their offer type, but they may still be excluded for one of the other reasons
described above.
### Autopilot offers
For Autopilot offers with the **Forecasted value** discount strategy, the
subscription plan must have a monthly-equivalent billing interval.
---
## Creating a segment
Segments turn subscription, lifecycle, CRM/CDP and application data into
customer contexts you can act on and measure. Use them to target different
flows, questions and interventions, then compare how each group responds.
A segment can include criteria such as MRR, billing interval, subscription
duration, plan, CRM or CDP data and custom properties from your application or
service.
To create a segment, click **Segments** in the left navigation and then the
**Create segment** button. Segments can also be created when adding or editing
[offer rules](/cancellation-flows/presenting-offers-during-cancellation).
## Basic details
Enter a name for your new segment.
### Tags
Use tags to categorize your segments. Find relevant segments faster with the tag
dropdown on the Segments page. To create a new tag, type the name and click **+
Add**.
## Conditions
Segments are made up of conditions that define which customers belong to the
segment. Each condition contains a property, an operator and a value. For
example, `Subscriber – MRR is greater than $100`.
Choose **All** above the conditions to require every top level condition and
condition group to match. Choose **Any** to require at least one to match.
Click **Add condition** to add another condition at the current level. Click
**Add group** to create a condition group, then choose **All** or **Any** inside
that group to control how its conditions are combined. A group can contain
conditions but cannot contain another group.
When the segment is complete, click **Save**.
### Operators and values
The available operators depend on the selected property's type.
| Property type | Available operators | Value |
| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Text | **is equal to**, **is not equal to**, **contains**, **does not contain**, **starts with**, **ends with**, **is set**, **is not set** | Enter text. **is set** and **is not set** do not require a value. |
| Number, currency or percentage | **is equal to**, **is not equal to**, **is greater than**, **is less than**, **is greater than or equal to**, **is less than or equal to** | Enter a number or monetary amount. |
| Date | The numeric comparison operators above, plus **is within the last # days**, **is more than # days ago**, **is within the next # days**, **is more than # days from now**, **is on day of week**, **is not on day of week**, **is set** and **is not set** | Choose a date for a direct comparison, enter a number of days for a relative comparison, or choose Sunday through Saturday for a day-of-week comparison. |
| True or false | **is equal to** | Choose **True** or **False**. |
| Listed choice | **is equal to**, **is not equal to**, **is set**, **is not set** | Choose one of the values supplied by the property. |
| Location | **is equal to**, **is not equal to**, **is one of**, **is not one of** | Choose one country and state for an equality comparison, or multiple locations for **is one of** and **is not one of**. |
| ID | **is equal to**, **is not equal to**, **contains**, **does not contain**, **starts with**, **ends with**, **is one of**, **is not one of** | Enter or select one value for an equality comparison. Select multiple values for **is one of** and **is not one of**. |
For plan, add-on, product, offer, coupon and cancellation reason properties,
ProsperStack provides a searchable selector of eligible records. Equality
operators accept one selection; **is one of** and **is not one of** accept
multiple selections.
### Available properties
These are the default properties available when a subscription platform is
connected. Check out
[custom properties](/customer-segmentation/creating-a-segment#custom-properties)
for more targeting options.
#### Subscriber
- **MRR** — The subscriber's total monthly recurring revenue
- **LTV** — The subscriber's total lifetime value
- **Status** — The subscriber's status (Active, Canceled, Saved or Reactivated)
- **Active offer ID** — The ID of the offer last accepted by the subscriber
- **Active coupon ID** — The subscription platform ID of the coupon applied to
the subscriber
- **Days since saved** — The number of days since the subscriber was saved
- **Last session date** — The date of the subscriber's most recent flow session
that reached a terminal state (canceled, saved, deflected, or incomplete)
- **Last session start date** — The date the subscriber most recently started a
flow session, including sessions they did not complete. This property reflects
in-progress sessions from prior visits, making it useful for suppressing a
step for subscribers who recently entered the flow even if they did not finish
it.
#### Subscription
- **MRR** — The subscription's monthly recurring revenue
- **LTV** — The lifetime value of the subscription
- **Is free trial** — Whether or not the subscription is on a free trial
- **Status** — The subscription's status (Trialing, Active or Canceled)
- **Duration (days)** — The number of days since the subscription was created
- **Will renew** — Whether or not the subscription will automatically renew at
the end of the current billing period
- **Next billing date** — The subscription's next billing date
- **Is past due** — Whether or not the subscription is currently past due
- **Active coupon ID** — The subscription platform ID of the coupon applied to
the subscription
- **Discount percentage** — The discount percentage of the subscription's active
coupon
- **Discount fixed amount** — The fixed monetary discount amount of the
subscription's active coupon
- **Last session date** — The date of the most recent flow session for this
subscription that reached a terminal state (canceled, saved, deflected, or
incomplete)
- **Last session start date** — The date the subscriber most recently started a
flow session for this subscription, including sessions they did not complete.
#### Session
Session properties describe the most recent cancellation session for the
subscription being evaluated.
- **Created date** — The date the session was created
#### Product
- **ID** — The subscription platform product ID
- **Name** — The name of the subscription's product
#### Plan
- **ID** — The subscription platform plan ID
- **Interval** — The billing interval for the plan (Day, Week, Month or Year)
- **Interval count** — The number of units per billing interval, for example "2"
for a plan that bills every two weeks
- **Quantity** — The subscription's plan quantity
- **Name** — The name of the subscription's plan
#### Add-on
- **ID** — The subscription platform add-on ID
- **Name** — The name of the add-on
### Custom properties
Aside from the default available properties, segments can also use any of your
custom properties.
[Learn how to create custom properties in the next section.](/customer-segmentation/custom-properties)
## Editing a segment
To edit a segment, click the pencil icon at the top of the segment page.
Editing a segment's conditions may affect your live cancellation flow, so make
sure to test your changes in [test mode](/for-developers/test-mode) before
updating segments that are part of your flow routing rules, offer rules or step
conditions. ProsperStack will warn you when editing a segment that's currently
in use by a cancellation flow.
---
## Custom properties
**Required plan:** Prosper or Enterprise.
Custom properties can be used to build segments based on additional data stored
on a subscription or subscriber.
To manage your custom properties, click the gear icon in the main navigation and
then click the **Properties** tab.
## Creating a property
From the **Properties** screen, click **Create a property**.
Enter a name and unique identifier for your new property. The unique identifier
is used by [developers](/for-developers/embedding-the-flow#custom-properties)
when integrating the flow and can't be changed after the property is created. A
default value for the unique identifier will be generated for you if you don't
specify one.
Choose to assign your new property to either the **Subscriber** or
**Subscription** object type.
The available data types for custom properties are:
- **Text**
- **Number**
- **True or false** (boolean)
- **Date**
Any data you store in a custom property will be validated based on the chosen
data type. Click **Save** to create the property.
### Number formats
Number properties have an additional option for controlling the formatting when
displaying the property value. Formatting only applies when the property value
is displayed and does not affect how the value is used in segments.
- **Unformatted** — Displayed unformatted, e.g. "10000"
- **Formatted** — Formatted with commas, e.g. "100,000"
- **Currency** — Formatted as a currency value, e.g. "$100,000.00"
### Formatting data for custom properties
Some of the data types for custom properties expect values to be in a certain
format in order to be stored correctly.
- **True or false (boolean)**
When passing boolean values via JavaScript or JSON, use a JavaScript boolean
value (`true` or `false`).
If you're sending data to a custom property from an integration that doesn't
support boolean values (like Stripe metadata), you can use the following text
values:
- **true** — "true", "t" or "1"
- **false** — "false", "f" or "0"
Note that a blank text value will be converted to `false` and any other
non-blank text value will be converted to `true`.
- **Dates**
Date values should be in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format, for example "1983-06-16".
## Changing a property's type
You can change the type of an existing property from its edit panel.
ProsperStack attempts to convert existing values to the new type. Any value that
cannot be converted is permanently deleted, and this cannot be undone.
After selecting the new type and clicking **Save**, enter `CONTINUE` in the
confirmation field and click **Convert property**.
:::warning[Review existing values before converting]
Property type conversion can permanently remove values that are incompatible
with the new type. Export or otherwise preserve any data you may need before
confirming the conversion.
:::
## Archiving or permanently deleting a property
Open a property and click **Delete** to choose how it should be removed:
- **Archive property** makes the property unavailable for future use but keeps
its existing subscriber or subscription values.
- **Permanently delete** removes the property and all of its stored values. This
cannot be undone.
To permanently delete the property, click **Permanently delete**, enter `DELETE`
in the confirmation field and click **Permanently delete** again.
## Populating custom properties from integrations
In addition to setting custom property values directly in the flow, certain
integrations can populate custom properties automatically. When a flow session
starts, ProsperStack looks up the subscriber in the connected service and writes
the mapped values onto the subscriber.
The following integrations support automatic property population:
- **Yotpo** — Maps fields from a customer's Yotpo loyalty record (points
balance, VIP tier, store credit, referral activity and enrollment status) to
custom properties. Configure field mappings from **Settings** →
**Integrations** → **Yotpo**. [Learn more.](/integrations/yotpo)
## Using custom properties
[Learn how to provide custom property values in the cancellation flow.](/for-developers/embedding-the-flow#custom-properties)
---
## Creating a segment group
**Required plan:** Enterprise.
Use segment groups to create complex segmentation rules from the building blocks
of your existing [segments](/customer-segmentation/creating-a-segment).
To create a segment group, click **Segments** in the left navigation. Click
the**Segment groups** tab and then the **Create segment group** button. Segment
groups can also be created when adding or editing
[offer rules](/cancellation-flows/presenting-offers-during-cancellation).
## Basic details
Enter a name for your new segment group.
## Conditions
Segment groups are constructed of three conditions. Select at least two segments
across the conditions before saving. Subscribers will be included in the segment
group if they match _all_ the specified conditions.
The first condition matches subscribers that belong to _any_ of the selected
segments. The second matches subscribers that belong to _all_ of the selected
segments. The third matches subscribers that belong to _none_ of the selected
segments.
## Editing a segment group
To edit a segment group, click the pencil icon at the top of the segment group
details page.
Editing a segment group's conditions may affect your live cancellation flow, so
make sure to test your changes in [test mode](/for-developers/test-mode) before
updating segment groups that are part of your flow routing rules, offer rules or
step conditions.
---
## Viewing subscribers
The subscribers section provides a view into subscriber activity in
ProsperStack, including subscriptions, sessions, retained revenue, offer links
and automation enrollments.
Click **Subscribers** in the left navigation to browse subscribers.
By default, the subscribers view displays a list of all subscribers seen in
ProsperStack.
## Viewing at-risk subscribers
Click **At-risk** to review non-canceled subscribers seen within the last 30
days whose latest retention session was Saved, Deflected or Incomplete. This
view is intended as a focused follow-up list.
## Filtering subscribers
Subscribers can be filtered with the controls at the top of the subscribers
grid.
The following filters can be applied:
- **Status** — Active, Canceled, Deflected, Recovered, Reactivated, Saved,
Converted or Inactive.
- **Latest session status** — Filter subscribers by the outcome of their most
recent retention session: Saved, Deflected, Canceled or Incomplete.
[Learn more about session statuses.](/sessions/viewing-sessions#session-statuses)
- **Seen** / **All** — On platforms that support importing all customers, toggle
between **Seen** (subscribers who have been observed in a ProsperStack
experience) and **All** (all imported customers, including customers who have
not yet been seen by ProsperStack). If the connected platform does not support
importing all customers, only seen subscribers are shown.
## Searching subscribers
Search by subscriber name or email address. When Stripe, Chargebee or Maxio is
connected, you can also search by the corresponding platform customer ID.
## Viewing subscriber details
From the subscribers grid, click a subscriber's name or email to view the
associated profile.
Depending on the subscriber and the features enabled for your account, the
profile may include:
- **Details** — Name, email, active and inactive MRR or ARR, total saved and
recovered revenue, and subscriber properties.
- **Subscriptions** — Subscription records associated with the subscriber.
- **Offer links** — Subscriber- and subscription-specific
[offer links](/offers/offer-links).
- **Sessions** — Retention sessions associated with the subscriber.
- **Retained revenue** — Revenue records attributed to retention outcomes.
- **Enrollments** — Automation [enrollments](/automations/viewing-enrollments)
associated with the subscriber.
### Copy an offer link
In the **Offer links** card, click **Copy link** for the link you want to share.
Each URL is specific to the subscriber's subscription and offer. Only use a link
while its displayed status indicates that it remains available.
For ways to generate offer links through automations, the API, HubSpot, or
Klaviyo, see [Offer links](/offers/offer-links).
### Open session details
Select a result in the **Sessions** card to open that session's detail page.
Session details show the subscriber's path and outcome for that individual
retention session.
### Open enrollment details
When Automations are available, select an enrollment in the **Enrollments** card
to open its detail page.
---
## Viewing sessions
A cancellation session represents the journey a customer took through your
ProsperStack cancellation flow. Each time a cancellation flow is opened by a
customer, a new cancellation session is created.
Click **Sessions** in the left navigation to view all cancellation sessions.
The sessions view displays a list of all cancellation sessions. You can also
[review text feedback](./reviewing-feedback).
## Session statuses
Each row represents an individual cancellation session. The outcome of the
session is represented by the color-coded status box on the left side of the
session row.
Saved (green) — The
customer accepted an offer and their subscription was saved.
Canceled (red) —
The customer canceled their subscription.
Deflected (blue) —
The customer was deflected from canceling their subscription by a{" "}
deflection card or did
not cancel after an incomplete session.
Incomplete (gray){" "}
— The customer did not complete the cancellation session.{" "}
Incomplete sessions automatically become{" "}
Deflected if the customer does not cancel within 24 hours.
Ineligible (gray){" "}
— The customer was prevented from canceling their subscription due to
eligibility rules.
## Filtering sessions
Sessions can be filtered with the dropdowns at the top of the sessions grid.
The following filters can be applied:
- **Flow** — Filter by cancellation flow if
[multiple flows](/cancellation-flows/multiple-flows) are available.
- **Answer** — Filter by an answer to the primary question. This filter is
disabled when **Flow** is set to **All** because answer options may differ.
- **Type** — Filter by paying subscriptions or free trials.
- **Status** — Filter by session status (Saved, Deflected, Canceled, Incomplete
or Ineligible).
Sessions can also be filtered by date using the dropdown at the top right of the
sessions grid. Choose **All time**, **Last 7 days**, **Last 30 days**, **Last 90
days**, **Last 6 months**, **Last 12 months** or **Custom range**. With a custom
range, select a start and end date through today.
## Searching sessions
Search cancellation sessions using the search box at the top of the sessions
grid. Search by customer name, email or by subscription platform ID (if a
[supported subscription platform](/subscription-platforms/connecting-your-subscription-platform)
is connected).
## Exporting sessions
Sessions can be exported to CSV. ProsperStack prepares the file asynchronously
and emails you when it's ready.
First, configure the search, date range and filters for the sessions you want to
export. Then click **Export** at the top of the sessions page.
To access exports, click the gear icon in the main header and then click the
**Exports** tab.
While generating, an export will show as **Preparing**. When its status changes
to **Ready**, click **Download**.
Expired files are not available for download.
## Viewing session details
Click a subscriber's name or email in the sessions grid to view session details.
You can also open a session from the **Sessions** card on a
[subscriber profile](/subscribers/viewing-subscribers#open-session-details).
### Details
The **Details** card summarizes the session, including:
- The session outcome and associated MRR or ARR
- The date and time the session occurred
- The detected device type, when available
- The subscriber and subscription ID
- [Offers shown or withheld](/offers/when-offers-are-not-shown) during the
session
Some subscription platforms provide additional identifying information. For
example, Naviga sessions include an account number.
### Session timeline
The **Session** card displays the subscriber's journey in chronological order.
It shows the session start, each recorded flow step, answers, offers,
deflections and the final outcome.
If the subscriber was rerouted from one flow to another, the timeline shows
activity from both flows.
If eligibility rules prevented the subscriber from entering the flow, this will
also be indicated.
### Properties
The **Properties** card includes platform and custom property values. Choose
**Session** to see the values captured when the session occurred, or **Current**
to see the subscription's latest values.
---
## Starting a session
Typically, cancellation sessions will be launched from your application or
service by [integrating ProsperStack](/for-developers/embedding-the-flow) for a
seamless customer offboarding experience. If you'd like to test a cancellation
flow or begin a cancellation session on behalf of a customer, you can also
launch a cancellation session manually from the ProsperStack dashboard.
To launch a session from the dashboard, navigate to the **Sessions** view and
click the **Start session** button at the top of the screen.
## Using a subscription platform integration
If you're using one of the
[supported subscription platform integrations](/subscription-platforms/connecting-your-subscription-platform),
begin by searching for a customer by name, email address or an ID from your
subscription platform.
Select a customer from the search results and choose the customer's subscription
to begin a cancellation session for.
## Using a custom billing integration
If you're using a
[custom billing integration](/for-developers/custom-subscription-platform),
enter the customer's unique ID, name and email address. You can also specify the
MRR and trial status of the subscription.
## Other options
If you have [multiple flows](/cancellation-flows/multiple-flows), you can select
a specific flow to use for the cancellation session, or use your default flow
routing rules.
You can also enter [custom property](/customer-segmentation/custom-properties)
values to use for the session.
## Starting the session
After you've finalized your customer and subscription details, click **Start
session** at the bottom of the dialog to begin the cancellation session. Note
that this will begin a **real cancellation session** on behalf of your customer.
This can affect your live subscription data, including processing cancellations
or applying offers.
## Creating a shareable link
If you'd rather send a customer a link to complete the cancellation flow
themselves—for example, in an email or support ticket—you can create a shareable
link instead of starting the session directly. After you've finalized the
customer and subscription details, click **Create link** next to **Start
session** at the bottom of the dialog.
You'll be prompted to optionally enter a redirect URL, which the customer will
be sent to after they complete the cancellation flow. You can also choose to
save the redirect URL as the default for future links you create for your
account.
Once created, the link is valid for 7 days. Anyone with the link can open the
cancellation flow for that customer's subscription until it expires, so share it
only with the intended customer.
---
## Reviewing feedback
The feedback section provides a view of all the open-ended text feedback
received from subscribers during cancellation sessions.
To access this view, click **Sessions** in the left navigation and then click
the **Feedback** tab.
The feedback grid includes answers to text questions and **Other, specify**
responses from multiple choice questions.
Each row shows the response, subscriber, session outcome and date. Click the
subscriber's name or email to open the associated session details.
## Filtering feedback
Feedback can be filtered with the dropdowns at the top of the grid:
- **Flow** — Choose the cancellation flow whose feedback you want to review.
This filter appears when multiple flows are available.
- **Question** — Choose an eligible text question or a multiple choice question
that includes **Other, specify**.
## Searching feedback
Search feedback by subscriber name or email. For supported platforms, you can
also search by the platform customer ID.
---
## Reporting overview
Insights reports connect cancellation behavior with intervention outcomes so you
can measure and evaluate retention strategy. Compare trends across retention,
offers, deflections and customer feedback, then narrow the results by flow or
segment to understand where performance differs.
For a high-level account view of retention performance, see the
[retention dashboard](/insights/retention-dashboard).
:::tip Analyze your data with AI
[Connect your preferred AI tool using MCP](/integrations/mcp-server) to explore
retention data, compare performance and uncover trends.
:::
## Reports
- [Session trends](/insights/session-trends)
- [Offer acceptance trends](/insights/offer-acceptance-trends)
- [Sentiment trends](/insights/sentiment-trends)
- [Survey answer trends](/insights/survey-answer-trends)
- [Retention trends](/insights/retention-trends)
- [Deflection trends](/insights/deflection-trends)
- [Feedback analysis](/insights/feedback-analysis)
- [Retained revenue trends](/insights/retained-revenue-trends)
- [Retained revenue details](/insights/retained-revenue-details)
## Filtering
### By date range
All Insights reports can be filtered to data within a specific date range.
Choose **Last 7 days**, **Last 30 days**, **Last 90 days**, **Last 6 months**,
**Last 12 months** or **Custom range**. With a custom range, select a start and
end date through today.
For bar and line charts, you may choose between daily, weekly and monthly
aggregation.
### By flows and segments
Flow and segment filters allow you to filter reports to data related to specific
flows and/or segments.
Note that these filters only appear if you have multiple flows and/or segments.
## Summaries and trends
A summary of report data is provided above trend charts.
Trend indicators show changes in retention performance compared to the previous
period.
## Chart annotations
Whenever
[changes are published](/cancellation-flows/publishing-changes#publishing) to a
flow you can optionally include a note that will appear on reports. This makes
it easier to keep track of changes and compare results before and after.
## Viewing bar or line charts
Toggle between bar and line charts by clicking the icon near the top right
corner of the chart.
## Exporting report data
Trend reports provide an **Export** action above the chart breakdown. After
configuring the date range and filters, click **Export** to download the current
report data as a CSV file.
## Hide data series
Toggle data series visibility by clicking the description in the legend beneath
the chart.
---
## Retention dashboard
The retention dashboard summarizes current and historical cancellation
performance. Use it for a quick account-wide view or go to
[Insights](/insights/reporting-overview) when you need configurable date ranges,
segment filters or downloads.
Click **Dashboard** in the left navigation to open the retention dashboard.
## Filtering by flow
If your account has multiple cancellation flows, use **Flow** above the
dashboard cards to select one. The selected flow applies to **Primary reasons**
and **Offer acceptance**.
Cards marked **All flows** continue to combine results from every flow and do
not change with the selector.
## Dashboard cards
### Recurring revenue
The **Recurring revenue** card shows the recurring revenue that remains active
for saved and deflected subscribers, along with the combined total. Values use
MRR or ARR according to the account's revenue display setting.
Recurring revenue represents the current value of active subscriptions, not
completed payment transactions.
### Retained revenue
The **Retained revenue** card shows completed payments attributed to saved and
deflected subscribers, along with total recovered revenue and a historical
chart.
This card is not shown for custom platform connections.
### Retention
The **Retention** card shows the retention rate, saved sessions, deflected
sessions, canceled sessions and their historical trend. The rate compares saved
and deflected outcomes with all completed saved, deflected and canceled
outcomes.
### Sessions
The **Sessions** card shows saved, deflected, canceled and incomplete session
counts and their historical trend. Open [Sessions](/sessions/viewing-sessions)
to view individual sessions.
### Offer resolution
The **Offer resolution** card counts sessions where an offer was accepted,
declined or not presented.
### Offer acceptance
The **Offer acceptance** card shows:
- **Accept rate** — Accepted offers compared with presented offers.
- **Offered rate** — How often an offer was presented among eligible sessions.
When the account has multiple flows, this card follows the selected **Flow**.
### Primary reasons
The **Primary reasons** card ranks answers to the selected flow's primary
question.
Choose **Sessions** to compare reasons by the number of sessions. Choose **MRR**
or **ARR**, according to the account's revenue display setting, to compare the
recurring revenue associated with each reason.
---
## Session trends
View historical [session](/sessions/viewing-sessions) trends over time.
## Summary items
- **Average save rate** - The percentage of saved sessions during the selected
date range averaged within the selected interval filter (daily, weekly or
monthly).
- **Average deflect rate** - The percentage of deflected sessions during the
selected date range averaged within the selected interval filter (daily,
weekly or monthly).
- **Total sessions** - The total number of sessions occurring within the
selected date range.
- **Saved** - The total number of sessions with a saved status within the
selected date range.
- **Deflected** - The total number of sessions with a deflected status within
the selected date range.
- **Canceled** - The total number of sessions with a canceled status within the
selected date range.
- **Incomplete** - The total number of sessions with an incomplete status within
the selected date range.
---
## Offer acceptance trends
View historical [offer](/offers/creating-an-offer) acceptance trends over time.
## Filtering by offer
Use the **Offer** filter to limit results by a specific offer or offer group.
## Summary items
- **Accept rate** - The number of accepted offers over the number of offers
presented during the selected date range as a percentage.
- **Offer rate** - The percentage of sessions that had at least one offer
presented.
- **Total sessions** - The total number of sessions occurring within the
selected date range.
- **Total offers presented** - The total number of offers presented within the
selected date range.
- **Total offers accepted** - The total number of offers accepted within the
selected date range.
- **Total offers declined** - The total number of offers declined within the
selected date range.
---
## Sentiment trends
View historical trends of sentiment analysis data.
The sentiment of a session is evaluated based on the content of open-ended text
feedback responses and may be one of the following:
- **Positive** - The text expresses an overall positive sentiment.
- **Negative** - The text expresses an overall negative sentiment.
- **Mixed** - The text expresses both positive and negative sentiments.
- **Neutral** - The text does not express either positive or negative
sentiments.
---
## Survey answer trends
View historical cancellation flow survey answer trends over time.
Results are specific to an individual survey question, which can be selected
from the "Question" dropdown.
---
## Retention trends
View historical trends of overall cancellation flow retention rates.
## Summary items
- **Average save rate** - The percentage of saved subscriptions during the
selected date range averaged within the selected interval filter (daily,
weekly or monthly).
- **Average deflect rate** - The percentage of deflected subscriptions averaged
within the selected interval filter (daily, weekly or monthly).
- **Total retention rate** - The percentage of subscriptions retained after a
cancellation flow session.
- **Total subscriptions** - The total number of subscriptions that have gone
through the cancellation flow at least once.
- **Saved** - The total number of subscriptions with a saved status within the
selected date range.
- **Deflected** - The total number of subscriptions with a deflected status
within the selected date range.
- **Canceled** - The total number of subscriptions with a canceled status within
the selected date range.
---
## Deflection trends
View historical trends of overall cancellation flow
[deflection](/cancellation-flows/creating-a-deflection) rates.
## Filtering by deflection
Use the **Deflections** filter to limit the report to one or more deflections.
### Summary items
- **Average deflect rate** - The percentage of deflected sessions averaged
within the selected interval filter (daily, weekly or monthly).
- **Presented** - The total number of presented deflections within the selected
date range.
- **Deflected** - The total number of sessions deflected within the selected
date range.
---
## Feedback analysis
**Required plan:** Prosper or Enterprise.
Feedback analysis turns open-ended cancellation answers into churn intelligence
you can investigate. Review extracted key phrases and sentiment, then examine
their relationship with lost MRR and flow outcomes such as saves, deflections
and cancellations. Use these patterns to form hypotheses for product, pricing,
customer experience and retention experiments.
The sentiment of a phrase is evaluated based on the content of the text and is
evaluated as one of the following:
- **Positive** – The text expresses an overall positive sentiment.
- **Negative** – The text expresses an overall negative sentiment.
- **Mixed** – The text expresses both positive and negative sentiments.
- **Neutral** – The text does not express either positive or negative
sentiments.
## Filtering by question
Use the **Questions** filter to limit the report to one or more eligible
questions. Choices include text questions and multiple choice questions that
collect an **Other, specify** response.
---
## Retained revenue trends
View historical trends of retained revenue from saves and deflections over time.
This report is only available on ProsperStack accounts integrated with a
subscription platform, not a custom integration.
## Summary items
- **Saved** - The total value of recovered revenue from subscriptions with a
saved status occurring during the selected date range.
- **Deflected** - The total value of recovered revenue from subscriptions with a
deflected status occurring during the selected date range.
- **Total recovered** - The total value of revenue recovered by ProsperStack.
---
## Retained revenue details
View individual completed payments from saved or deflected subscribers.
This report is only available on ProsperStack accounts integrated with a
subscription platform, not a custom integration.
## Filtering by type
Use the **Type** filter to choose which retained revenue outcomes to include:
- **All** — Payments attributed to both saved and deflected subscribers
- **Saved** — Payments attributed to subscribers who accepted a retention offer
- **Deflected** — Payments attributed to a deflected session outcome
## Understanding the results
Each row identifies the subscriber, payment amount, saved or deflected type,
invoice number or platform invoice ID when available, and the date the payment
occurred.
The report lists completed payments rather than the MRR or ARR of an active
subscription. For recurring revenue and aggregate dashboard metrics, see the
[retention dashboard](/insights/retention-dashboard).
---
## Introduction(Automations)
# What are automations?
ProsperStack automations extend your retention strategy beyond the cancellation
flow. Use shared subscription, customer and cancellation context to coordinate
winbacks, revenue recovery and other communications around lifecycle events.
## Coordinated lifecycle actions
Automations combine event triggers, customer segments, offers, email and
branching logic. This lets you target follow up actions, personalize
communications and measure outcomes in the same retention system.
## First steps
To get started with automations,
[connect your subscription platform](/subscription-platforms/connecting-your-subscription-platform)
and
[configure your email service provider](/automations/connecting-your-email-service-provider).
After you've completed setup,
[create your first automation](/automations/creating-an-automation).
---
## Connecting your email service provider
In order to send emails from your
[automation](/automations/creating-an-automation), you'll need to connect your
email service provider (ESP). Popular ESPs include SendGrid, Postmark and Amazon
SES.
To configure your ESP in ProsperStack, click the gear icon in the main header to
open **Settings**, then select **Automations**.
Under **Email service provider**, click **Connect a provider.** If a provider is
already connected, click **Configure** to update its settings.
**Server** - An SMTP server, e.g. `smtp.postmarkapp.com`.
**Port** - The server's port. Note that port `25` may be blocked.
**Username** - Username for the mail server.
**Password** - Password for the mail server.
Click **Save** to finish configuring the provider.
## Email defaults
You may also set sender and reply-to defaults for emails in your automations.
Under **Email defaults**, click **Configure** and enter sender name, email and
reply-to. Click **Save**.
---
## Creating an automation
Automations are highly flexible sequences that allow you to trigger automated
communications, targeted and personalized with advanced customer segmentation.
To create an automation, click **Automations** in the left navigation and then
click **Create an automation**.
Give the automation a unique name and click **Create**.
## Trigger
An automation runs when a specified subscription event occurs, called a trigger.
When the trigger event occurs for a particular subscription, the associated
subscriber is [enrolled](/automations/viewing-enrollments) in the automation and
moves through the steps until it reaches the end.
When you create an automation, you are prompted to choose the enrollment event
trigger. You can change it later, but not after the automation has been
[published](#publishing-an-automation).
### Trigger types
Choose from the following enrollment events:
- Cancel session started
- Cancel session ended — canceled
- Cancel session ended — deflected
- Cancel session ended — incomplete
- Cancel session ended — saved
- Subscription created
- Subscription ended
- Subscription plan added
- Subscription plan removed
- Subscription status changed
- Subscription payment failed
- Subscription payment succeeded
A cancellation session represents the journey a customer takes through a
ProsperStack [cancellation flow](/cancellation-flows/customizing-a-flow). Each
session has one of four outcomes: saved, canceled, deflected or incomplete.
Learn more about
[session statuses](/sessions/viewing-sessions#session-statuses).
The **Subscription payment failed** and **Subscription payment succeeded**
events are available only when your connected subscription platform supports
payment triggers.
**Note:** A cancellation session that ends in cancellation can occur
significantly in advance of the related **Subscription ended** event if it was
set to take effect at the end of the billing period.
### Enrollment audience
You can optionally limit enrollment to
[customer segments](/customer-segmentation/creating-a-segment),
[segment groups](/customer-segmentation/creating-a-segment-group) and/or custom
conditions.
When you specify an audience, a subscriber enrolls when the event occurs and any
of the selected segments or conditions matches.
Choose your enrollment event, optionally configure an audience and then click
**Update step**.
### Unenrollment
An unenrollment trigger removes subscribers from an automation when a later
event occurs. To configure unenrollment, click the **Unenrollment** tab in the
trigger step and select an **Unenrollment event**. The same events available for
enrollment are available for unenrollment.
You can optionally define an unenrollment audience. If you do so, a subscriber
is unenrolled when the selected event occurs and any of the selected segments or
conditions matches.
Leave **Unenrollment event** blank if the automation should not use an
unenrollment trigger. Click **Update step** after making changes.
## Automation editor
The automation editor displays the sequence of steps that make up an automation.
**Automation example:**
1. Trigger when a subscription ends.
2. Check whether the subscriber matches **Paid subscribers**. If not, end the
automation. If yes, continue.
3. Wait 10 days.
4. Send **Winback email #1**.
5. Wait another 6 days before continuing the automation ...
From the editor you can add, edit and remove steps.
Click a step to edit its properties. Click the **+** between steps to add a
step.
## Step types
When creating a step, you'll first choose a type. Step types include **Email**,
**Delay** and **Conditional split**.
### Email
The **Email** step type sends automated emails to enrolled subscribers.
**Name** - Identify the email step for internal reference.
**Subject line** - The subject of the email.
**Sender name** - Sender name.
**Sender email** - Sender email address.
**Reply-to email** - Optional reply-to email address.
You can
[set defaults for sender and reply-to settings](/automations/connecting-your-email-service-provider#email-defaults).
#### Email library
The main body of the email is available in the email library. Select an email
from the library or [create a new email](/automations/creating-an-email).
### Conditional split
The **Conditional split** step type routes subscribers to different steps based
on conditions you specify. It can also be used to filter out subscribers.
This step is composed of one or more branches. You can reorder, edit and delete
branches from this screen.
#### Branch evaluation
Branches are evaluated from the top down. When a customer matches a branch,
evaluation stops and no more conditions are evaluated. If the customer doesn't
match a branch, the automation ends.
#### Adding a branch
When you create a new **Conditional split** step, you're taken immediately to
the add branch screen. Additional branches can be added by clicking the **Create
branch** button at the bottom of the step panel.
Give the branch a name and select/add
[customer segments](/customer-segmentation/creating-a-segment),
[segment groups](/customer-segmentation/creating-a-segment-group) and/or custom
conditions.
### Delay
The **Delay** step type defers moving the enrolled customer to the next step for
a specified amount of time.
Enter a number for **Delay length**, then select **hours**, **days** or
**months**. A delay can be no longer than one year.
Click **Add step** when creating the delay or **Update step** when editing it.
## Publishing an automation
When you make changes to your automation, a draft version is created. You can
make as many changes as you need without affecting the live automation.
When you have unpublished changes, you'll see an orange indicator by the
**Publish** button at the top right of the automation editor screen.
Once you're happy with your changes, you can publish the automation. Click the
**Publish** button at the top right of the automation editor screen and then
click **Publish changes** in the menu.
When you publish an automation for the first time, any subscription that
triggers the automation will be enrolled. A subscription can only be enrolled in
an automation once. An enrollment cannot be removed manually after it has
entered the automation.
When updating an existing automation, the changes will additionally apply to
existing enrollees for all pending steps.
### Discarding changes
If you choose not to publish changes, you may discard them. Click the
**Publish** button at the top right of the flow editor screen and then click
**Discard changes** in the menu.
## Enabling and disabling an automation
Published automations can be switched on or off by clicking the toggle to the
left of the Publish button.
When you disable an automation, new enrollments will cease and current
enrollments are aborted.
---
## Creating an email
Automated emails are available for reuse in the email library.
To create a new email,
[add or edit an Email step](/automations/creating-an-automation#email), scroll
down to **Email library** and click **Create email**. Enter a required **Name**
to identify the email in the library, design the email and then click **Save**.
To change an existing reusable email, use the edit action on its card in the
library. Make your changes and click **Save**.
## Email editor
The email editor allows you to design flexible and personalized emails in a
drag-and-drop interface.
On the left is the body of the email. Start by dragging content or blocks onto
the body.
Click the tabs on the right to switch between editor panels:
- **Content** - Drag and drop items from this panel to add headings, body copy,
social links, custom HTML and more.
- **Blocks** - Blocks organize content at a structural level, such as two- and
three-column layouts.
- **Body** - Adjust overall settings including background and link colors,
fonts, etc.
## Merge tags
Merge tags allow you to personalize email content with subscriber, subscription
and session properties.
To insert a tag, focus a text box and move your cursor to the desired position
for the tag. In the toolbar below, click **Merge Tags** and select a tag.
Available merge tags depend on the connected platform, account features and the
offers available to the automation.
| Category | Availability |
| ----------------------------------- | ----------------------------------------------------------------------------------------------- |
| **Subscriber** and **Subscription** | Supported subscriber and subscription fields for the connected platform |
| **Session** | **Created date** of the most recent cancellation session for the enrolled subscription |
| **Properties** | Custom subscriber and subscription properties, when custom properties are enabled and available |
| **Offer URL** | Landing page offers available to the automation |
| **Payment Update URL** | Connected platforms that support collecting updated payment details |
### Linking to an offer
To include a [landing page offer](/offers/creating-an-offer#context) in your
email, use an offer merge tag.
As described above, position your cursor at the desired location in a text box,
click **Merge Tags** in the toolbar below, hover over the **Offer URL** menu and
select an offer.
:::info[Note]
If an
[offer-specific condition](/offers/when-offers-are-not-shown#offer-specific-conditions)
prevents the offer from being presented, no email will be sent and the
enrollment will be aborted.
:::
## Previewing emails
Click the eye icon to preview your email in desktop, tablet, mobile and custom
resolutions.
---
## Viewing enrollments
The enrollments screen provides visibility into what your automations are doing
in the background.
An enrollment record is created whenever a trigger event enrolls a subscriber in
an automation.
Click **Enrollments** in the left navigation to view all automation enrollments.
Each row represents an individual enrollment and displays the subscriber's
current status as the record progresses through the automation's steps.
## Filtering enrollments
Enrollments can be filtered by status (Running, Completed, Aborted or Failed).
## Viewing enrollment details
Click a subscriber's name in the enrollment list to open that enrollment's
detail page. This page shows enrollment status and chronological step history.
You can also open enrollment details from the **Enrollments** card on a
[subscriber profile](/subscribers/viewing-subscribers#open-enrollment-details).
---
## Introduction(Conversion)
# What are conversion incentives?
Conversion incentives bring ProsperStack's customer context and offer controls
to free-to-paid conversion. Use targeted campaigns to encourage eligible trial
and freemium users to move to a paid plan.
## First steps
To get started with conversion, begin by
[connecting your subscription platform](/subscription-platforms/connecting-your-subscription-platform).
After your platform is connected,
[create your first campaign](/conversion/creating-a-campaign).
---
## Creating a conversion campaign
Conversion campaigns control the rules and criteria for displaying offers to
your customers. Use customer segments for precise control of targeting to
optimize conversion rates.
To create a campaign, click **Campaigns** in the left navigation in the
Conversion section and then click **Create campaign**.
To edit an existing campaign, click its name in the campaign list. After
creating or editing a campaign, click **Save** at the top of the panel.
## Basic campaign details
Each campaign needs a unique name. Campaigns can be designated as the default,
meaning a subscriber will fall into that campaign if no other campaign is
specified
[when initializing conversion in your application or website](/conversion/embedding-conversion#specifying-a-campaign).
## Offer rules for a campaign
Campaigns include specific rules that determine which conversion offer is shown
to the user when the campaign is triggered.
[Learn more about offer rules.](/conversion/presenting-offers)
## Other options
### Display options
- **Condition** — The display condition for the campaign:
- **None** — Display offers immediately.
- **When triggered manually** — Display offers only when triggered manually.
Read more about
[triggering manual campaigns](/conversion/embedding-conversion#step-3--triggering-manual-campaigns).
- **Delay** — Choose **Show immediately** or **Delay before showing**. For a
delay, enter a numeric duration and choose **Seconds** or **Minutes**.
### Settings
- **Collect payment details** — If the subscriber has no default payment method,
ProsperStack can collect payment details automatically when an offer is
accepted.
- **Redirect URL** — Optionally route customers to a URL after they accept an
offer.
---
## Presenting offers as part of a campaign
Use [conversion offers](/offers/creating-an-offer#goal) in a campaign to entice
customers to convert or upgrade their subscription.
Offer rules determine which offers are displayed to which customers, and can be
as simple or complex as your needs require.
## Rules
At least one offer rule is required when creating a new campaign, but they can
also be modified after the campaign has been created. Adjust offer rules when
editing a campaign in the **Rules** section.
Click **Add rule** to start a new rule or click into an existing rule to enter
editing mode.
Drag existing rules by their handles to change their order. Rules are evaluated
from top to bottom, so place more specific rules before broader ones.
### Understanding rules
A rule consists of two columns:
- **Condition** — Target
[customer segments](/customer-segmentation/creating-a-segment),
[segment groups](/customer-segmentation/creating-a-segment-group) or inline
conditions.
- **Offer** — Choose which offers to present, if any.
A rule defines which offers to show based on its segments, segment groups and
property conditions. A customer matches when they satisfy any selected segment,
group or condition and will be displayed one of the rule's offers.
**Offer rule example:** Customers in **Premium trials** or **Trial almost over**
are presented the **Extend trial** offer.
In the example above, any customers in the segments "Premium trials" or "Trial
almost over" would match the rule and be presented the "Extend trial" offer.
Rules can have multiple offers. When a rule has multiple offers, one is chosen
randomly to display to the customer.
### Rule evaluation
Rules are evaluated from the top down. When a customer matches a rule, rule
evaluation stops and no more rules are evaluated.
For example, in the example below, if the customer matches the first rule, they
will be presented with the "25% off first month" offer. The remaining rules will
not be considered.
**Rule evaluation example, in top-down order:**
1. Customers in **Premium trials** are presented **25% off first month**.
2. Customers in **Freemium** are presented **50% off Premium**.
3. Customers in **Premium trials** or **Trial almost over** are presented
**Extend trial**.
4. Any customer is presented **20% off first month**.
If a customer matches a rule with no offers, then no offer is presented and rule
evaluation stops.
### When offers are not shown
In some cases offers can't be presented despite matching an offer rule, e.g.
when the customer has previously accepted an offer. See
[When offers are not shown](/offers/when-offers-are-not-shown) for details.
---
## Embedding conversion
## How to integrate conversion campaigns with your application or site
### Step 1 — Embed the snippet
To get started with conversion campaigns you'll need to add the embed snippet to
your application or website.
You can find the embed snippet in the **Campaigns** screen or by clicking the
gear icon in the main header and then **Conversion**.
Copy the snippet and insert it just before the closing `` tag in your
application or website.
### Step 2 — Initialize conversion
When initializing, the script needs to know the ID of the subscription from your
connected
[subscription platform](/subscription-platforms/connecting-your-subscription-platform)
to identify each subscriber as they visit your website or use your application.
Once you've added the embed snippet, call the `ProsperStack.convert.init()`
method with the ID of the subscription from your platform to complete the
initialization.
For example:
```javascript
document.addEventListener("DOMContentLoaded", () => {
window.ProsperStack.convert.init({
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
});
});
```
Once the `init()` method is called, ProsperStack will initialize your conversion
campaigns and begin displaying offers, unless the campaign is configured to
trigger manually. For manually triggered campaigns, see
[Step 3](#step-3--triggering-manual-campaigns).
#### Specifying a campaign
You can specify the conversion campaign to initialize with the `campaignId`
property.
To find the campaign ID:
1. Open **Campaigns** in the Conversion section.
2. Click the campaign name to open its editor.
3. Copy the value shown next to **Campaign ID**.
Use the copied value when initializing Conversion. For example:
```javascript
document.addEventListener("DOMContentLoaded", () => {
window.ProsperStack.convert.init({
campaignId: "cmpn_HsCgNwZxBe3fR9qVXEaCbB7H",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
});
});
```
If no `campaignId` is specified, your default campaign will be used.
#### Sending custom properties
Custom properties allow you to attach custom data to your subscriber and
subscription objects for more powerful targeting and segmentation.
You'll need to create custom properties in ProsperStack before storing values in
them.
[Learn more about managing custom properties.](/customer-segmentation/custom-properties)
Specify custom properties to attach to either a `subscriber` or `subscription`
with the `properties` object. Use an object with the unique identifier of the
property as the key, for example:
```javascript
{
number_of_contacts: 5800,
is_professional: true,
last_contacted: "2021-05-04",
preferred_name: "Johnny"
}
```
Here's an example of initialization with custom properties:
```javascript
window.ProsperStack.convert.init({
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
properties: {
is_professional: true,
num_contacts: 5800,
},
},
subscriber: {
properties: {
preferred_name: "Johnny",
},
},
});
```
[Learn more about formatting values for custom properties.](/customer-segmentation/custom-properties#formatting-data-for-custom-properties)
#### Handling events
The `init()` method provides the following callbacks to monitor offer events:
- `onOfferPresented?: () => void`
Called when an offer is presented.
- `onOfferClosed?: (result: CampaignResult) => void`
Called when an offer is closed. The `result` object contains a `status`
property with one of the following values:
- `accepted` — The subscriber accepted the offer.
- `dismissed` — The subscriber dismissed the offer. The offer can be shown
again after a delay.
- `declined` — The subscriber declined the offer. The offer will not be shown
to the subscriber again.
- `expired` — The offer expired.
Here's an example of handling offer events:
```javascript
document.addEventListener("DOMContentLoaded", () => {
window.ProsperStack.convert.init({
campaignId: "cmpn_HsCgNwZxBe3fR9qVXEaCbB7H",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
onOfferPresented: () => {
console.log("Offer presented");
}
onOfferClosed: (result) => {
console.log("Offer closed with status", result.status);
}
});
});
```
### Step 3 — Triggering manual campaigns
:::info[Note]
This step is only required if the campaign is configured to trigger manually.
:::
If the initialized campaign is configured to trigger manually, you can trigger
the campaign by calling the `ProsperStack.convert.trigger()` method.
---
## Enabling the customer portal
The customer portal allows customers to self-manage their subscription status.
Enable the portal to generate a link you can share with customers or add to your
website to integrate ProsperStack without writing any code.
## How it works
When a customer visits your ProsperStack customer portal, they'll be asked to
enter their email address. ProsperStack will send the customer an email with a
code in order to verify access to the account. Once the customer confirms the
verification code, they can proceed to manage their subscription status.
:::info[Note]
Because the customer portal uses the customer's **email address** to verify
their account, it's required that you're storing accurate email addresses in the
customer records of your
[connected subscription platform](/subscription-platforms/connecting-your-subscription-platform).
:::
## Enable the portal
The customer portal is available only for supported connected subscription
platforms. If you use Chargebee, configure the required publishable key in the
Chargebee integration settings before enabling the portal.
To access customer portal settings, click the gear icon in the main header and
then click the **Customer portal** tab.
Click the toggle switch to enable the customer portal.
Once the portal is enabled, you can copy the portal URL to share with customers
or link from your website.
## Portal settings
- **Logo** — Upload an image to use as the portal logo. If no portal logo is
uploaded, the portal uses the logo from your default
[cancellation flow](/cancellation-flows/customizing-a-flow).
- **Favicon** — Upload an image to use as the portal's favicon.
Drop an image onto either field or click the upload area to select a file. To
replace an existing logo or favicon, drop or select another image in its field.
---
## General settings
Click the gear icon in the main navigation to access settings. Under the
**General** tab you'll find user, account and subscription information. You'll
also see the **Single sign-on** card when [SSO](./sso) is enabled for your
account.
## Users
The **Users** card displays all users with access to the account.
### Inviting a user
To invite a new user, click **Invite user**. Enter the person's email, first
name and last name. Click **Invite**.
The **Invite user** action is unavailable in test mode, when your account
requires single sign-on or when the account has reached its user limit. When
single sign-on is required, access is instead governed by the account's SSO
configuration and allowed domains.
## Account settings
The **Account** card shows:
- **Company name** — The name of your ProsperStack account.
- **Client ID** - Your unique client ID used for integrating ProsperStack.
- **Client secret** - To view, click **Reveal client secret**.
- **Revenue mode** — Display recurring revenue as monthly recurring revenue
(MRR) or annual recurring revenue (ARR).
- **Retained revenue tracking** — Track retained revenue **By subscriber** or
**By subscription**.
The revenue choices affect how revenue is displayed and tracked throughout the
account, including Sessions and Insights.
## Subscription
The **Subscription** card displays your ProsperStack plan, cost, billing
interval and saved payment method.
You can add or update a payment method and also view invoice history.
---
## My profile
Click your name in the main navigation and select **My profile** to view and
edit your personal information, including your first name, last name, email and
time zone.
Your time zone is detected automatically the first time you log in, but you can
change it at any time from the **My profile** page. It's used to localize
reporting in Insights.
---
## Single sign-on
**Required plan:** Enterprise.
Single sign-on (SSO) lets users with approved email domains access your
ProsperStack account through your identity provider. The **Single sign-on** card
appears in the General settings tab when SSO is enabled for your account.
SSO must first be provisioned for the account. If the card says that SSO is not
configured, contact your account representative.
## Configuring SSO access
Click the gear icon in the main header to access settings.
In the **Single sign-on** card (**General** tab), click **Configure**.
Under **Domains**, enter each email domain that should be allowed to log in
through SSO. Add or remove domains as needed.
To prevent account users from using another login method, select **Require users
to log in via SSO**.
Click **Save**.
When SSO is required, direct user invitations are unavailable. Make sure the
appropriate domains are configured before requiring SSO.
## SSO login URL
After SSO is provisioned, the card displays the account's **Log in URL**.
---
## Switching accounts
If you have access to multiple ProsperStack accounts, you can switch between
them from the user menu in the main header.
The current account displays beneath your user name in the upper right corner.
To switch accounts, click the user menu to display all accounts and click the
desired account name.
---
## Command palette
# Using the command palette
The command palette allows you to jump quickly to common actions from anywhere
in ProsperStack.
Press **Command+K** or **Alt+K** to open the command palette.
Enter text in **Search for a command**, then select a matching command.
Available commands include:
- Navigation — go to the dashboard, insights, segments, flows, sessions and more
- Settings — access settings, properties and API keys
- Resources and credentials — copy your Client ID, open this documentation and
the API reference
- Flow actions — start a flow session, edit and preview flows
---
## Connecting your subscription platform
Connect your subscription platform to enable the customer and subscription
context needed to personalize cancellation flows and automations, target
interventions and measure retention outcomes.
## Selecting your platform
On the dashboard, click **Connect a subscription platform** to open the
connection panel. You can also click the gear icon in the main header to open
**Settings**, then click **Connect a platform** in the **Subscription platform**
section.
Click your platform or choose a [custom integration](./custom) to continue.
Refer to your platform page for specific instructions.
## Supported platforms
- [Stripe](./stripe)
- [Chargebee](./chargebee)
- [Recurly](./recurly)
- [Recurly Commerce](./recurly-commerce)
- [Bold](./bold)
- [Braintree](./braintree)
- [Maxio](./maxio)
- [Naviga](./naviga)
- [OpenPay](./openpay)
- [Ordergroove](./ordergroove)
- [Paddle](./paddle)
- [Piano](./piano)
- [Recharge](./recharge)
- [Seal Subscriptions](./seal-subscriptions)
- [Stay AI](./stay-ai)
- [Sticky.io](./sticky-io)
- [Submarine](./submarine)
Don't see your platform? [Get in touch with us](https://prosperstack.com/demo/)
to learn about our integration roadmap or discuss a
[custom integration](./custom).
## After connecting
After you've connected your subscription platform, the import process begins
automatically. This process can take a while, depending on how much data you
have. You don't need to stay logged in to ProsperStack for it to finish —
we'll continue importing your data in the background and send you an email when
it's complete.
## Managing a connected platform
To view and modify platform settings, click the gear icon in the main header to
open **Settings**, then select **Integrations** and click **Configure** for your
connected subscription platform.
Depending on the platform, you can update API keys or tokens, copy an
installation snippet or configure other platform-specific behavior. See your
platform's page for the available settings and exact credential fields.
---
## Stripe
ProsperStack integrates with [Stripe](https://stripe.com/) to import customer
and subscription data, personalize retention experiences and apply supported
subscription changes. This page describes how to connect Stripe, embed you
cancellation flow and optionally sync Stripe metadata. It also provides a
reference of features and properties supported by the platform integration.
## Connecting Stripe
To connect Stripe, you'll need the publishable and secret API keys. You must be
an Administrator of your Stripe account to create a secret key.
Copy the **Publishable key** and **Secret key** from the API keys page in your
Stripe dashboard, enter both values in ProsperStack and click **Connect**. For
more information on Stripe API keys,
[see the Stripe documentation](https://stripe.com/docs/keys).
Once your API key is accepted, you'll be redirected to Stripe to continue the
connection process.
After you authorize access to your Stripe account, you'll be redirected back to
ProsperStack where the import process will begin automatically.
## Integrating Stripe
There are two ways to direct your customers to your ProsperStack cancellation
flow:
- **JavaScript embed** - Embed the ProsperStack cancellation flow in your
application or website for a seamless, in-app experience. This option uses the
[ProsperStack JavaScript library](/for-developers/embedding-the-flow) to start
a flow for the customer's subscription.
- **Customer portal** - Use the hosted
[customer portal](/customer-portal/enabling-the-customer-portal) to integrate
without writing code. Customers follow a link to the portal, verify their
email address and select a subscription to manage.
## Syncing Stripe metadata
**Required plan:** Prosper or Enterprise.
To use customer or subscription data stored in
[Stripe metadata](https://stripe.com/docs/api/metadata) within ProsperStack, you
can link metadata fields to
[custom properties](/customer-segmentation/custom-properties).
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Stripe section.
Configure new metadata mappings in the **Property mappings** section. Choose
from either "Customer" or "Subscription" metadata, enter a Stripe metadata field
property in the text box, and choose a ProsperStack custom property (or create a
new one) to link the metadata field to.
When creating a custom property in ProsperStack, make sure to choose an
appropriate data type (text, number, etc.). Since Stripe metadata values are
always text, ProsperStack will attempt to convert the data to the type of custom
property that the field is mapped to.
When you've configured your property mappings, click **Save changes**.
ProsperStack will begin syncing your Stripe metadata with your subscriber and
subscription custom fields.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Full support
- **Revenue recovery** — Full support
- **Conversion incentives** — Full support
- **Customer portal** — Full support
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Supported
- **Change plan at end of billing period** — Supported
- **Apply coupon with plan change** — Supported
- **Remove add-ons with plan change** — Not supported
- **Reset billing date with plan change** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Supported
- **Modify add-on quantity** — Not supported
- **Modify subscription at end of billing period** — Supported
- **Apply coupon with subscription modification** — Not supported
- **Disable proration on immediate modifications** — Supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Supported
- **Extend subscriptions without an active trial** — Supported
- **Prorate trial extensions** — Supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Supported
- **Reactivation offer** — Supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Supported
- **Update billing information** — Supported
- **Email login** — Supported
- **View invoices** — Supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active coupon ID
- Active offer ID
- Active subscription count
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Past due amount
- Saved date
- Session domain
- Session URL
- Shipping location
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Is free trial
- Is past due
- Last failure reason
- Last payment date
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Next retry date
- Paid invoices
- Past due amount
- Past due date
- Payment failure count
- Payment method type
- Session domain
- Session URL
- Shipping location
- Status
- Trial days
- Trial end date
- Trial start date
- Will renew
**Products**
- Product IDs
- Product names
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Chargebee
ProsperStack integrates with [Chargebee](https://www.chargebee.com/) to import
customer and subscription data, personalize retention experiences and apply
supported subscription changes. This page describes how to connect Chargebee,
embed you cancellation flow and optionally sync Chargebee metadata. It also
provides a reference of features and properties supported by the platform
integration.
## Connecting Chargebee
To connect Chargebee, you'll need your Chargebee site name, API key and
publishable key.
**Site name** — Your Chargebee site name is the first part of the URL in your
Chargebee account. For example, if your site is accessed at
`https://acme.chargebee.com`, your site name is `acme`. If you'd like to connect
your test Chargebee site instead, append `-test` to the site name, for example
`acme-test`.
**API key** — You can create a Chargebee API key by navigating to Settings
→ Configure Chargebee → API keys in your Chargebee account.
**Publishable key** — Create or find a publishable key in Chargebee.
For more information on Chargebee API keys,
[see the Chargebee documentation](https://www.chargebee.com/docs/api_keys.html).
After clicking **Connect**, the import process will begin automatically.
## Integrating Chargebee
There are two ways to direct your customers to your ProsperStack cancellation
flow:
- **JavaScript embed** - Embed the ProsperStack cancellation flow in your
application or website for a seamless, in-app experience. This option uses the
[ProsperStack JavaScript library](/for-developers/embedding-the-flow) to start
a flow for the customer's subscription.
- **Customer portal** - Use the hosted
[customer portal](/customer-portal/enabling-the-customer-portal) to integrate
without writing code. Customers follow a link to the portal, verify their
email address and select a subscription to manage.
## Syncing Chargebee metadata
**Required plan:** Prosper or Enterprise.
To use customer or subscription data stored in
[Chargebee metadata](https://www.chargebee.com/docs/2.0/metadata.html) within
ProsperStack, you can link metadata fields to
[custom properties](/customer-segmentation/custom-properties).
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Chargebee section.
Configure new metadata mappings in the **Property mappings** section. Choose
from either "Customer" or "Subscription" metadata, enter a Chargebee metadata
field property in the text box, and choose a ProsperStack custom property (or
create a new one) to link the metadata field to.
When creating a custom property in ProsperStack, make sure to choose an
appropriate data type (text, number, etc.). Since Chargebee metadata values can
be of any type, ProsperStack will attempt to convert the data to the type of
custom property that the field is mapped to.
When you've configured your property mappings, click **Save changes**.
ProsperStack will begin syncing your Chargebee metadata with your subscriber and
subscription custom fields.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Full support
- **Revenue recovery** — Full support
- **Conversion incentives** — Full support
- **Customer portal** — Full support
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Supported
- **Change plan at end of billing period** — Supported
- **Apply coupon with plan change** — Supported
- **Remove add-ons with plan change** — Supported
- **Reset billing date with plan change** — Supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Supported
- **Modify add-on quantity** — Supported
- **Modify subscription at end of billing period** — Supported
- **Apply coupon with subscription modification** — Supported
- **Disable proration on immediate modifications** — Supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Supported
- **Pause at end of billing period** — Supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Supported
- **Extend subscriptions without an active trial** — Not supported
- **Prorate trial extensions** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Supported
- **Update billing information** — Supported
- **Email login** — Supported
- **View invoices** — Supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- Active subscription count
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Past due amount
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Is free trial
- Is past due
- Last failure reason
- Last payment date
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Past due amount
- Past due date
- Payment failure count
- Session domain
- Session URL
- Status
- Trial days
- Trial end date
- Trial start date
- Will renew
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
**Add-ons**
- Add-on IDs
- Add-on names
---
## Recurly
ProsperStack integrates with [Recurly](https://recurly.com/) to import account
and subscription data, personalize retention experiences and apply supported
subscription changes. This page describes how to connect Recurly, embed you
cancellation flow and optionally sync Recurly custom fields. It also provides a
reference of features and properties supported by the platform integration.
## Connecting Recurly
To connect Recurly, you'll need your Recurly private API key.
**Region** - Choose your region, US or EU.
**Private API key** — You can find your Recurly private API key by navigating to
Integrations → API Credentials in your Recurly account.
For more information on Recurly private API keys,
[see the Recurly documentation](https://docs.recurly.com/docs/api-keys).
After clicking **Connect**, the import process will begin automatically.
## Integrating Recurly
There are two ways to direct your customers to your ProsperStack cancellation
flow:
- **JavaScript embed** - Embed the ProsperStack cancellation flow in your
application or website for a seamless, in-app experience. This option uses the
[ProsperStack JavaScript library](/for-developers/embedding-the-flow) to start
a flow for the customer's subscription.
- **Customer portal** - Use the hosted
[customer portal](/customer-portal/enabling-the-customer-portal) to integrate
without writing code. Customers follow a link to the portal, verify their
email address and select a subscription to manage.
## Syncing Recurly custom fields
**Required plan:** Prosper or Enterprise.
To use customer or subscription data stored in
[Recurly custom fields](https://docs.recurly.com/docs/custom-fields) within
ProsperStack, you can link metadata fields to
[custom properties](/customer-segmentation/custom-properties).
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Recurly section.
Configure new custom field mappings in the **Property mappings** section. Select
a custom field from your Recurly account from the dropdown on the left, then
choose a corresponding custom property in ProsperStack (or create a new one) to
store the data.
ProsperStack supports mapping custom fields from your Recurly account for the
[account](https://docs.recurly.com/docs/accounts) and
[subscription](https://docs.recurly.com/docs/subscriptions) data types.
When creating a custom property in ProsperStack, make sure to choose an
appropriate data type (text, number, etc.). Since Recurly custom field values
can be of any type, ProsperStack will attempt to convert the data to the type of
custom property that the field is mapped to.
When you've configured your property mappings, click **Save changes**.
ProsperStack will begin syncing your Recurly custom fields with your subscriber
and subscription custom properties.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Full support
- **Revenue recovery** — Full support
- **Conversion incentives** — Full support
- **Customer portal** — Full support
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Not supported
- **Change plan at end of billing period** — Supported
- **Apply coupon with plan change** — Supported
- **Remove add-ons with plan change** — Not supported
- **Reset billing date with plan change** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Supported
- **Modify add-on quantity** — Not supported
- **Modify subscription at end of billing period** — Supported
- **Apply coupon with subscription modification** — Not supported
- **Disable proration on immediate modifications** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Not supported
- **Pause for a number of billing cycles** — Supported
- **Pause indefinitely** — Supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Supported
- **Extend subscriptions without an active trial** — Not supported
- **Prorate trial extensions** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Supported
- **Update billing information** — Supported
- **Email login** — Supported
- **View invoices** — Supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- Active subscription count
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- Location
- LTV
- MRR
- Paid invoices
- Past due amount
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Is free trial
- Is past due
- Last failure reason
- Last payment date
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Next retry date
- Paid invoices
- Past due amount
- Past due date
- Payment failure count
- Session domain
- Session URL
- Status
- Trial days
- Trial end date
- Trial start date
- Will renew
**Plans**
- Plan code
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
**Add-ons**
- Add-on IDs
- Add-on names
---
## Braintree
ProsperStack integrates with [Braintree](https://www.braintreepayments.com/) to
apply supported subscription changes. This page explains how to connect and
integrate Braintree and summarizes the features and properties supported by the
platform integration.
## Connecting Braintree
To connect Braintree, you'll need your Braintree merchant ID, public key and
private key.
**Merchant ID** — Your merchant ID uniquely identifies your Braintree account.
**Public key** — Your user-specific Braintree public identifier.
**Private key** — Your user-specific Braintree private identifier.
For more information on retrieving your Braintree credentials,
[see the Braintree documentation](https://developer.paypal.com/braintree/articles/control-panel/important-gateway-credentials).
After clicking **Connect**, the import process will begin automatically.
## Integrating Braintree
There are two ways to direct your customers to your ProsperStack cancellation
flow:
- **JavaScript embed** - Embed the ProsperStack cancellation flow in your
application or website for a seamless, in-app experience. This option uses the
[ProsperStack JavaScript library](/for-developers/embedding-the-flow) to start
a flow for the customer's subscription.
- **Customer portal** - Use the hosted
[customer portal](/customer-portal/enabling-the-customer-portal) to integrate
without writing code. Customers follow a link to the portal, verify their
email address and select a subscription to manage.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Full support
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Full support
- **Autopilot offers** — Partial support: No incentive variants because new coupons can't be created.
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Not supported
- **Percentage-based coupon** — Not supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Not supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Supported
- **Change plan at end of billing period** — Not supported
- **Apply coupon with plan change** — Not supported
- **Remove add-ons with plan change** — Not supported
- **Reset billing date with plan change** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Supported
- **Update billing information** — Not supported
- **Email login** — Supported
- **View invoices** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Duration (days)
- Is free trial
- Is past due
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Status
- Will renew
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Maxio
ProsperStack integrates with [Maxio](https://www.maxio.com/) to import customer
and subscription data, personalize retention experiences and apply supported
subscription changes. This page explains how to connect and integrate Maxio and
summarizes the features and properties supported by the platform integration.
## Connecting Maxio
To connect Maxio, you'll need your Maxio subdomain and API key.
**Subdomain** — Your Maxio subdomain is the first part of the URL in your Maxio
site. For example, if your site is accessed at `https://acme.maxio.com`, your
subdomain is `acme`.
**API Key** — You can create a Maxio API key by navigating to Config →
Integrations → API Keys in your Maxio site.
After clicking **Connect**, the import process will begin automatically.
## Integrating Maxio
There are two ways to direct your customers to your ProsperStack cancellation
flow:
- **JavaScript embed** - Embed the ProsperStack cancellation flow in your
application or website for a seamless, in-app experience. This option uses the
[ProsperStack JavaScript library](/for-developers/embedding-the-flow) to start
a flow for the customer's subscription.
- **Customer portal** - Use the hosted
[customer portal](/customer-portal/enabling-the-customer-portal) to integrate
without writing code. Customers follow a link to the portal, verify their
email address and select a subscription to manage.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Full support
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Supported
- **Change plan at end of billing period** — Supported
- **Apply coupon with plan change** — Supported
- **Remove add-ons with plan change** — Not supported
- **Reset billing date with plan change** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Supported
- **Modify add-on quantity** — Not supported
- **Modify subscription at end of billing period** — Supported
- **Apply coupon with subscription modification** — Not supported
- **Disable proration on immediate modifications** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Supported
- **Extend subscriptions without an active trial** — Not supported
- **Prorate trial extensions** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Supported
- **Update billing information** — Not supported
- **Email login** — Supported
- **View invoices** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- Active subscription count
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Shipping location
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Is free trial
- Is past due
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Shipping location
- Status
- Trial days
- Trial end date
- Trial start date
- Will renew
**Products**
- Product IDs
- Product names
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
**Add-ons**
- Component IDs
- Component names
---
## Paddle
ProsperStack integrates with [Paddle](https://www.paddle.com/) to import
customer and subscription data, personalize retention experiences and apply
supported subscription changes. This page explains how to connect and integrate
Paddle and summarizes the features and properties supported by the platform
integration.
## Connecting Paddle
To connect Paddle, you'll need your Paddle vendor ID and auth code.
**Vendor ID** — Your vendor ID uniquely identifies your Paddle account. Find
your vendor ID by navigating to Developer Tools → Authentication in your
Paddle account.
**Auth code** — You can create a Paddle auth code by navigating to Developer
Tools → Authentication in your Paddle account.
After clicking **Connect**, the import process will begin automatically.
## Integrating Paddle
There are two ways to direct your customers to your ProsperStack cancellation
flow:
- **JavaScript embed** - Embed the ProsperStack cancellation flow in your
application or website for a seamless, in-app experience. This option uses the
[ProsperStack JavaScript library](/for-developers/embedding-the-flow) to start
a flow for the customer's subscription.
- **Customer portal** - Use the hosted
[customer portal](/customer-portal/enabling-the-customer-portal) to integrate
without writing code. Customers follow a link to the portal, verify their
email address and select a subscription to manage.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Full support
- **Autopilot offers** — Partial support: No incentive variants because percentage-based coupons aren't supported.
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Not supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Not supported
- **Use existing coupon** — Not supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Not supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Supported
- **Change plan at end of billing period** — Not supported
- **Apply coupon with plan change** — Supported
- **Remove add-ons with plan change** — Not supported
- **Reset billing date with plan change** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Not supported
- **Pause for a period of time** — Not supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Supported
- **Update billing information** — Not supported
- **Email login** — Not supported
- **View invoices** — Supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Duration (days)
- Is free trial
- Is past due
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Status
- Will renew
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Recharge
ProsperStack integrates with [Recharge](https://rechargepayments.com/) and
Shopify to import customer and subscription data, personalize retention
experiences and apply supported subscription changes. This page explains how to
connect and integrate Recharge and summarizes the features and properties
supported by the platform integration.
## Connecting Recharge
To connect Recharge, you'll need to create a Recharge API token.
**API token** — You can create a Recharge API token by navigating to Apps →
API Tokens in your Recharge account.
## Required permissions
The permissions required for the ProsperStack integration to work properly are:
- **Orders** — Read and Write access
- **Discounts** — Read and Write access
- **Subscriptions** — Read and Write access
- **Customers** — Read and Write access
- **Products** — Read access
- **Store Information** — Read access
For more information on creating Recharge API tokens,
[see the Recharge documentation](https://support.rechargepayments.com/hc/en-us/articles/360008829993-Recharge-API-).
After entering your API token and clicking **Connect**, you'll be prompted to
begin the next step by connecting your Shopify account.
## Connecting Shopify
After clicking **Continue**, you'll be redirected to your Shopify account to
approve access. Once that's done, the import process will begin automatically.
## Integrating Recharge
To activate the ProsperStack cancellation flow in your Recharge customer portal,
you'll need to install the ProsperStack snippet in Recharge.
### Getting your snippet
To find your snippet, click the gear icon in the main header of ProsperStack and
then the **Integrations** tab. Click **Configure** in the Recharge section.
You'll find your snippet in the **Customer portal snippet** section.
Click the copy button in the top right of the text area to copy the snippet to
your clipboard.
### Installing your snippet
To begin, navigate to the **Themes** page in your Shopify store dashboard. Find
the dropdown button next to your active theme and click **Edit code** in the
menu.
Next, select the `theme.liquid` file in the navigation on the left side of your
screen.
In the code editor, locate the closing `` tag and paste your snippet just
before this closing tag.
Click the **Save** button to save your changes and activate the ProsperStack
cancellation flow.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Not supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Supported
- **Apply coupon with product swap** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
- Subscription plan IDs
- Tags
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Bold
ProsperStack integrates with [Bold](https://boldcommerce.com/) and Shopify to
apply supported subscription changes. This page explains how to connect and
integrate Bold and summarizes the features and properties supported by the
platform integration.
## Connecting Bold
To connect Bold, click **Continue** to be redirected to your Bold account to
approve access.
Once access is approved, you'll be prompted to begin the next step by connecting
your Shopify account.
## Connecting Shopify
After clicking **Connect**, you'll be redirected to your Shopify account to
approve access. Once that's done, the import process will begin automatically.
## Integrating Bold
To activate the ProsperStack cancellation flow in your Bold customer portal,
you'll need to install the ProsperStack snippet in your Shopify store theme.
### Getting your snippet
To find your snippet, click the gear icon in the main header to open
**Settings**, then select **Integrations**. Click **Configure** in the Bold
section. You'll find your snippet in the **Customer portal snippet** section.
Click the copy button in the top right of the text area to copy the snippet to
your clipboard.
### Installing your snippet
To begin, navigate to the **Themes** page in your Shopify store dashboard. Find
the dropdown button next to your active theme and click **Edit code** in the
menu.
Next, select the `theme.liquid` file in the navigation on the left side of your
screen.
In the code editor, locate the closing `` tag and paste your snippet just
before this closing tag.
Click the **Save** button to save your changes and activate the ProsperStack
cancellation flow.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Not supported
- **Pause for a period of time** — Not supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Supported
- **Apply coupon with product swap** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- Location
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- SKU count
- SKUs
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Ordergroove
ProsperStack integrates with [Ordergroove](https://www.ordergroove.com/) and
Shopify to import customer and subscription data, personalize retention
experiences and apply supported subscription changes. This page explains how to
connect Ordergroove, add ProsperStack to its customer portal and review the
features and properties supported by the platform integration.
## Connecting Ordergroove
To connect Ordergroove, you'll need an API key.
**API key** — To locate your Ordergroove API key,
[see the Ordergroove documentation](https://developer.ordergroove.com/reference/authentication).
After clicking **Connect**, the import process will begin automatically.
## Integrating Ordergroove
To activate the ProsperStack cancellation flow in your Ordergroove customer
portal, you'll need to install the ProsperStack snippet in your Shopify store
theme.
### Getting your snippet
To find your snippet, click the gear icon in the main header to open
**Settings**, then select **Integrations**. Click **Configure** in the
Ordergroove section. You'll find your snippet in the **Shopify snippet**
section.
Click the copy button in the top right of the text area to copy the snippet to
your clipboard.
### Installing your snippet
To begin, navigate to the **Themes** page in your Shopify store dashboard. Find
the dropdown button next to your active theme and click **Edit code** in the
menu.
Next, select the `theme.liquid` file in the navigation on the left side of your
screen.
In the code editor, locate the closing `` tag and paste your snippet just
before this closing tag.
Click the **Save** button to save your changes and activate the ProsperStack
cancellation flow.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Partial support: One-time coupons only.
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Not supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Not supported
- **Use existing coupon** — Not supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Supported
- **Replace existing coupon** — Not supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Supported
- **Apply coupon with product swap** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- Active subscription count
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- Location
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Naviga
ProsperStack integrates with [Naviga](https://www.navigaglobal.com/) to import
subscriber and subscription data, personalize retention experiences and apply
supported subscription changes. This page explains how to connect and integrate
Naviga and summarizes the features and properties supported by the platform
integration.
## Connecting Naviga
Naviga Subscribe is self-hosted or deployed as a single-tenant cloud instance.
Because Naviga configures each instance for the publisher, setup varies between
implementations and requires coordination with Naviga. ProsperStack will work
with you and Naviga throughout the process.
To connect Naviga, you'll need your Naviga endpoint, media group code, token and
NCS Circ billing endpoint. Ask Naviga for the connection details for both your
production and deploy environments. Use the deploy environment details in
ProsperStack test mode.
After clicking **Connect**, the import process will begin automatically.
## Enabling offer groups for external platforms
Before you can use Naviga offer groups in ProsperStack, you'll need to make them
available to external platforms.
In SolCon, open **Offer Groups** and select an offer group you want to use for a
downgrade. Under **Additional options**, enable **ExternalSalesPlatforms**.
Repeat this for each offer group you want to make available in ProsperStack.
Offer groups without this setting won't be visible in ProsperStack.
## Integrating Naviga
When you're ready to launch, ask Naviga to add ProsperStack to your My Account
pages. Customers won't enter the cancellation flow until this integration is in
place.
### Enable each publication's domain
Enable the domain in ProsperStack for each publication you're launching. If
you're launching multiple publications, you can enable their domains in stages.
### Additional steps
Because every Naviga deployment is configured differently, setup may uncover
environment-specific requirements beyond the steps above. These commonly
include:
- Web application firewall (WAF) rules and IP allowlisting
- Sync timing between your backend circulation system and Naviga Subscribe
- Business rules that determine when the cancellation option appears
- Differences between Naviga releases
ProsperStack will work with you and Naviga to identify and resolve these
requirements as they arise.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Partial support: No incentive variants because coupon offers aren't supported.
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Supported
- **Upgrade at end of billing period** — Supported
**Downgrade**
- **Downgrade offer** — Supported
- **Downgrade at end of billing period** — Supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Not supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
- WRR
**Subscription**
- Active coupon ID
- App store
- ARR
- Auto renew interval
- Auto renew interval count
- Billing location
- Billing ZIP
- Cancel reason
- Cancel reason code
- Code
- Current balance
- Delivery route
- Delivery ZIP
- Digital distribution day
- Duration (days)
- Is auto renew
- Is digital
- Is EZPay
- Is free trial
- Is past due
- Is print
- Last payment amount
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Paper code
- Paper name
- Plan prices
- Print distribution day
- Rate code
- Service type
- Session domain
- Session URL
- Start source
- Status
- Stop date
- Will renew
- WRR
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## OpenPay
ProsperStack integrates with [OpenPay](https://www.getopenpay.com/) to import
customer and subscription data, personalize retention experiences and apply
supported subscription changes. This page explains how to connect and integrate
OpenPay and summarizes the features and properties supported by the platform
integration.
## Connecting OpenPay
To connect OpenPay, you'll need to know your endpoint and API key.
**Endpoint** - Your OpenPay API endpoint. In most cases you won't need to change
this.
**API token** — To create an OpenPay API token,
[see the OpenPay documentation](https://docs.getopenpay.com/docs/getting-started).
After clicking **Connect**, the import process will begin automatically.
## Integrating OpenPay
To embed the ProsperStack cancellation flow in your application or website, use
the [ProsperStack JavaScript library](/for-developers/embedding-the-flow).
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Supported
- **Change plan at end of billing period** — Supported
- **Apply coupon with plan change** — Supported
- **Remove add-ons with plan change** — Not supported
- **Reset billing date with plan change** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Supported
- **Modify add-on quantity** — Not supported
- **Modify subscription at end of billing period** — Supported
- **Apply coupon with subscription modification** — Not supported
- **Disable proration on immediate modifications** — Supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Not supported
- **Pause for a number of billing cycles** — Supported
- **Pause indefinitely** — Not supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Supported
- **Extend subscriptions without an active trial** — Not supported
- **Prorate trial extensions** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Supported
- **Cancel unpaid invoices** — Supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active coupon ID
- Active offer ID
- Active subscription count
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- Location
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Is free trial
- Is past due
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Next invoice amount due
- Next invoice subtotal
- Paid invoices
- Session domain
- Session URL
- Shipping location
- Status
- Trial days
- Trial end date
- Trial start date
- Will renew
**Products**
- Product IDs
- Product names
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Submarine
ProsperStack integrates with [Submarine](https://www.getsubmarine.com/) and
Shopify to import customer and subscription data, personalize retention
experiences and apply supported subscription changes. This page explains how to
connect and integrate Submarine and summarizes the features and properties
supported by the platform integration.
## Connecting Submarine
To connect Submarine, you'll need to know your API key.
**API key** — To find your Submarine API key,
[see the Submarine documentation](https://docs.getsubmarine.com/submarine-graphql-api#7f5b28903fde4353ab177f616bb57ba8).
Click **Connect** to begin the next step: connecting your Shopify account.
## Connecting Shopify
After clicking **Continue**, you'll be redirected to your Shopify account to
approve access. Once that's done, the import process will begin automatically.
## Integrating Submarine
To activate the ProsperStack cancellation flow in your Submarine customer
portal, you'll need to install the ProsperStack snippet in your Shopify store
theme.
### Getting your snippet
To find your snippet, click the gear icon in the main header to open
**Settings**, then select **Integrations**. Click **Configure** in the Submarine
section. You'll find your snippet in the **Customer portal snippet** section.
Click the copy button in the top right of the text area to copy the snippet to
your clipboard.
### Installing your snippet
To begin, navigate to the **Themes** page in your Shopify store dashboard. Find
the dropdown button next to your active theme and click **Edit code** in the
menu.
Next, select the `theme.liquid` file in the navigation on the left side of your
screen.
In the code editor, locate the closing `` tag and paste your snippet just
before this closing tag.
Click the **Save** button to save your changes and activate the ProsperStack
cancellation flow.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Not supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Supported
- **Apply coupon with product swap** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- SKU count
- SKUs
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Duration (days)
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Next delivery date
- Paid invoices
- Session domain
- Session URL
- SKU count
- SKUs
- Status
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Stay AI
ProsperStack integrates with [Stay AI](https://stay.ai/) and Shopify to import
customer and subscription data, personalize retention experiences and apply
supported subscription changes. This page explains how to connect and integrate
Stay AI and summarizes the features and properties supported by the platform
integration.
## Connecting Stay AI
To connect Stay AI, you'll need to know your API key.
**API key** — To find your Stay AI API key,
[see the Stay AI documentation](https://docs.stay.ai/reference/authentication).
Click **Connect** to begin the next step: connecting your Shopify account.
## Connecting Shopify
After clicking **Continue**, you'll be redirected to your Shopify account to
approve access. Once that's done, the import process will begin automatically.
## Integrating Stay AI
To activate the ProsperStack cancellation flow in your Stay AI customer portal,
you'll need to install the ProsperStack snippet in your Shopify store theme.
### Getting your snippet
To find your snippet, click the gear icon in the main header to open
**Settings**, then select **Integrations**. Click **Configure** in the Stay AI
section. You'll find your snippet in the **Shopify snippet** section.
Click the copy button in the top right of the text area to copy the snippet to
your clipboard.
### Installing your snippet
To begin, navigate to the **Themes** page in your Shopify store dashboard. Find
the dropdown button next to your active theme and click **Edit code** in the
menu.
Next, select the `theme.liquid` file in the navigation on the left side of your
screen.
In the code editor, locate the closing `` tag and paste your snippet just
before this closing tag.
Click the **Save** button to save your changes and activate the ProsperStack
cancellation flow.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Not supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Supported
- **Apply coupon with product swap** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Churn risk
- Churn risk status
- Code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
- Subscription plan IDs
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Sticky.io
ProsperStack integrates with [Sticky.io](https://sticky.io/) to import customer
and subscription data, personalize retention experiences and apply supported
subscription changes. This page explains how to connect and integrate Sticky.io
and summarizes the features and properties supported by the platform
integration.
## Connecting Sticky.io
To connect Sticky.io, you'll need to create an API user and enter subdomain,
username and password.
For help with Sticky.io API credentials,
[see the Sticky.io documentation](https://support.sticky.io/en/articles/3773907-api-accounts).
After clicking **Connect**, the import process will begin automatically.
## Integrating Sticky.io
To embed the ProsperStack cancellation flow in your application or website, use
the [ProsperStack JavaScript library](/for-developers/embedding-the-flow).
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Partial support: One-time coupons only.
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Not supported
- **Custom duration coupon** — Not supported
- **Use existing coupon** — Not supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Not supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Supported
- **Change billing frequency** — Not supported
- **Disable proration on immediate changes** — Not supported
- **Change plan at end of billing period** — Not supported
- **Apply coupon with plan change** — Supported
- **Remove add-ons with plan change** — Not supported
- **Reset billing date with plan change** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- Location
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Shipping location
- Status
- Will renew
**Products**
- Product IDs
- Product names
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Piano
ProsperStack integrates with [Piano](https://piano.io/) to import subscriber and
subscription data, personalize retention experiences and apply supported
subscription changes. This page explains how to connect and integrate Piano and
summarizes the features and properties supported by the platform integration.
## Connecting Piano
To connect Piano, select your region and enter your App ID and API token. The
API token must have permission to read subscriptions and terms and perform term
changes.
For help with Piano API credentials,
[see the Piano documentation](https://docs.piano.io/api-access-restrictions/).
After clicking **Connect**, the import process will begin automatically.
## Mapping subscription properties
Piano's term structure determines how subscription data is represented in
ProsperStack. Before building your cancellation flow, review the
[properties available for segmentation](#feature-support-reference), confirm how
your Piano terms correspond to the plans your customers recognize and identify
the properties you want to use for segmentation.
Use term properties instead of individual term IDs for segmentation whenever
possible. Publishers often have many legacy terms, and rules based on individual
IDs won't continue to match after a subscription changes terms.
## Integrating Piano
To embed the ProsperStack cancellation flow in your Piano account management
area, use the
[ProsperStack JavaScript library](/for-developers/embedding-the-flow).
When opening a session, pass the Piano subscription ID. After a session
completes, reload the account management page so the customer sees their updated
subscription state.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Not supported
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Partial support: No incentive variants because coupon offers aren't supported.
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Supported
- **Upgrade at end of billing period** — Supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Not supported
**Subscription cancellation**
- **Subscription cancellation** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- App store
- ARR
- Cancel reason
- Cancel reason code
- Deferred cancelable
- Discount fixed amount
- Duration (days)
- Is auto renew
- Is free trial
- Is past due
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Paper code
- Plan phase
- Plan prices
- Service type
- Session domain
- Session URL
- Status
- Subscription plan IDs
- Will renew
**Products**
- Product IDs
- Product names
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Recurly Commerce
ProsperStack integrates with [Recurly Commerce](https://recurly.com/commerce)
and Shopify to import customer and subscription data, personalize retention
experiences and apply supported subscription changes. This page explains how to
connect and integrate Recurly Commerce and summarizes the features and
properties supported by the platform integration.
## Connecting Recurly Commerce
To connect Recurly Commerce (formerly Prive), you'll need your API key and
Shopify store URL.
For help with Recurly Commerce API credentials,
[see the Recurly Commerce documentation](https://developers.tryprive.com/reference/getting-started-with-prive-api).
Click **Connect** to begin the next step: connecting your Shopify account.
## Connecting Shopify
After clicking **Continue**, you'll be redirected to your Shopify account to
approve access. Once that's done, the import process will begin automatically.
## Integrating Recurly Commerce
To activate the ProsperStack cancellation flow in your Recurly Commerce customer
portal, you'll need to install the ProsperStack snippet in your Shopify store
theme.
### Getting your snippet
To find your snippet, click the gear icon in the main header to open
**Settings**, then select **Integrations**. Click **Configure** in the Recurly
Commerce section. You'll find your snippet in the **Shopify snippet** section.
Click the copy button in the top right of the text area to copy the snippet to
your clipboard.
### Installing your snippet
To begin, navigate to the **Themes** page in your Shopify store dashboard. Find
the dropdown button next to your active theme and click **Edit code** in the
menu.
Next, select the `theme.liquid` file in the navigation on the left side of your
screen.
In the code editor, locate the closing `` tag and paste your snippet just
before this closing tag.
Click the **Save** button to save your changes and activate the ProsperStack
cancellation flow.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Partial support: Missing payment recovery offer, payment capture.
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Supported
- **Pause for a period of time** — Not supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Not supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Supported
- **Apply coupon with product swap** — Supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- SKU count
- SKUs
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Is past due
- Last failure reason
- Last payment date
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Next delivery date
- Paid invoices
- Past due date
- Payment failure count
- Payment method type
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Seal Subscriptions
ProsperStack integrates with
[Seal Subscriptions](https://www.sealsubscriptions.com/) and Shopify to import
customer and subscription data, personalize retention experiences and apply
supported subscription changes. This page explains how to connect and integrate
Seal and summarizes the features and properties supported by the platform
integration.
## Connecting Seal
To connect Seal, you'll need your API token and Shopify store URL.
For help with Seal API credentials,
[see the Seal documentation](https://www.sealsubscriptions.com/articles/merchant-api-documentation#authentication).
Click **Connect** to begin the next step: connecting your Shopify account.
## Connecting Shopify
After clicking **Continue**, you'll be redirected to your Shopify account to
approve access. Once that's done, the import process will begin automatically.
## Integrating Seal
To activate the ProsperStack cancellation flow in your Seal legacy customer
portal, you'll need to install the ProsperStack snippet in your Shopify store
theme.
### Getting your snippet
To find your snippet, click the gear icon in the main header to open
**Settings**, then select **Integrations**. Click **Configure** in the Seal
Subscriptions section. You'll find your snippet in the **Shopify snippet**
section.
Click the copy button in the top right of the text area to copy the snippet to
your clipboard.
### Installing your snippet
To begin, navigate to the **Themes** page in your Shopify store dashboard. Find
the dropdown button next to your active theme and click **Edit code** in the
menu.
Next, select the `theme.liquid` file in the navigation on the left side of your
screen.
In the code editor, locate the closing `` tag and paste your snippet just
before this closing tag.
Click the **Save** button to save your changes and activate the ProsperStack
cancellation flow.
## Feature support reference
**Solutions**
Overall support for ProsperStack solutions.
- **Cancellation flows** — Full support
- **Winback campaigns** — Partial support: Missing reactivation offers.
- **Revenue recovery** — Not supported
- **Conversion incentives** — Partial support: Missing payment capture.
- **Customer portal** — Not supported
- **Autopilot offers** — Full support
**Features**
Subscription platform dependent capabilities. Features supported on every
platform are not listed.
**Coupons**
- **Coupon offer** — Supported
- **Create new coupon** — Supported
- **Percentage-based coupon** — Supported
- **Fixed amount coupon** — Supported
- **One-time coupon** — Supported
- **Indefinite coupon** — Supported
- **Monthly duration coupon** — Not supported
- **Billing cycle coupon** — Supported
- **Custom duration coupon** — Supported
- **Use existing coupon** — Supported
- **Apply coupon to customer** — Not supported
- **Apply coupon to items** — Not supported
- **Replace existing coupon** — Supported
- **End trial (conversion)** — Not supported
**Plan changes**
- **Plan change offer** — Not supported
**Upgrade**
- **Upgrade offer** — Not supported
**Downgrade**
- **Downgrade offer** — Not supported
**Modify subscription**
- **Modify subscription offer** — Not supported
**Pause subscription**
- **Pause subscription offer** — Supported
- **Specify pause length** — Not supported
- **Pause for a period of time** — Not supported
- **Pause for a number of billing cycles** — Not supported
- **Pause indefinitely** — Supported
- **Pause at end of billing period** — Not supported
- **Reset billing date after pause** — Not supported
- **Specify pause end date** — Not supported
**Trial extension**
- **Trial extension offer** — Not supported
**Product swap**
- **Product swap offer** — Supported
- **Apply coupon with product swap** — Not supported
**Other offers**
- **Payment recovery offer** — Not supported
- **Free gift offer** — Not supported
- **One-time purchase offer** — Not supported
- **Reactivation offer** — Not supported
- **Reschedule order offer** — Supported
**Subscription cancellation**
- **Subscription cancellation** — Supported
- **Cancel at end of billing period** — Not supported
- **Cancel unpaid invoices** — Not supported
**Customer portal**
- **Customer portal** — Not supported
**Properties**
Properties available for customer segmentation.
**Subscriber**
- Active offer ID
- ARR
- Cancel reason
- Cancel reason code
- Days since saved
- Email address
- First name
- Last name
- Last session date
- Last session start date
- LTV
- MRR
- Paid invoices
- Saved date
- Session domain
- Session URL
- SKU count
- SKUs
- Status
- Subscription plan IDs
**Subscription**
- Active coupon ID
- ARR
- Billing location
- Cancel reason
- Cancel reason code
- Discount fixed amount
- Discount percentage
- Duration (days)
- Last session date
- Last session start date
- LTV
- MRR
- Next billing date
- Paid invoices
- Session domain
- Session URL
- Shipping location
- SKU count
- SKUs
- Status
- Trial days
**Plans**
- Plan IDs
- Plan interval counts
- Plan intervals
- Plan names
- Plan quantities
---
## Custom integration
If you aren't using one of the
[supported subscription platforms](/subscription-platforms/connecting-your-subscription-platform#supported-platforms)
or you have a custom subscription setup that doesn't make use of your billing
platform's subscription management features, you can choose to integrate
ProsperStack yourself with a custom billing integration.
## Limitations
Without a direct connection to your billing system, ProsperStack cannot
automatically cancel subscriptions or fulfill accepted offers. Your application
owns every subscription change.
Additional features that are not available without a connected subscription
platform include:
- Retained revenue reporting
- Subscription payment automation triggers
- The hosted customer portal
## Connecting a custom integration
On the ProsperStack dashboard, click **Connect a subscription platform** to open
the connection panel. You can also click the gear icon in the main header to
open **Settings**, then click **Connect a platform** in the **Subscription
platform** section.
Click **Use a custom integration**.
Click **Continue**.
## Implementing a custom integration
When using a custom integration, your application will be responsible for
processing cancellations, fulfilling accepted offers and making any other
subscription modifications.
Implementation involves embedding the ProsperStack cancellation flow into your
application and adding handlers to process cancellations and other subscription
changes.
[Read more about implementing a custom billing integration.](/for-developers/custom-subscription-platform)
---
## Feature support reference
# Subscription platform feature support reference
Refer to the subscription platform page for details on feature and property
support.
- [Stripe](./stripe)
- [Chargebee](./chargebee)
- [Recurly](./recurly)
- [Recurly Commerce](./recurly-commerce)
- [Bold](./bold)
- [Braintree](./braintree)
- [Maxio](./maxio)
- [Naviga](./naviga)
- [OpenPay](./openpay)
- [Ordergroove](./ordergroove)
- [Paddle](./paddle)
- [Piano](./piano)
- [Recharge](./recharge)
- [Seal Subscriptions](./seal-subscriptions)
- [Stay AI](./stay-ai)
- [Sticky.io](./sticky-io)
- [Submarine](./submarine)
---
## Slack
# Slack integration
The Slack integration posts notifications to a Slack channel whenever a flow
session is completed.
To enable the integration, click the gear icon in the main header to open
**Settings**, then select **Integrations**. Click **Configure** in the Slack
section to open the Slack integration page.
Click **Connect Slack** to begin the connection process. You'll be redirected to
Slack to choose a channel to receive the notifications.
After you grant access to post messages to your Slack workspace, you can
configure the Slack notifications you'd like to receive.
## Notifications
Click the toggle to enable/disable Slack notifications for specific events: when
a cancellation session starts, when a subscriber cancels, is saved or deflected.
### Message headline
To customize a notification headline, click the edit icon next to the current
headline to open the headline editor.
The headline supports property tokens such as `{{ subscriber.name }}` or
`{{ subscription.mrr }}`.
Use the **Insert property** menu in the editor to browse and insert available
tokens, including subscriber attributes, platform properties, and custom
properties. You can also specify a fallback value that is used when the property
has no value for a given session (e.g.
`{{ subscriber.name | default: "your subscriber" }}`).
Leave the headline blank to use the built-in default message for that event.
Click **Save**.
## Session properties
The **Session properties** section controls which properties are included in
each Slack notification and the order in which they appear.
By default, notifications include the subscriber name and MRR. Use **Add
property** to include additional fields — such as platform properties or custom
properties — and drag the pills to reorder them. Property values reflect the
state of the session at the time it occurred.
---
## HubSpot
# HubSpot integration
**Required plan:** Prosper or Enterprise.
## Two-way sync with HubSpot
The HubSpot integration connects with your HubSpot account to link contact or
company data with subscriber custom properties in ProsperStack. Use custom
properties in segments to enable targeted offers, conditional cancellation flow
steps and segmented reporting.
[Learn more about custom properties.](/customer-segmentation/custom-properties)
The HubSpot integration also allows you to store cancellation survey responses
in your HubSpot contact or company properties.
## Connecting your HubSpot account
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the HubSpot section to open the HubSpot
integration page.
Click **Connect HubSpot** to begin the connection process. You'll be redirected
to grant ProsperStack access to your HubSpot account.
ProsperStack will request access to your contact data in order for the
integration to work. Choose a HubSpot account and click **Connect app** to
proceed.
Once your account is connected, you can map HubSpot properties to custom
properties in ProsperStack and choose where to store cancellation survey
answers.
## Matching HubSpot contacts or companies
ProsperStack can sync data with HubSpot contacts, companies or custom objects
available in your HubSpot account, depending on where you store subscriber data.
By default, ProsperStack will match your subscribers with HubSpot contacts by
email address.
In **Object mapping**, select **Contacts**, **Companies** or an available custom
object. The properties offered in the remaining settings follow the selected
object type.
Only contacts can be matched by email address. Companies and custom objects are
matched using a property that contains your subscription platform's customer ID.
In the dropdown under **Billing customer ID**, select the HubSpot property that
contains your subscription platform's customer ID.
HubSpot contacts can also be matched using a billing customer ID if you do not
store email addresses in your connected subscription platform.
## Sending session statuses to HubSpot
In the **General** section, choose a writable HubSpot property under **Session
status property**. ProsperStack stores the most recent completed
[session status](/sessions/viewing-sessions#session-statuses) in this property
for the matched object. Click **Save changes**.
The dropdown only offers properties that can actually store a session status:
writable free-text properties, or picklist properties that already include
options matching ProsperStack's session statuses (`saved`, `canceled` and
`deflected`). HubSpot's own built-in enum properties, such as **Status**, aren't
offered because they only accept a fixed set of values that don't match session
statuses and HubSpot will reject the write.
## Mapping properties
In the **Property mappings** section, you can select HubSpot properties to map
to ProsperStack subscriber custom properties.
Select a property from your HubSpot account from the dropdown on the left, then
choose a corresponding custom property in ProsperStack (or create a new one) to
store the data.
The custom property in ProsperStack must be of the same data type as the HubSpot
property to create a mapping. For example, a number property in HubSpot must be
mapped to a number custom property in ProsperStack.
Click the **+** button to add another mapping. You can add as many mappings as
you need.
Once you've configured your property mappings, click **Save changes**.
ProsperStack will begin collecting your contact property data and will keep it
in sync over time.
## Sending data to HubSpot
In the **Question mappings** section, you can select survey questions to map to
HubSpot properties. When a subscriber answers a survey question in your
cancellation flow, ProsperStack will send the data to HubSpot and store the
answer in the selected property.
Select a question from your available cancellation survey questions using the
dropdown on the left, then choose a HubSpot property that will store the answer
data.
When storing the answer to a multiple choice survey question in HubSpot,
ProsperStack will use the option's
[reason code](/cancellation-flows/creating-a-question#reason-codes) if
configured. If no reason code is configured, the full text of the multiple
choice option will be stored.
Click **Add mapping** to configure another question and destination property.
When you finish, click **Save changes**.
## View subscribers in HubSpot
Once the HubSpot integration is connected, ProsperStack subscribers that are
matched with contacts in your HubSpot account will be linked so you can refer
back to them in HubSpot.
When viewing a subscriber in ProsperStack, click the **View in HubSpot** link to
open a new browser window to the record in your HubSpot account.
---
## Intercom
# Intercom integration
**Required plan:** Prosper or Enterprise.
## Two-way sync with Intercom
The Intercom integration connects with your Intercom account to link contact
data with subscriber custom properties in ProsperStack. Use custom properties in
segments to enable targeted offers, conditional cancellation flow steps and
segmented reporting.
[Learn more about custom properties.](/customer-segmentation/custom-properties)
The Intercom integration also allows you to store cancellation survey responses
in your Intercom account in custom contact data attributes.
## Connecting your Intercom account
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Intercom section to open the
Intercom integration page.
Click **Connect Intercom** to begin the connection process. You'll be redirected
to grant ProsperStack access to your Intercom account.
ProsperStack will request access to view and manage your contact data in order
for the integration to work. Click **Authorize access** to proceed.
Once your account is connected, you can map Intercom data attributes to custom
properties in ProsperStack and choose where to store cancellation survey
answers.
## Mapping properties
In the **Property mappings** section, you can select Intercom contact data
attributes to map to ProsperStack subscriber custom properties.
Select a data attribute from your Intercom account from the dropdown on the
left, then choose a corresponding custom property in ProsperStack (or create a
new one) to store the data.
The custom property in ProsperStack must be of the same data type as the
Intercom data attribute to create a mapping. For example, an integer data
attribute in Intercom must be mapped to a number custom property in
ProsperStack.
Click the **+** button to add another mapping. You can add as many mappings as
you need.
Once you've configured your property mappings, click **Save changes**.
ProsperStack will begin collecting your Intercom contact data and will keep it
in sync over time.
## Sending data to Intercom
In the **Question mappings** section, you can select survey questions to map to
Intercom custom data attributes. When a subscriber answers a survey question in
your cancellation flow, ProsperStack will send the data to Intercom and store
the answer in the selected data attribute.
Select a question from your available cancellation survey questions using the
dropdown on the left, then choose an Intercom data attribute that will store the
answer data.
When storing the answer to a multiple choice survey question in Intercom,
ProsperStack will use the option's
[reason code](/cancellation-flows/creating-a-question#reason-codes) if
configured. If no reason code is configured, the full text of the multiple
choice option will be stored.
Click **Add mapping** to configure another question and destination attribute.
When you finish, click **Save changes**.
## Matching Intercom contacts
Intercom contacts are matched with subscribers in ProsperStack by email address.
For your Intercom data attributes to be correctly mapped to subscribers in
ProsperStack, make sure that customers in your
[connected subscription platform](/subscription-platforms/connecting-your-subscription-platform)
have a valid email address that matches with a corresponding contact in
Intercom.
## View subscribers in Intercom
Once the Intercom integration is connected, ProsperStack subscribers that are
matched with contacts in your Intercom account will be linked so you can refer
back to them in Intercom.
When viewing a subscriber in ProsperStack, click the **View in Intercom** link
to open a new browser window to the contact in your Intercom account.
---
## Salesforce
# Salesforce integration
**Required plan:** Prosper or Enterprise.
If you store subscriber data in Salesforce that you want to use in ProsperStack,
you can use the Salesforce integration to keep your Salesforce data in sync with
ProsperStack.
The Salesforce integration connects with your Salesforce account to link contact
fields with subscriber custom properties in ProsperStack. Use custom properties
in segments to enable targeted offers, conditional cancellation flow steps and
segmented reporting.
[Learn more about custom properties.](/customer-segmentation/custom-properties)
## Connecting your Salesforce account
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Salesforce section to open the
Salesforce integration page.
Click **Connect Salesforce** to begin the connection process. In a live
ProsperStack account, you'll be redirected to authorize a production Salesforce
account.
When connecting from ProsperStack test mode, a connection dialog appears first.
Enable **Use Salesforce sandbox** to authorize a Salesforce sandbox, or leave it
disabled to use a production account. Click **Continue**.
ProsperStack will request access to your Salesforce data in order for the
integration to work. It reads the fields you map to ProsperStack and can write
configured survey answers to Salesforce contact fields. Click **Allow** to
proceed.
Once your account is connected, you can map Salesforce contact fields to custom
properties in ProsperStack.
## Mapping properties
In the **Property mappings** section, you can select a Salesforce contact field
to map to ProsperStack subscriber custom properties.
Select a field from your Salesforce account from the dropdown on the left, then
choose a corresponding custom property in ProsperStack (or create a new one) to
store the data.
The custom property in ProsperStack must be of the same data type as the
Salesforce field to create a mapping. For example, an integer field in
Salesforce must be mapped to a number custom property in ProsperStack.
Click the **+** button to add another mapping. You can add as many mappings as
you need.
Once you've configured your property mappings, click **Save changes**.
ProsperStack will begin collecting your Salesforce contact data and will keep it
in sync over time.
## Sending data to Salesforce
In the **Question mappings** section, you can select survey questions to map to
Salesforce contact fields. When a subscriber answers a survey question in your
cancellation flow, ProsperStack will send the data to Salesforce and store the
answer in the selected field.
Select a question from your available cancellation survey questions using the
dropdown on the left, then choose a Salesforce field that will store the answer
data.
When storing the answer to a multiple choice survey question in Salesforce,
ProsperStack will use the option's
[reason code](/cancellation-flows/creating-a-question#reason-codes) if
configured. If no reason code is configured, the full text of the multiple
choice option will be stored.
Click **Add mapping** to configure another question and destination field. When
you finish, click **Save changes**.
## Matching Salesforce contacts
Salesforce contacts are matched with subscribers in ProsperStack by email
address. For your Salesforce fields to be correctly mapped to subscribers in
ProsperStack, make sure that customers in your
[connected subscription platform](/subscription-platforms/connecting-your-subscription-platform)
have a valid email address that matches with a corresponding contact in
Salesforce.
## View subscribers in Salesforce
Once the Salesforce integration is connected, ProsperStack subscribers that are
matched with contacts in your Salesforce account will be linked so you can refer
back to them in Salesforce.
When viewing a subscriber in ProsperStack, click the **View in Salesforce** link
to open a new browser window to the contact in your Salesforce account.
---
## Klaviyo
# Klaviyo integration
**Required plan:** Prosper or Enterprise.
## Two-way sync with Klaviyo
The Klaviyo integration connects with your Klaviyo account to link profile data
with subscriber custom properties in ProsperStack. Use custom properties in
segments to enable targeted offers, conditional cancellation flow steps and
segmented reporting.
[Learn more about custom properties.](/customer-segmentation/custom-properties)
The Klaviyo integration also allows you to store cancellation survey responses
and subscriber cancel session statuses in your Klaviyo account in custom profile
properties.
## Use your existing Klaviyo segments
The Klaviyo integration will automatically sync your existing Klaviyo segments
with ProsperStack. Use your Klaviyo segments anywhere you'd use ProsperStack
segments, e.g.
[retention offer rules](/cancellation-flows/presenting-offers-during-cancellation#rules),
[conversion campaign rules](/conversion/creating-a-campaign#offer-rules-for-a-campaign),
etc.
## Connecting your Klaviyo account
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Klaviyo section to open the Klaviyo
integration page.
Click **Connect Klaviyo** to begin the OAuth connection. You'll be redirected to
Klaviyo to sign in and authorize ProsperStack.
Sign into Klaviyo, then approve access for the account you want to connect.
ProsperStack requests permission to read account information, read and update
profiles, and read segments.
Once your account is connected, you can map Klaviyo profile properties to custom
properties in ProsperStack, choose where to store cancellation survey answers
and configure a property to store session statuses.
## Mapping properties
In the **Property mappings** section, you can select Klaviyo profile properties
to map to ProsperStack subscriber custom properties.
Enter a Klaviyo custom profile property name in the field on the left, then
choose a corresponding custom property in ProsperStack (or create a new one) to
store the data.
:::warning[Note]
Klaviyo custom profile property names are **case-sensitive**. Make sure the
property names entered exactly match the names in your Klaviyo account.
:::
When creating a custom property in ProsperStack, make sure to choose an
appropriate data type (text, number, etc.). ProsperStack will attempt to convert
the data found in the Klaviyo property to the type of custom property that the
Klaviyo property is mapped to.
Click the **+ Add mapping** button to add another mapping. You can add as many
mappings as you need.
Once you've configured your property mappings, click **Save changes**.
ProsperStack will begin collecting your Klaviyo profile data and will keep it in
sync over time.
:::info[Note]
If the unique identifier of a ProsperStack custom property exactly matches the
name of a Klaviyo custom profile property, it will be mapped automatically. You
don't need to create additional mappings in this case.
:::
## Sending data to Klaviyo
### Session statuses
Configure a Klaviyo profile property to store
[session statuses](/sessions/viewing-sessions#session-statuses) with the
**Session status property** field. When a cancel flow session is completed, the
status will be mapped to this Klaviyo profile property.
Click **Save changes** after entering the property name.
### Question mappings
In the **Question mappings** section, you can select survey questions to map to
Klaviyo custom profile properties. When a subscriber answers a survey question
in your cancellation flow, ProsperStack will send the data to Klaviyo and store
the answer in the selected property.
Select a question from your available cancellation survey questions using the
dropdown on the left, then enter the name of a Klaviyo property that will store
the answer data.
:::warning[Note]
Klaviyo custom profile property names are **case-sensitive**. Make sure the
property names entered exactly match the names in your Klaviyo account.
:::
When storing the answer to a multiple choice survey question in Klaviyo,
ProsperStack will use the option's
[reason code](/cancellation-flows/creating-a-question#reason-codes) if
configured. If no reason code is configured, the full text of the multiple
choice option will be stored.
Click the **+ Add mapping** button to add another mapping. You can add as many
mappings as you need.
Once you've configured your question mappings, click **Save changes**.
ProsperStack will now sync your selected survey question answers to your Klaviyo
account.
## Matching Klaviyo profiles
Klaviyo profiles are matched with subscribers in ProsperStack by email address.
For your Klaviyo custom profile properties to be correctly mapped to subscribers
in ProsperStack, make sure that customers in your
[connected subscription platform](/subscription-platforms/connecting-your-subscription-platform)
have a valid email address that matches with a corresponding profile in Klaviyo.
## View subscribers in Klaviyo
Once the Klaviyo integration is connected, ProsperStack subscribers that are
matched with profiles in your Klaviyo account will be linked so you can refer
back to them in Klaviyo.
When viewing a subscriber in ProsperStack, click the **View in Klaviyo** link to
open a new browser window to the profile in your Klaviyo account.
---
## Segment
# Segment integration
**Required plan:** Prosper or Enterprise.
[Segment](https://segment.com/) is a customer data platform that collects data
from virtually any source so you can route it to where it needs to go. The
[ProsperStack Destination](https://segment.com/integrations/prosperstack/)
receives data from Segment and automatically links it to your subscriber custom
properties in ProsperStack.
If you store customer data in other platforms that you want to use in
ProsperStack, you can use the Segment integration to keep your customer data in
sync with ProsperStack.
The Segment integration connects with your Segment account to add the
ProsperStack Destination to your sources in Segment. The ProsperStack
Destination accepts
[Segment Identify](https://segment.com/docs/connections/spec/identify/) calls
and stores data from customer traits in your ProsperStack subscriber custom
properties. Use custom properties in ProsperStack segments to enable targeted
offers, conditional cancellation flow steps and segmented reporting.
[Learn more about custom properties.](/customer-segmentation/custom-properties)
## Connecting your Segment account
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Segment section to open the Segment
integration page.
Click **Connect Segment** to begin the connection process. You'll be prompted to
choose a Segment workspace and source to send data to the ProsperStack
Destination.
Once you've confirmed your workspace and source, the ProsperStack Destination
will be active automatically. You can now send data from your connected source
to ProsperStack custom properties using
[Segment Identify traits](https://segment.com/docs/connections/spec/identify/#traits).
## Mapping properties
To map Segment traits to your ProsperStack custom properties, you have two
options:
### 1. Use traits with keys that match your subscriber custom property names
For example, given the following Identify call:
```js
analytics.identify("userId123", {
email: "john.doe@example.com",
traits: {
"Last contacted": "2021-05-04",
},
});
```
If you have a subscriber custom property named **Last contacted**, the
subscriber in ProsperStack with the email address **john.doe@example.com** will
have the **Last contacted** custom property updated automatically.
### 2. Configure mappings from Segment traits to subscriber custom properties
In the **Property mappings** section, you can map Segment traits to ProsperStack
subscriber custom properties.
Enter the Segment trait key you want to map and choose a ProsperStack subscriber
custom property (or create a new one) to store the data.
When creating a custom property in ProsperStack, make sure to choose an
appropriate data type (text, number, etc.). ProsperStack will attempt to convert
the data found in the trait to the type of custom property that the trait is
mapped to.
Click the **+ Add mapping** button to add another mapping. You can add as many
mappings as you need.
Once you've configured your property mappings, click **Save changes**. All
future Segment Identify calls will use the configured property mappings to link
data to your custom properties.
## Matching Segment Identify calls to subscribers
Traits in Segment Identify calls are matched with subscribers in ProsperStack by
email address. For your Segment traits to be correctly mapped to subscribers in
ProsperStack, make sure that customers in your
[connected subscription platform](/subscription-platforms/connecting-your-subscription-platform)
have a valid email address and that an `email` property is specified in your
Segment Identify calls.
## Connecting additional sources
You can connect multiple sources in Segment to the ProsperStack Destination. In
the Segment integration configuration screen, click the **Connect a source**
button in the **Connected sources** section. You'll be prompted to choose a
Segment workspace and source to connect to the ProsperStack Destination.
To disconnect a source, click the **Disconnect** button next to the source in
the **Connected sources** section and confirm. Disconnecting a source removes
the ProsperStack Destination from the source in Segment. Any data that's already
stored in ProsperStack that came from the source won't be removed, but no new
data will be sent to the ProsperStack Destination.
---
## Yotpo
**Required plan:** Prosper or Enterprise.
The Yotpo integration connects ProsperStack to your Yotpo Loyalty &
Referrals program, allowing you to map loyalty information to
[custom properties](/customer-segmentation/custom-properties) for use in
customer segments, offers and more.
## Connecting your Yotpo account
Click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Configure** in the Yotpo section.
On the Yotpo integration page, click **Connect Yotpo** to begin the connection
process.
Enter your **App Key (Store ID)** and **API secret**. Click **Connect**.
For more information on finding your Yotpo API credentials, see the
[Yotpo documentation](https://support.yotpo.com/docs/finding-your-yotpo-app-key-and-secret-key-4).
## Mapping properties
In the Property mappings section, you can select Yotpo loyalty fields to map to
ProsperStack subscriber custom properties.
Click **Add mapping** to add a new mapping. Select a field from your Yotpo
account from the dropdown on the left, then choose a corresponding custom
property in ProsperStack (or create a new one) to store the data.
Click **Save changes**.
### Available Yotpo fields
| Field | Type | Description |
| ------------------------------------- | ---------- | -------------------------------------------------------- |
| Loyalty: points balance | Number | Current redeemable points balance |
| Loyalty: points earned (lifetime) | Number | Total points ever earned |
| Loyalty: points expiration date | Date | Date current points expire |
| Loyalty: total points redeemed | Number | Cumulative points redeemed |
| Loyalty: total redemptions | Number | Number of redemption transactions |
| Loyalty: store credit balance | Number | Current store credit balance |
| Loyalty: store credit currency | Text | Currency of the store credit balance |
| Loyalty: VIP tier | Text | Name of the customer's current VIP tier |
| Loyalty: VIP tier entry date | Date | Date the customer entered their current VIP tier |
| Loyalty: VIP tier expiration date | Date | Date the current VIP tier expires |
| Loyalty: successful referrals | Number | Number of referrals that resulted in a purchase |
| Loyalty: referrals made and clicked | Number | Number of referral links clicked |
| Loyalty: referred by another customer | True/false | Whether the customer was referred by someone else |
| Loyalty: enrolled in loyalty | True/false | Whether the customer has opted in to the loyalty program |
| Loyalty: enrollment date | Date | Date the customer enrolled in the loyalty program |
| Loyalty: opt-out date | Date | Date the customer opted out of the loyalty program |
| Loyalty: has store account | True/false | Whether the customer has a store account |
| Loyalty: last seen at | Date | Date the customer was last active |
---
## Zapier
# Zapier integration
Zapier is an automation platform that supports thousands of the most popular
apps like Google Sheets, Slack, Todoist, Trello and Airtable.
The ProsperStack Zapier integration allows you to trigger events when a flow
session is started or completed and use the data in any Zapier workflow.
Note: The Zapier integration is currently in invite-only beta. To join the beta,
click the gear icon in the main header to open **Settings**, then select
**Integrations**. Click **Join the beta** in the Zapier section.
---
## MCP server
**Required plan:** Prosper or Enterprise.
## Connect your AI to ProsperStack
The ProsperStack MCP server lets AI tools like Claude and ChatGPT connect to
your ProsperStack data through the Model Context Protocol (MCP). Your AI tool
can search and read your data, and create and update flows, offers, segments and
other resources — all with the same access as your dashboard login.
## Claude
### Free, Pro and Max plans
1. Go to [Customize > Connectors](https://claude.ai/customize/connectors) in
Claude.
2. Click **+**, then **Add custom connector**.
3. Enter the URL and click **Add**:
```
https://mcp.prosperstack.com/v1
```
4. Find the ProsperStack connector in the list and click **Connect**.
5. Sign in to ProsperStack.
### Team and Enterprise plans
On Team and Enterprise plans, an Owner adds the connector once and each member
then connects individually.
**For Owners:**
1. Go to
[Organization settings > Connectors](https://claude.ai/admin-settings/connectors).
2. Click **Add**, then choose **Custom > Web**.
3. Enter the URL and click **Add**:
```
https://mcp.prosperstack.com/v1
```
**For members:**
1. Go to [Customize > Connectors](https://claude.ai/customize/connectors).
2. Find the ProsperStack connector and click **Connect**.
3. Sign in to ProsperStack.
## Claude Code
Run this command in your terminal:
```bash
claude mcp add --transport http prosperstack https://mcp.prosperstack.com/v1
```
Then run `/mcp` in Claude Code and follow the sign-in flow.
## ChatGPT
Custom MCP connectors require ChatGPT developer mode and are available on Plus,
Pro, Business, Enterprise and Edu plans.
1. Go to **Settings > Apps & Connectors > Advanced settings** and turn on
**Developer mode**.
2. Go back to **Settings > Apps & Connectors** and click **Create**.
3. Enter a name and the MCP server URL:
```
https://mcp.prosperstack.com/v1
```
4. Set the authentication mode to **OAuth**, then click **Create**.
5. Sign in to ProsperStack.
## Cursor
1. Open **Cursor Settings** → **MCP & Integrations** → **Add custom MCP**.
2. Paste the following configuration:
```json
{
"mcpServers": {
"prosperstack": {
"url": "https://mcp.prosperstack.com/v1"
}
}
}
```
3. Save and restart Cursor. The first time you use a ProsperStack tool, sign in
to ProsperStack.
## VS Code (GitHub Copilot)
1. Create a `.vscode/mcp.json` file in your workspace:
```json
{
"servers": {
"prosperstack": {
"type": "http",
"url": "https://mcp.prosperstack.com/v1"
}
}
}
```
2. Open the command palette (`Cmd+Shift+P` / `Ctrl+Shift+P`) and run **MCP: List
Servers**.
3. Start the ProsperStack server and sign in.
## Codex
1. Add the ProsperStack server to `~/.codex/config.toml`:
```toml
[mcp_servers.prosperstack]
url = "https://mcp.prosperstack.com/v1"
```
2. Sign in by running:
```bash
codex mcp login prosperstack
```
## Zed
Add the server to your Zed `settings.json`:
```json
{
"context_servers": {
"prosperstack": {
"source": "custom",
"url": "https://mcp.prosperstack.com/v1"
}
}
}
```
The first time you use a ProsperStack tool, sign in to ProsperStack.
## Windsurf
1. Open **Windsurf Settings** and search for **MCP**.
2. Click **View raw config** to open `mcp_config.json`.
3. Add the ProsperStack server configuration:
```json
{
"mcpServers": {
"prosperstack": {
"serverUrl": "https://mcp.prosperstack.com/v1"
}
}
}
```
4. Save and restart Windsurf, then sign in to ProsperStack.
## Other tools
The ProsperStack MCP server is a remote MCP server at
`https://mcp.prosperstack.com/v1`. Most AI tools that support MCP let you
connect to a remote server by entering its URL.
Reach out to [support@prosperstack.com](mailto:support@prosperstack.com) if you
need help connecting your AI tool.
## Multi-account users
If you have access to multiple ProsperStack accounts, the assistant will ask
which account to use (live or test) before making other calls.
---
## Embedding the flow
## How to integrate the cancellation flow with your application or service
:::info[Note]
Version `2.0.0` of the flow library introduces some breaking changes. See the
[upgrade guide](/for-developers/embedding-the-flow#200) for information on
upgrading from previous versions.
:::
To pass cancellations through your ProsperStack cancellation flow, you'll need
to integrate the ProsperStack JavaScript library with your application.
There are two options for including the ProsperStack JavaScript library in your
application.
### Install from npm
You can install the `@prosperstack/flow` package from npm.
```shell
$ npm install @prosperstack/flow
```
or, with yarn:
```shell
yarn add @prosperstack/flow
```
In your application, import the library:
```javascript
import flow from "@prosperstack/flow";
```
### Load via script tag
If you don't want to use npm, you can load it with a script tag.
```html
```
If loaded via script tag, the library will be available at
`window.ProsperStack.flow`.
## Usage
Call the imported `flow()` method or `window.ProsperStack.flow` if loaded via
script tag.
```javascript
flow({
clientId: "acct_IrbFC8mvFtDAugC8k7uNlRn6",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
});
```
or
```javascript
window.ProsperStack.flow({
clientId: "acct_IrbFC8mvFtDAugC8k7uNlRn6",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
});
```
### Arguments
The `flow()` method accepts the following parameters:
- `payload: Payload | SignedPayload` - A [Payload](#the-payload-object) object,
or a [SignedPayload](#the-signedpayload-object) object if using
[signed requests](#signing-requests).
- `options?: Options` - (**optional**) - An [Options](#options) object.
#### The Payload object
- `clientId: string` - (**required**) – Your unique client ID. You can find your
client ID in your ProsperStack settings page.
- `flowId: string` - (**optional**) - The unique ID of a cancellation flow to
use. Bypasses your flow routing rules.
Depending on your subscription platform, the payload object requires additional
properties.
##### Subscription platform integration
- `subscription: Subscription` - (**required**) - Object containing details of
the subscription being canceled.
- `platformId` - (**required**) The ID of the subscription from your connected
subscription platform that is being canceled.
- `properties` - (**optional**) Object containing subscription
[custom properties](/for-developers/embedding-the-flow#custom-properties).
- `subscriber: Subscriber` - (**optional**) - Object containing details of the
subscriber that is canceling.
- `properties` - (**optional**) Object containing subscriber
[custom properties](/for-developers/embedding-the-flow#custom-properties).
##### Working with multiple flows
When using [multiple flows](/cancellation-flows/multiple-flows), you only need
to specify a `clientId`. Your
[flow route rules](/cancellation-flows/multiple-flows#routing-customers-to-a-flow)
will determine which flow customers are routed to. If you want to bypass routing
rules and send customers to a specific cancellation flow, you can specify the
`flowId` in addition to the `clientId`.
##### Custom integration
- `subscriber: Subscriber` - (**required**) - Object containing details of the
subscriber that is canceling.
- `internalId: string | number` - (**required**) - The internal ID in your
application of the subscriber that is canceling.
- `name: string` - (**required**) - Name of the subscriber that is canceling.
- `email: string` - (**required**) - Email of the subscriber that is
canceling.
- `properties` - (**optional**) Object containing subscriber
[custom properties](/for-developers/embedding-the-flow#custom-properties).
- `subscription?: Subscription` - (**optional**) - Object containing details of
the subscription that is being canceled.
- `mrr?: number` - (**optional**) - MRR of the subscription that is being
canceled.
- `currency?: string` - (**optional**) - Three-letter ISO currency code (i.e.
`usd`) that `mrr` is specified in.
- `trial?: boolean` - (**optional**) - Designate that the subscription being
canceled is a free trial.
- `properties` - (**optional**) Object containing subscription
[custom properties](/for-developers/embedding-the-flow#custom-properties).
##### Custom properties
Custom properties allow you to attach custom data to your subscriber and
subscription objects for more powerful targeting and segmentation.
You'll need to create custom properties in ProsperStack before storing values in
them.
[Learn more about managing custom properties.](/customer-segmentation/custom-properties)
Specify custom properties to attach to either a `subscriber` or `subscription`
with the `properties` object. Use an object with the unique identifier of the
property as the key, for example:
```javascript
{
number_of_contacts: 5800,
is_professional: true,
last_contacted: "2021-05-04",
preferred_name: "Johnny"
}
```
[Learn more about formatting values for custom properties.](/customer-segmentation/custom-properties#formatting-data-for-custom-properties)
#### Options
The `Options` object accepts the following properties:
- `onCompleted?: (result: FlowResult) => void` — (**optional**)
A callback that is called
[when the cancellation flow is completed](#when-the-flow-is-complete). If not
supplied, the method will return `Promise`.
- `onClosed?: () => void` — (**optional**)
A callback that is called when the cancellation flow is closed.
- `onError?: (err: Error) => void` — (**optional**)
A callback that is called when an error occurs with the cancellation flow.
- `sign?: (payload: string) => string | Promise` — (**optional**)
A callback that is called with the JSON-encoded flow payload to enable
[request signing](#signing-requests). Expects a hex HMAC-SHA256 signature
digest to be returned.
- `displayMode?: "full_screen" | "modal"` — (**optional**)
Launch the flow either full screen (default) or as a modal over the top of the
current page. When presented as a modal, the flow layout changes slightly to
accommodate the reduced dimensions, looking more like the mobile version.
Requires `@prosperstack/flow` version 2.3.0.
### When the flow is complete
To be notified when the cancellation flow is complete, the library can accept a
callback or return a Promise.
**NOTE:** If using a confirmation step, the Promise or `onCompleted` callback
may resolve _before_ the flow is completely closed by the subscriber. See the
[confirmation step notes](#showing-a-confirmation-message-after-the-flow) for
more details.
The callback or Promise will provide a `FlowResult` object, which contains the
following properties:
- `status: 'canceled' | 'saved' | 'deflected' | 'incomplete'` - The result of
the cancellation flow.
- `flowSession: FlowSession` - The completed or aborted `FlowSession` object.
This object contains details of the offers presented and accepted as well as
all survey data for the cancellation flow session. For more details on the
structure of the `FlowSession` object, see the
[API reference documentation for flow sessions](https://developers.prosperstack.com/#tag/flow_sessions).
The possible values of `status` are:
- `canceled` - The customer chose to cancel their subscription.
- `saved` - The customer accepted an offer and chose to keep their subscription.
- `deflected` - The customer clicked the action button in a deflection card.
- `incomplete` - The customer closed the cancellation flow without completing
it.
#### Using a callback
```javascript
flow(
{
clientId: "acct_IrbFC8mvFtDAugC8k7uNlRn6",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
},
{
onCompleted: (result) => {
console.log("Flow complete!");
},
}
);
```
#### Using a Promise
```javascript
flow({
clientId: "acct_IrbFC8mvFtDAugC8k7uNlRn6",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
}).then((result) => {
console.log("Flow complete!");
});
```
Or with `await`:
```javascript
const result = await flow({
clientId: "acct_IrbFC8mvFtDAugC8k7uNlRn6",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
});
```
### Showing a confirmation message after the flow
After a subscriber completes the flow, you can either use the `status` property
of the flow result to display a confirmation message in your application, or you
can add a [confirmation step](/cancellation-flows/showing-a-confirmation-screen)
to have ProsperStack show a confirmation message for you.
If you use ProsperStack's confirmation step, note that the Promise (or
`onCompleted` callback) will resolve after the subscriber cancels their
subscription or accepts an offer, which occurs _before_ the confirmation step is
shown to the subscriber. If you have logic in your application that happens
after the subscriber exits out of the cancellation flow (for example,
redirecting to a different page in your application), we recommend using the
`onClosed` callback to be notified when the subscriber closes the confirmation
step and has completely exited out of the cancellation flow.
### Complete examples
#### Using a subscription platform integration
```html
```
#### Using the custom integration
```html
```
### Signing requests
In order to verify the authenticity of requests to begin a cancellation session,
we recommend signing your requests with your account secret.
When calling the `flow()` method, you can either provide a callback function to
the `sign` option property or supply a `SignedPayload` object in the `payload`
parameter.
#### The `sign` callback
The `sign` callback is called with the JSON-encoded payload and expects a hex
HMAC-SHA256 signature digest to be returned.
Here's an example of what calling a backend method to sign the request payload
might look like using the sign property:
```javascript
flow(
{
clientId: "acct_IrbFC8mvFtDAugC8k7uNlRn6",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
},
{
sign: async (payload) => {
const response = await fetch("https://app.example.com/sign", {
body: {
payload,
},
});
const signature = await response.json();
return signature;
},
}
);
```
#### The SignedPayload object
Instead of using the `sign` option, you can also pass in a `SignedPayload`
object to the `flow()` method.
The `SignedPayload` object should have the following properties:
- `payload: string` - A string containing a JSON-encoded
[Payload](#the-payload-object) object.
- `signature: string` - The hex HMAC-SHA256 signature digest.
Here's an example of what calling the `flow()` method with a `SignedPayload`
might look like:
```javascript
flow({
payload:
'{"clientId":"acct_IrbFC8mvFtDAugC8k7uNlRn6","subscription":{"platformId":"sub_H6X0WYrAzq2iGk"}}',
signature: "c9efbfb8121c892b5de8c4e7c0c9182db7f3d87aa4ee463191e06fe36f4b00be",
});
```
#### Generating the signature
The payload signature is a hex HMAC-SHA256 digest computed from the JSON-encoded
flow payload and your client secret.
Your client secret can be found in the **Account** section of your ProsperStack
settings. Click the gear icon in the main header to access settings.
Computing the HMAC digest will look a little different depending on your server
language, but the following is an example of what it might look like in Node.js:
```javascript
import crypto from "crypto";
const payload = JSON.stringify({
clientId: "acct_IrbFC8mvFtDAugC8k7uNlRn6",
subscription: {
platformId: "sub_H6X0WYrAzq2iGk",
},
});
const secret = "my client secret";
const digest = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
```
Creating the signature should take place on your backend server, so that the
secret is not exposed to the client. Make sure _not_ to do this in the browser!
### Content Security Policy (CSP)
If your application uses a Content Security Policy, you'll need to add the
following directives to your policy:
- `connect-src` — `https://api.prosperstack.com`
- `frame-src` — `https://app.prosperstack.com`
And if loading the library via a `