diff --git a/src/pages/docs/flex-discounts/apis.md b/src/pages/docs/flex-discounts/apis.md index 3e4d71520..9edfb7f1a 100644 --- a/src/pages/docs/flex-discounts/apis.md +++ b/src/pages/docs/flex-discounts/apis.md @@ -9,7 +9,9 @@ You can use the following APIs to get details of available flexible discounts an - [Get Order](#get-order) - [Get Order History of a customer](#get-order-history-of-a-customer) - [Preview Renewal](#preview-renewal-with-flexible-discount-code) +- [Preview Switch](#preview-switch) - [Apply flexible discounts when placing manual renewal orders](#apply-flexible-discounts-when-placing-manual-renewal-orders) +- [Apply flexible discount in switch orders](#apply-a-switch-plan-with-flexible-discount) - [Create a subscription with flexible discount](#create-a-scheduled-subscription-with-flexible-discount) - [Get details of a specific subscription](#get-details-of-a-specific-subscription) - [Get details of all subscriptions of a customer](#get-details-of-all-subscriptions-of-a-customer) @@ -247,7 +249,7 @@ See [Headers](../references/api-headers.md) section. "count": 3, "totalCount": 3, "flexDiscounts": [ - { + { "id": "55555555-313b-476c-9d0b-6a610d5b91e0", // STANDARD - Fixed Discount of REUSABLE status "category": "STANDARD", "code": "BLACK_FRIDAY", @@ -311,7 +313,7 @@ See [Headers](../references/api-headers.md) section. "description": "NEW YEAR - 20% off on all Products", "startDate": "2025-12-01T23:59:59Z", "endDate": "2026-12-31T23:59:59Z", - "discountLockEndDate": "2027-03-01T23:59:59Z", + "discountLockEndDate": "2027-03-01T23:59:59Z",       "status": "ACTIVE", "outcomes": [ { @@ -457,7 +459,7 @@ Same as the standard [Create Order](../order-management/create-order.md) request ## Get Order -The [GET Order](../order-management/get-order.md) API response also includes the flexible discount applied to the order. +The [GET Order](../order-management/get-order.md) API response also includes the flexible discount applied to both NEW and SWITCH orders. | Endpoint | Method | |-------------------------------------------------|--------| @@ -517,6 +519,7 @@ None. ], "links": { // As existing response fields } }, + ``` ### HTTP Status Codes @@ -525,7 +528,7 @@ The same as the standard [Get Order API](../order-management/get-order.md). ## Get Order History of a Customer -The `Get Order History` API retrieves past orders for a customer, including any applied flexible discounts. +The `Get Order History` API retrieves past orders for a customer, including any applied flexible discounts. This API fetches details of both NEW and SWITCH orders. | Endpoint | Method | |--------------------------------------|--------| @@ -546,49 +549,33 @@ None. "items": [ { "referenceOrderId": "", - "orderType": "NEW", - "externalReferenceId": "759", - "customerId": "9876543210", - "orderId": "5120008001", + "orderType": "SWITCH", + "externalReferenceId": "a96ee8fe-c440-4d1c-ae5b-a90e1825aef", + "customerId": "1005944528", + "orderId": "123432123", "currencyCode": "USD", - "creationDate": "2019-05-02T22:49:54Z", + "creationDate": "2025-03-17T11:42:29Z", "status": "1000", "lineItems": [ { "extLineItemNumber": 1, - "offerId": "80004567CA01A12", - "quantity": 1, + "offerId": "65304479CA02A12", + "quantity": 15, "status": "1000", "subscriptionId": "", "currencyCode": "USD", "flexDiscounts": [ { "id": "55555555-313b-476c-9d0b-6a610d5b91e0", - "code": "SUMMER_SALE_123", - "result": "SUCCESS" - } - ] - }, - { - "extLineItemNumber": 2, - "offerId": "80004561CA02A12", - "quantity": 11, - "status": "1000", - "subscriptionId": "", - "currencyCode": "USD", - "flexDiscounts": [ - { - "id": "55522355-313b-476c-9d0b-7a710f4h83s4", - "code": "WINTER_SALE_123", + "code": "UPSELL_PROMO_123", "result": "SUCCESS" } ] } - ], - "links": { // As existing response fields } - } - ] - } + ] + } + ] +} ``` ### HTTP Status Codes @@ -742,6 +729,105 @@ Use the `POST /v3/customers//orders` API with the `orderType` as `P } ``` +## Preview Switch + +Use the `POST /v3/customers//orders` API with the `orderType` as `PREVIEW_SWITCH` to manually preview the switch order, including the eligibility of the customer for the flexible discount code included in the request. + +**Request** + +The `flexDiscountCodes` parameter in `lineItems` array can be used to preview the eligibiity of the flexible discount codes to the items being switched, as shown in the following example: + +```json +{ + "orderType": "PREVIEW_SWITCH", + "currencyCode": "USD", + "lineItems": [ + { + "extLineItemNumber": 1, + "offerId": "65322651CA02A12", + "quantity": 15, + "flexDiscountCodes": ["UPSELL_PROMO_123"] + } + ], + "cancellingItems": [ + { + "extLineItemNumber": 1, + "referenceLineItemNumber": 1, + "subscriptionId": "abfb5a4cb14561879af7204c7daee1NA", + "quantity": 15 + } + ] +} +``` + +**Response** + +```json +{ + "referenceOrderId": "", + "externalReferenceId": "a96ee8fe-c440-4d1c-ae5b-a90e1825aef", + "orderId": "", + "customerId": "1005944528", + "currencyCode": "USD", + "orderType": "PREVIEW_SWITCH", + "status": "", + "pricingSummary": [ + { + "totalLineItemPrice": 810.00, + "currencyCode": "USD" + } + ], + "lineItems": [ + { + "extLineItemNumber": 1, + "offerId": "65304479CA02A12", + "quantity": 15, + "subscriptionId": "", + "proratedDays": 90, + "pricing": { + "partnerPrice": 365.00, + "discountedPartnerPrice": 295.65, + "netPartnerPrice": 81.00, + "lineItemPartnerPrice": 730.00 + }, + "flexDiscountCodes": ["UPSELL_PROMO_123"], + "flexDiscounts": [ + { + "id": "55555555-313b-476c-9d0b-6a610d5b91e0", + "code": "UPSELL_PROMO_123", + "result": "SUCCESS" + } + ] + } + ], + "cancellingItems": [ + { + "offerId": "65322651CA02A12", + "quantity": 15, + "subscriptionId": "abfb5a4cb14561879af7204c7daee1NA", + "pricing": { + "partnerPrice": 300.00, + "discountedPartnerPrice": 0.00, + "netPartnerPrice": -300.00, + "lineItemPartnerPrice": 300.00 + }, + "referenceLineItemNumber": 1 + } + ], + "creationDate": "2025-03-17T11:42:29Z" +} +``` + +The response includes `flexDiscounts` at the `lineItems` level, showing applicability details for each code. The following table lists the flexible discount-related parameters in the response: + +| Parameter | Not Null | Data Type | Description | Included in response by default | +|----------------------------------|----------|------------------|---------------------------------------------------------------------------------------------------------------|-------------------------------| +| lineItems[].flexDiscountCodes | No | Array of strings | Flexible discount codes that were applied to the line item. | Yes | +| lineItems[].flexDiscounts | No | Object | Details of the flexible discount applied to the line item. | Yes | +| lineItems[].flexDiscounts[].id | No | String | A unique identifier for the promotion. Used to retrieve or reference a specific flexible discount. | Yes | +| lineItems[].flexDiscounts[].code | No | String | The flexible discount code that was applied to the line item. | Yes | +| lineItems[].flexDiscounts[].result | No | String | Indicates applicability result. SUCCESS means the flexible discount code was applied successfully. | Yes | + ## Apply flexible discounts when placing manual renewal orders You can apply a flexible discount to renewal orders, including late renewals, by specifying flexible discount codes at the line item level in the `Create Order` request. To do this, set `orderType` to `RENEWAL` and include `flexDiscountCodes` for the applicable line items. @@ -803,13 +889,13 @@ The following sample request shows how to apply a flexible discount code to a Cr } ``` -## Apply flexible discounts on subscriptions +## Apply flexible discounts on subscriptions and Switch plan - [Create Scheduled Subscription with flexible discount](#create-a-scheduled-subscription-with-flexible-discount) +- [Apply a switch plan with flexible discount](#apply-a-switch-plan-with-flexible-discount) - [Update Subscription with a flexible discount code](#update-a-subscription-with-flexible-discount-code) - [Remove a flexible discount from a subscription](#remove-a-flexible-discount-from-a-subscription) - ### Create a scheduled subscription with flexible discount You can use the `POST /v3/customers//subscriptions` API with `flexDiscountCodes` in the request to create a subscription for a specific customer. @@ -860,6 +946,83 @@ You can use the `POST /v3/customers//subscriptions` API with `flexD } ``` +### Apply a switch plan with flexible discount + +Use the `Create Order` API with orderType as `SWITCH` to switch from the current order to a new one. API with `flexDiscountCodes` in the request to create a subscription for a specific customer. For more information on Switch Orders, see [Create Switch Order](../order-management/order-scenarios.md#create-switch-order). + +|Endpoint|Method| +|---|--| +|`v3/customers/{customerId}/orders` | `POST`| + +**Request** + +Add `flexDiscountCodes` at the `lineItems` level to apply flexible discount codes to the items being switched. + +```json +{ + "orderType": "SWITCH", + "currencyCode": "USD", + "lineItems": [ + { + "extLineItemNumber": 1, + "offerId": "65322651CA02A12", + "quantity": 15, + "flexDiscountCodes": ["UPSELL_PROMO_123"] + } + ], + "cancellingItems": [ + { + "extLineItemNumber": 1, + "referenceLineItemNumber": 1, + "subscriptionId": "abfb5a4cb14561879af7204c7daee1NA", + "quantity": 15 + } + ] +} +``` + +**Response** + +```json +{ + "referenceOrderId": "", + "externalReferenceId": "a96ee8fe-c440-4d1c-ae5b-a90e1825aef", + "orderId": "123432123", + "customerId": "1005944528", + "currencyCode": "USD", + "orderType": "SWITCH", + "status": "", + "lineItems": [ + { + "extLineItemNumber": 1, + "offerId": "65304479CA02A12", + "quantity": 15, + "subscriptionId": "", + "flexDiscountCodes": ["UPSELL_PROMO_123"], + "flexDiscounts": [ + { + "id": "55555555-313b-476c-9d0b-6a610d5b91e0", + "code": "UPSELL_PROMO_123", + "result": "SUCCESS" + } + ] + } + ], + "cancellingItems": [ + { + "offerId": "65322651CA02A12", + "extLineItemNumber": 1, + "quantity": 15, + "subscriptionId": "abfb5a4cb14561879af7204c7daee1NA", + "referenceLineItemNumber": 1 + } + ], + "creationDate": "2025-03-17T11:42:29Z" +} +``` + +For details on the flexible discount codes parameters in the request, see [Preview Switch](#preview-switch) section. + ### Get details of a specific subscription The `GET /v3/customers//subscriptions/` API response returns the flexible discount applied to the subscription: diff --git a/src/pages/docs/flex-discounts/index.md b/src/pages/docs/flex-discounts/index.md index 7ce423819..e01607c46 100644 --- a/src/pages/docs/flex-discounts/index.md +++ b/src/pages/docs/flex-discounts/index.md @@ -16,13 +16,21 @@ Key advantages of flexible discounts include: - Allows partners to activate discounts within days for timely seasonal discounts like Black Friday. - Allows partners to discover upcoming discounts through the API ahead of their start date, enabling advance preparation of marketing and storefront workflows. -- **Reusable discounts to automatic discount continuity across renewals** +- **Reusable discounts to enable automatic discount continuity across renewals** - - Allows customers to reuse an eligible discount for renewals and seat additions until a configured discount lock end date. - - Ensure customers who take advantage of a reusable discount during its initial offering period (start/end date) can retain that pricing benefit beyond the discount’s end date, smoothing price transitions and reducing churn. + - Allows customers to reuse eligible discounts for renewals and seat additions until a configured discount lock end date. + - Ensures customers who take advantage of a reusable discount during its initial offering period (start/end date) can retain that pricing benefit beyond the discount’s end date, smoothing price transitions and reducing churn. - Customers can review the reusable discount using the Preview Renewal API call. - Eliminates the need for customers to reapply a discount by using Update Subscription when it is already associated with an eligible subscription. +- **Support for mid-term upgrade (upgrade anytime) and seat expansion scenarios:** + + - Supports anytime upgrade paths, including mid-term upgrade discounts (for example, Acrobat Pro for Teams to Acrobat Studio for Enterprise), as well as seat-growth offers. This enables partners to run migration and expansion campaigns through the same flexible discount APIs. + +- **Support for 3-year commitment (3YC) incentives:** + + - Supports offers for customers who are new to 3YC (orders that make them 3YC-compliant) or existing 3YC customers, including cases where minimum purchase quantity (MPQ) thresholds are met. Promotions can be reused and applied to the first term, the current term, or the full 3YC commitment duration + **How reusable and non-reusable discounts work:** In general, promotions and discounts are available only between their configured start and end dates. Reusable discounts extend this model by allowing continued application beyond the original end date, subject to prior use and configuration. @@ -83,14 +91,97 @@ Flexible discounts are available to all VIP Marketplace customers, regardless of Introductory offers apply only to customers who are purchasing a product for the first time. -**For reusable discounts** +### Reusable discount eligibility - If a customer has used a reusable flexible discount before the end date of that flexible discount, the customer can continue to use the same flexible discount until the `discountLockEndDate`, even after the flexible discount’s end date. - When a reusable flexible discount has already been used by a customer in an order that contributes to a subscription, the subscription will have the reusable flexible discount automatically applied during auto-renewal until the `discountLockEndDate`. - To auto-apply the reusable discount to a subscription, customers do not need to explicitly opt in using [Update Subscription](../subscription-management/update-subscription.md). -- However, if a flexible discount is explicitly opted using Update Subscription, that opted flexible discount will take priority, and the automatic application of the reusable discount will not occur. -- If multiple reusable flexible discounts have been used in different orders contributing to the same subscription, the most recently applied reusable flexible discount will be automatically applied in the auto-renewal order. -- To identify whether a flexible discount is reusable, the `discountLockEndDate` field will be present for reusable flexible discounts in the [Get Flexible Discounts](./apis.md#get-flexible-discounts) API response. +- If a flexible discount is explicitly opted using Update Subscription, that opted flexible discount will take precedence, and the automatic application of the reusable discount does not occur. +- If multiple reusable flexible discounts have been used across different orders contributing to the same subscription, the most recently applied reusable flexible discount will be automatically applied in the auto-renewal order. +- To identify whether a flexible discount is reusable, check for the presence of `discountLockEndDate` field in the [Get Flexible Discounts](./apis.md#get-flexible-discounts) API response. + +### 3-year commitment (3YC) eligibility + +Flexible discounts may require the customer to meet 3-year commitment (3YC) criteria. + +- Customer must either be entering a 3YC commitment (new to 3YC) or be compliant with an active 3YC commitment (existing 3YC) +- The qualifying order quantity + existing quantity must meet or exceed the committed minimum purchase quantity (MPQ) +- Certain discounts require the MPQ to be greater than or equal to a configured discount MPQ threshold +- Eligibility may be scoped to: + - First commitment year (from start date to first anniversary) + - Current commitment year (annual eligibility window resets on first use) + - Full commitment term (through the commitment end date) +- Some discounts apply only to non-3YC customers and exclude customers entering or maintaining a 3YC commitment + + +**New to 3YC** + +- Customer must enter into a 3YC commitment on the qualifying order +- Eligible based on configured scope: + - First year only + - Full commitment term +- Reusable within the defined eligibility window, if configured + +**Existing 3YC** + +- Customer must be compliant with an active 3YC commitment +- Eligible based on configured scope: + - Current commitment year (resets annually on first use) + - Remaining commitment term +- Reusable within the defined eligibility window, if configured + +**MPQ threshold-based scenarios** + +- Applies to both new and existing 3YC customers, depending on configuration +- The qualifying order quantity + existing quantity must meet MPQ requirements and the configured MPQ threshold +- Eligibility may be limited to: + - First year + - Current year + - Remaining term + +**Non-3YC customers** + +- Applies only to customers with no active 3YC commitment +- Customers entering or maintaining a 3YC commitment are excluded +- Eligible only within the current subscription term + +**Additional considerations for 3YC-based discounts:** + +- Reusable 3YC discounts may remain eligible after the discount end date, provided the customer continues to meet applicable 3YC criteria and prior usage conditions. +- Reusable 3YC discounts can apply across eligible orders. These discounts are automatically applied during renewal orders but must be explicitly applied for new orders. +- Reusable discounts that were first applied on a switch order are not automatically applied again on subsequent renewal orders. + +Use the `discountLockEndDate` field and Preview Order APIs (for example, Preview Renewal) to confirm discount behavior for a specific customer. + + **Notes:** + +- “New to 3YC” refers to customers entering compliance with a 3YC commitment on the order, not customers adding seats to an existing subscription. +- Customers who recommit after a prior 3YC term has ended are treated as existing 3YC customers, not new. + +### Mid-term upgrade eligibility + +Mid-term upgrade, also known as anytime upgrade, scenarios apply to SWITCH_PLAN or CHANGE_PLAN orders. + +**Upgrade eligibility** + +- Customer may be new to the target product or an existing owner of the target product, depending on configuration + +- Upgrade types: + - Full seat switch (100%) + - Customer must cancel or upgrade all source product seats + - Partial seat switch + - Customer must cancel or upgrade at or above the configured minimum seat percentage + +**3YC considerations for upgrades** + +- Upgrade eligibility may vary based on 3YC status (new, existing, or non-3YC). +- Some upgrade discounts apply only during specific periods, such as the first commitment year. + +**Discount applicability:** + +- Apply only to added or upgraded target product quantities +- Do not apply to cancelled source product quantities +- Can be combined with applicable 3YC eligibility rules ## Partner integration process diff --git a/src/pages/docs/mid-term/apis.md b/src/pages/docs/mid-term/apis.md index 44c14f1b8..4897b6d69 100644 --- a/src/pages/docs/mid-term/apis.md +++ b/src/pages/docs/mid-term/apis.md @@ -60,7 +60,7 @@ This API helps partners enable customers to upgrade their product subscriptions | offer-id | No | Fetches all upgrade paths available for the specified offer. | | subscription-id | No | See description corresponding to `customer-id` | | customer-id | No | If `subscription-id` and `customer-id` query parameters are provided: \
- Partners do not need to pass other fields. \
- By default, the country will be taken from the customer’s country, or from the deployment’s country if the subscription has deployment details unless explicitly overridden by the partner. \
- The customer segment will be same as customer market segment. \
- The language will default to MULT, unless explicitly overridden by the partner by passing the corresponding query parameter. | -| language | Yes | Language for which they want upgrade paths. | +| language | No | Language for which they want upgrade paths. | | limit | No | Specifies the maximum number of records (items) to return in a single response. Default value is 20. | | offset | No | Specifies the starting position in the dataset from which to return results. Default value is 0. | @@ -201,7 +201,7 @@ The newly introduced `Preview Switch` option in the `OrderType` parameter of the |currencyCode | Required | String (Enum) | Currency code for order, must be supported by the partner. | | lineItems | Required | List | Specifies the line items the customer intends to switch. | | lineItems.extLineItemNumber | Required | String | Unique index for line item. | -| lineItems.subscriptionId | Required | String | Indicates which subscription customer is trying to switch. | +| lineItems.subscriptionId | Optional \
This parameter is relevant in the request if an existing subscription for the product exists. | String | Indicates which subscription customer is trying to switch. | | lineItems.offerId | Required | String | Indicates which product customer is switching to | | lineItems.quantity | Required | String | Quantity from subscription to be switched. | | cancellingItems | Required for Switch type Order | List | List of items the customer intends to cancel as part of the switch process. | diff --git a/src/pages/docs/release-notes/upcoming-releases.md b/src/pages/docs/release-notes/upcoming-releases.md index d7ecc3f95..600c72149 100644 --- a/src/pages/docs/release-notes/upcoming-releases.md +++ b/src/pages/docs/release-notes/upcoming-releases.md @@ -1,12 +1,65 @@ # Upcoming releases -## Overlay recommendations are now surfaced to partners +## Flexible discounts for Switch Orders (Mid-term upgrade discounts) -Partners can now view Adobe-identified customer purchase intent through the existing `GET /v3/recommendations` API. When an Adobe agent identifies purchase intent during an overlay interaction, a lead is created and returned in the recommendations response under a new `overlayRecommendations` field. Partners also receive an email notification when a lead is created. +**Expected release:** June 2026 + +Partners can now apply flexible discount codes when customers switch products mid-term using `POST /v3/customers/{customerId}/orders` with `orderType: SWITCH` or `PREVIEW_SWITCH`. This allows promotional pricing to be offered at the point of upgrade, not just at renewal. + +**What changed** + +The following APIs have been updated: + +- Preview Switch Order (`PREVIEW_SWITCH`): Accepts `lineItems[].flexDiscountCodes` in the request. Returns `lineItems[].flexDiscounts` in the response, showing whether each code was successfully applied. +- Create Switch Order (`SWITCH`): Accepts `lineItems[].flexDiscountCodes` in the request. Returns `lineItems[].flexDiscounts` in the response. +- Get Order (`GET /v3/customers/{customerId}/orders/{orderId}`): Returns `lineItems[].flexDiscounts` for `SWITCH` orders, in addition to the existing behavior for other `orderTypes`, including `NEW` orders. +- Get Order History (`GET /v3/customers/{customerId}/orders`): Returns `lineItems[].flexDiscounts` for `SWITCH` orders in the order history list. + +**Important:** `flexDiscountCodes` apply only to `lineItems` (the target product items being switched to). Codes on `cancellingItems` (the source product being cancelled) are not accepted or returned. + +**Why it matters** + + Partners can now incentivize customers to upgrade products during their active subscription term by applying promotional discounts at the time of the switch. Previously, flexible discounts were only available on new orders and renewals. This enables upsell campaigns where discount codes can be offered to customers making mid-term product upgrades. + + **Action required** + +| Action | Details | +|-------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| +| Add `flexDiscountCodes` to switch order requests | Include `lineItems[].flexDiscountCodes` (array of strings) in your `PREVIEW_SWITCH` and `SWITCH` order requests to apply a flexible discount. This field is optional. | +| Check `flexDiscounts[].result` in the response | Verify that `result: "SUCCESS"` is returned for each applied code before confirming the discount to the customer. | +| Update `Get Order` and `Get Order History` API integrations | If your integration reads order details or history for `SWITCH` orders, expect the `lineItems[].flexDiscounts` field to now be present in responses. | +| Use `Preview Switch Order` before placing the order | Call `PREVIEW_SWITCH` first to confirm discount applicability and see the discounted pricing before committing the order. | + +For more information, see [Manage Flexible Discounts](../flex-discounts/index.md). + +## Flexible Discounts for 3-Year Commitments (3YC) + +**Expected release:** June 2026 + +Partners can discover and apply flexible discounts specifically designed for customers who are new to 3YC (orders that make them 3YC-compliant) or existing 3YC customers, including cases where minimum purchase quantity (MPQ) thresholds are met. Promotions can be reused and applied to the first term, the current term, or the full 3YC commitment duration. + +**Why it matters** + +Partners can now present 3YC-specific promotional pricing to eligible customers to incentivize new 3-year commitments or to reward existing 3YC subscribers. This removes the need for manual outreach to identify eligible customers. + +**Action required** + +| Action | Details | +|-------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| +| Discover 3YC promotions through Get Flexible Discounts | Call `GET /v3/flex-discounts`. | +| Apply the discount code on the order | Include the `flexDiscountCodes` in your `NEW` or `RENEWAL` order request. Eligibility is evaluated dynamically. | + +For more information, see [Manage Flexible Discounts](../flex-discounts/index.md). + +## Overlay recommendations are now available to partners + +**Expected release:** June 2026 + +Partners can now view Adobe-identified customer purchase intent through the existing [Fetch Recommendations](../recommendations/apis.md#fetch-recommendations) (`POST /v3/recommendations`) API. When an Adobe agent identifies purchase intent during an overlay interaction, a lead is created and returned in the recommendations response under a new `overlayRecommendations` field. Partners also receive an email notification when a lead is created. **What changed?** -The `GET /v3/recommendations` endpoint now returns an `overlayRecommendations` object alongside the existing `productRecommendations`. This object contains two arrays: +The `POST /v3/recommendations` endpoint now returns an `overlayRecommendations` object alongside the existing `productRecommendations`. This object contains two arrays: - **`new`**: Leads where the customer expressed intent to purchase new products. - **`renew`**: Leads where the customer expressed intent to renew existing subscriptions. @@ -14,3 +67,29 @@ The `GET /v3/recommendations` endpoint now returns an `overlayRecommendations` o Each lead includes `createdAt`, `expiresAt`, `status`, and an `items` array with `offerId` and `quantity`. Leads have a status of `OPEN` until they are consumed during order placement or automatically expired past their `expiresAt` date. For more information, see [Overlay recommenations](../recommendations/index.md#overlay-recommendations). + +## Churn and seat expansion propensity are now surfaced in the Recommendations API + +**Expected release:** June 2026 + +Partners can now see churn risk and seat expansion signals for each customer through the existing [Fetch Recommendations](../recommendations/apis.md#fetch-recommendations) (`POST /v3/recommendations`) API. + +**What changed?** + +The Recommendations API response now includes a `churn` object and a `seatExpansion` object. Each contains a `probability` rating (`HIGH`, `MEDIUM`, or `LOW`), a `refreshDate`, and a `reasons` array with up to seven leading indicators ordered by relevance. Seat expansion also includes `predictedAddonSize` with the expected number of additional seats. + +**Important:** An empty object `{}` for either node means propensity data is not available for that customer. Do not interpret `{}` as LOW risk or LOW expansion potential. + +**Why it matters?** + +Partners can now identify at-risk customers and high-growth opportunities using data-driven signals, rather than relying on anecdotal indicators or waiting for account-manager outreach. + +**Action required** + +| Action | Details | +|---|---| +| Parse the new `churn` and `seatExpansion` nodes | Both appear at the same level as `productRecommendations`. Handle three states: absent (feature not enabled), empty `{}` (data unavailable), and populated (data available). | +| Do not equate `{}` with LOW | An empty object means no data. Treat it as unknown, not low risk. | +| No changes needed for existing fields | `productRecommendations` and `overlayRecommendations` are unchanged. Existing integrations continue to work without modification. | + +For more information, see [Propensity Intelligence](../recommendations/index.md). diff --git a/src/pages/sandbox/sandbox-portal/flex-discounts/index.md b/src/pages/sandbox/sandbox-portal/flex-discounts/index.md index 374db2f62..9f295fc45 100644 --- a/src/pages/sandbox/sandbox-portal/flex-discounts/index.md +++ b/src/pages/sandbox/sandbox-portal/flex-discounts/index.md @@ -10,6 +10,7 @@ You can explore and test the Flexible Discounts feature in the Sandbox environme - [Edit reusable flexible discounts](#edit-reusable-flexible-discounts) - [View flexible discounts applied to an Order](#view-flexible-discounts-applied-to-an-order) - [View flexible discounts applied to a subscription](#view-flexible-discounts-applied-to-a-subscription) +- [Flexible discounts for 3YC customers](#) ### View the available flexible discounts @@ -100,3 +101,9 @@ Points to note: - If no flexible discount is applied for renewal, the FlexDiscountCode field remains empty. For example: ![Flex Discount details in Subscription details](../image/flex_subscription.png) + +## Flexible discounts for 3YC and mid-term upgrades + +You can test 3YC and mid-term upgrade (also known as anytime upgrade) discounts in Sandbox. Unlike the discounts that were originally on the sandbox that always succeed or always fail, these discounts will have slight validations associated with them to ensure you are integrating with the new criteria correctly. + +Read more about the [3YC eligibility critera](../../../docs/flex-discounts/index.md#3-year-commitment-3yc-eligibility) and [mid-term eligibility criteria](../../../docs/flex-discounts/index.md#mid-term-upgrade-eligibility). diff --git a/src/pages/technical-assets/index.md b/src/pages/technical-assets/index.md index bc37a1df2..2612c9a5a 100644 --- a/src/pages/technical-assets/index.md +++ b/src/pages/technical-assets/index.md @@ -8,7 +8,7 @@ description: Includes documentation, sample price list and reconciliation files, | For | Go to | |---------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Documentation for generating OAuth credentials in CPAPI | [Adobe Commerce Partner API Credential Generation OAuth](https://developer.adobe.com/developer-console/docs/guides/authentication/ServerToServerAuthentication/implementation/#generating-access-tokens-using-standard-oauth2-libraries) | -| Sandbox Three Year Commit documentation | [CPAPI Three Year Commit Sandbox documentation](https://developer-stage.adobe.com/vipmp/documents/developer-documentation/CPAPI%20Three%20Year%20Commit%20Sandbox%20Documentation.pdf) | +| Sandbox Three Year Commit documentation | [CPAPI Three Year Commit Sandbox documentation](../sandbox/sandbox-portal/3yc-management/index.md) | | Sandbox User Guide | [Sandbox User Guide](../sandbox/index.md) | | Sandbox documentation to enable global sales | [Worldwide Sandbox documentation](../sandbox/sandbox-portal/customer-management/update-customer.md) |