A Personalized Offer represents the best possible offer for a subscriber at a given moment in their lifecycle. It is generated by combining subscriber profile, subscription details, and contextual signals with the plays configured by Growth Managers in the Chargebee Growth dashboard. Learn more about Growth Solutions in our Help Docs.
Growth Managers define plays such as:
Acquire
: Incentivize trial users or prospects to subscribe. Expand
: Engage at-risk subscribers with targeted winbacks or discounts.Retain
: Engage at-risk subscribers with targeted winbacks or discounts.
Note: Growth solutions are currently in Early Access and available only for Chargebee Billing customers at no additional cost during the EAP period. This API is also part of the Early Access Program (EAP). To request access, contact eap@chargebee.com .
Features of this object The Personalized Offers object enables you to:
- Fetch context-aware offers generated by the Growth system.
- Display offer content (title and description) to subscribers.
- Provide subscribers with options they can act on.
- Attribute offers to the correct brand (for multi-brand merchants).
- Respect time-bound validity with the expires_at attribute.
Sample personalized offer [ JSON ]
{
"personalized_offers": [
{
"id": "a52ge40b",
"offer_id": "51Ora2PrXz",
"content": {
"title": "<div class=\"slate-p\">Need to take a break?</div>",
"description": "<div class=\"slate-p\">Instead of canceling why don't you pause your plan? We'll be here when you are ready to get started again.</div>"
},
"options": [
{
"id": "af647113-6002-4159-a48a-87f11564963e",
"label": "PAUSE MY PLAN",
"processing_type": "url_redirect",
"redirect_url": "https://mysecurecheckoutflow.com/abcd"
},
{
"id": "fd63284-6002-4159-a48a-87f11564963e",
"label": "CANCEL",
"processing_type": "billing_update"
}
]
}
],
"brand": {
"id": "1d5QXw39ar",
"name": "SecureCheck"
},
"expires_at": 24134311
}
API Index URL GET
https://{site}.grow.chargebee.com/api/v2/personalized_offers
string, max chars=50 A unique and immutable identifier for the personalized offer.
string, max chars=50 ID of the base offer configured. This ID is immutable and always refers to the core offer and its latest published version. required, content
The offer content to display to the user, includes title & description.
string, max chars=100 The offer headline to display to the end user.
string, max chars=100 The offer content or description. optional, list of option
List of offer options (choices or call-to-action buttons) in this offer.
string, max chars=50 A unique identifier for a specific option within the offer.
string, max chars=50 The text to display on the call-to-action button or link for this option.
enumerated string The processing mode of the option. Possible values: billing_update, checkout, url_redirect, webhook, email. This indicates how the offer option is fulfilled: e.g., a direct billing change, a checkout flow, or a redirect to a URL. Possible values are
billing_updateThe offer fulfillment is processed by ChargebeecheckoutThe offer fulfillment is processed using Chargebee hosted checkouturl_redirectThe offer fulfillment is processed by merchant’s systemwebhookChargebee triggers webhook and fulfillment is processed by merchant’s system
Show all values[+]
enumerated string Indicated the suggested UI flow for checkout type offers. Possible values: in_app or full_page. Possible values are
in_appUse an embedded checkout experience within the current interface.full_pageRedirect the user to a dedicated full-page checkout.
Show all values[+]
string, max chars=250 A URL to which the user should be redirected. Returned only if the offer’s processing type is 'url_redirect'
This is a list of the event types we currently support. We will continue
to add more events moving forward. All events follow a uniform pattern -
<resource>_<event_name>. The resources that will be
present in the event content are provided beneath each event type's
description.
Note: If consolidated invoicing is enabled, the
attributes invoice.subscription_id and
credit_note.subscription_id should not be used
(as it will not be present if the invoice / credit note has lines from
multiple subscriptions). Instead to know the related subscriptions,
their line_items' subscription_id attribute should be referred.
string, max chars=50 A unique and immutable identifier for the personalized offer.
string, max chars=50 ID of the base offer configured. This ID is immutable and always refers to the core offer and its latest published version.
content The offer content to display to the user, includes title & description.
optional, list of option List of offer options (choices or call-to-action buttons) in this offer. This API is used to retrieve a list of personalized offer(s) for a customer based on the context (such as customer or subscription details and end-user attributes). This allows you to retrieve any active offers targeted to the user.
You can pre-call this API as soon as you have the user context at the point of login, or can call this API at any other point in the user journey when an offer is to be shown.
System evaluates eligibility and mapping to the right offer based on:
- Customer profile and subscription information.
- Device and browsing context.
- Custom fields.
- Play configurations.
If no eligible offers are found, the API returns an empty list. (No error is thrown in this case; an empty result is a valid response).
Features of this API The List Personalized Offers endpoint allows you to:
- Retrieve context-aware offers targeted to customers or end users.
- Leverage multiple signals (profile, subscription, device/browser context, custom fields, and plays).
- Call flexibly at login, checkout, renewal, or any point in the user journey.Handle gracefully when no offers are available (returns an empty list, not an error).
- Support both B2C (single user per customer) and B2B (multiple end users per customer) scenarios.
Note: Although the response is modeled as a list, the API currently returns at most one personalized offer (the best-matched offer for the user). If no offers are available, the list will be empty.
This API is not enabled for live sites by default. Please contact
support to get this enabled.
Sample Response [ JSON ]
Show more...
{
"personalized_offers": [
{
"id": "a52ge40b",
"offer_id": "51Ora2PrXz",
"content": {
"title": "<div class=\"slate-p\">Need to take a break?</div>",
"description": "<div class=\"slate-p\">Instead of canceling why don't you pause your plan? We'll be here when you are ready to get started again.</div>"
},
"options": [
{
"id": "af647113-6002-4159-a48a-87f11564963e",
"label": "PAUSE MY PLAN",
"processing_type": "url_redirect",
"redirect_url": "https://mysecurecheckoutflow.com/abcd"
},
{..}
]
},
{..}
],
"brand": {
"id": "1d5QXw39ar",
"name": "SecureCheck"
},
"expires_at": 24134311
}
URL Format
POST
https://{site}.grow.chargebee.com/api/v2/personalized_offers
optional, string, max chars=150 First name of the customer. Will be ignored if not mapped to any field in the settings.
optional, string, max chars=150 Last name of the customer. Will be ignored if not mapped to any field in the settings.
optional, string, max chars=70 Customer’s email address. Will be ignored if not mapped to any field in the settings.
optional, list of string Roles or user types associated with the end user. (Useful in offer targeting for B2B scenarios with multiple user roles.).
optional, string, max chars=50 The unique identifier of the user in the merchant’s system. This is used to identify the user for whom the offer is being created.
optional, string, max chars=50 The unique identifier of the subscription for which the offer should be retrieved.
Notes:
- Required if multiple brands are configured in your Growth application.
- Recommended to always provide.
- If omitted and the customer has multiple subscriptions, the system attempts to retrieve the offer associated with one of their subscriptions.
required, string, max chars=50 The ID of the customer in the billing system (Chargebee customer ID).
optional, jsonobject A JSON object of custom attributes (key-value pairs) that can be used in offer targeting or content (per field mapping configuration). request_context[[0..n]][0..n]
optional, string Parameters for request_context
Parameters for request_context
pass parameters as request_context[<param name>]
optional, string, max chars=255 optional, string, max chars=50 optional, string, max chars=64 optional, string, max chars=250 optional, string, max chars=250
always returned required
Resource object representing personalized_offers
always returned optional
Resource object representing brand
always returned required, timestamp(UTC) in seconds
The timestamp until which the offer remains active. After this time, you must retrieve the offer again via the List Personalised Offers API to get the latest.
Sample admin console URL
https://{site}.chargebee.com/admin-console/personalized_offers/123x