diff --git a/src/pages/contributors.json b/src/pages/contributors.json index 8a88859b8..8c4732c1e 100644 --- a/src/pages/contributors.json +++ b/src/pages/contributors.json @@ -209,7 +209,7 @@ "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "10/8/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/customer-account/update-customer-account", @@ -220,8 +220,10 @@ }, { "page": "/docs/deployment-management/", - "avatars": [], - "lastUpdated": "2/6/2026" + "avatars": [ + "https://avatars.githubusercontent.com/u/160894503?v=4" + ], + "lastUpdated": "10/23/2026" }, { "page": "/docs/deployment-management/create-deployment", @@ -336,7 +338,7 @@ "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "10/12/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/market-segments/", @@ -350,7 +352,7 @@ "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "6/24/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/mid-term/apis", @@ -417,7 +419,7 @@ "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "10/7/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/order-management/get-order", @@ -439,7 +441,7 @@ "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "10/7/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/order-management/update-order", @@ -512,7 +514,7 @@ "https://avatars.githubusercontent.com/u/115529590?v=4", "https://avatars.githubusercontent.com/u/719818?v=4" ], - "lastUpdated": "10/7/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/references/status-codes", @@ -551,7 +553,7 @@ "https://avatars.githubusercontent.com/u/160894503?v=4", "https://avatars.githubusercontent.com/u/115529590?v=4" ], - "lastUpdated": "10/12/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/renewals/auto-renewals", @@ -559,7 +561,7 @@ "https://avatars.githubusercontent.com/u/160894503?v=4", "https://avatars.githubusercontent.com/u/115529590?v=4" ], - "lastUpdated": "3/19/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/renewals/error-codes", @@ -574,7 +576,7 @@ "https://avatars.githubusercontent.com/u/160894503?v=4", "https://avatars.githubusercontent.com/u/115529590?v=4" ], - "lastUpdated": "10/7/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/renewals/overview", @@ -656,7 +658,7 @@ "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "4/21/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/subscription-management/create-subscription", @@ -677,14 +679,14 @@ "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "3/6/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/subscription-management/update-subscription", "avatars": [ "https://avatars.githubusercontent.com/u/160894503?v=4" ], - "lastUpdated": "10/7/2026" + "lastUpdated": "10/23/2026" }, { "page": "/docs/support", diff --git a/src/pages/docs/customer-account/three-year-commit.md b/src/pages/docs/customer-account/three-year-commit.md index 30b0c605a..1f5bff5a2 100644 --- a/src/pages/docs/customer-account/three-year-commit.md +++ b/src/pages/docs/customer-account/three-year-commit.md @@ -99,6 +99,12 @@ The diagram illustrates the decision-making process for determining partner pric The flow ensures accurate pricing by considering factors such as customer type, offer matches, and applicable discounts before arriving at the final price charged by Adobe. +### Country-specific prices and currency changes + +A 3YC commitment accepted before a country’s pricing cutover retains the regional price list based on the customer’s partner price lock date and remains in the original currency until the commitment ends. A 3YC commitment accepted on or after the cutover uses the country-specific price list available at the time of acceptance. + +For countries transitioning to a new currency, customers with a 3YC commitment accepted before the cutover cannot place orders in the new currency while the commitment is active. They can continue to early renew in USD, subject to existing eligibility restrictions. To transition to the new currency before the commitment ends, contact support to terminate the existing 3YC commitment. See [Local currency support](../manage-pricing/index.md#preserve-commitment-pricing-and-currency). + ## Commitment request considerations - Discount levels are updated whenever the commitment status changes, such as when a new commitment is made or an existing one expires. diff --git a/src/pages/docs/deployment-management/index.md b/src/pages/docs/deployment-management/index.md index 54def26b4..4fede0215 100644 --- a/src/pages/docs/deployment-management/index.md +++ b/src/pages/docs/deployment-management/index.md @@ -2,6 +2,8 @@ For a global customer to purchase offers outside their home country, they must create and use deployment resources. If a partner is enabled for international sales, they can enable customers for global sales. Once a customer has been enabled for global sales, they can create deployments with addresses outside of the customer’s country. These deployments can then be used to place orders for offers and currencies that do not correspond to the customer’s address. +Global customers follow the [local currency cutover rules](../manage-pricing/index.md#local-currency-support) for the country associated with each deployment. During a currency change, renewal consolidation applies only to subscriptions with the same deployment and SKU. Subscriptions across different deployments are not consolidated, even when they have the same SKU. Continue to use `deploymentId` for deployment-specific requests. + Use the following APIs to manage your deployments: - [Create deployment](create-deployment.md) diff --git a/src/pages/docs/manage-pricing/index.md b/src/pages/docs/manage-pricing/index.md index 1339240bd..25594139a 100644 --- a/src/pages/docs/manage-pricing/index.md +++ b/src/pages/docs/manage-pricing/index.md @@ -16,7 +16,7 @@ Partners can leverage the `Fetch Price List` API to retrieve up-to-date pricing - **Country-specific pricing support** - Partners can retrieve country-specific price lists by passing a supported country code in `region`, enabling accurate quoting where country-specific price lists are available. This feature introduces country-specific USD pricing without changing the currency. + Partners can retrieve country-specific price lists for accurate quoting. Depending on the `country`, the price list uses USD or a local currency. See [Local currency support](#local-currency-support) for pricing, subscription, and renewal behavior. ## Fetch Price List API @@ -134,10 +134,10 @@ A sample request is as follows: | **Field**                        | **Required** | **Type**           | **Description** | |----------------------------------|--------------|--------------------|-----------------| -| `region` | Yes | String (Enum) | Specifies the region or country for which the Price List should be returned. The value must be supported for the Partner. \
- Supported regional codes: `AP`, `WE`, `LA`, `EE`, `PA`, `NA`. \
- Supported country codes: `JP`, `CN`, `MX`, `KR`, `TR`, `BR`, `IN`, for country-specific USD pricing. See [Local currencies support](#local-currency-support). | +| `region` | Yes | String (Enum) | Specifies the region or country for which the Price List should be returned. The value must be supported for the Partner. \
- Supported regional codes: `AP`, `WE`, `LA`, `EE`, `PA`, `NA`. \
- Supported country codes: `JP`, `CN`, `MX`, `KR`, `TR`, `BR`, `IN`, `CA`. See [Local currency support](#local-currency-support) for country-specific pricing and currencies. | | `marketSegment`                  | Yes          | String (Enum)      | Specifies the market segment. Must be one of the supported segments, such as: \
- COM \
- EDU \
- GOV. | | `priceListType`                   | No           | String (Enum)      | Indicates the price list type. Possible values: \
- STANDARD \
- 3YC \
- STD-LGA (Standard Price List for Large Government Agencies)| -| `currency`                       | Yes          | String (Enum)      | Specifies the currency. Must be one of the supported currencies for the Partner. \
Possible Values: AUD, EUR, GBP, JPY, USD. | +| `currency`                       | Yes          | String (Enum)      | Specifies the currency. Must be one of the supported currencies for the Partner and applicable price list. \
Possible Values: AUD, CAD, EUR, GBP, JPY, MXN, USD. | | `priceListMonth`                | Yes          | String             | Specifies the month you want the Price List for, in `YYYYMM` format. Example: `202410`. | | `filters`                        | No           | Object             | Filters to narrow down the Price List. All filters use AND logic. For example, if `offerId` and `productFamily` filters are included in the request, then the API response will include results that match `offerId` AND `productFamily` | | `filters → offerId`             | No           | String             | Returns only offers matching the specified `offerId`. | @@ -250,7 +250,7 @@ A sample response is as follows: | `priceListMonth` | Yes | String | Price List published month | | `marketSegment` | Yes | String (Enum) | Market segment applicable for the offers included in the response. Possible values: \
- COM \
- EDU \
- GOV | | `region` | Yes | String (Enum) | For regional price list requests, the region where the offer is sold. \
Possible values: \
- NA \
- PA \
- EE \
- MX \
- LA \
- WE \
- JP \
- AP | -| `currency` | Yes | String (Enum) | Currency applicable for the market segment and region. \
Possible Values: \
- AUD \
- EUR \
- GBP \
- JPY \
- USD | +| `currency` | Yes | String (Enum) | Currency applicable for the market segment and region or country. Must be supported for the partner and applicable price list. \
Possible Values: \
- AUD \
- CAD \
- EUR \
- GBP \
- JPY \
- MXN \
- USD | | `priceListType` | Yes | String (Enum) | The price list type. \
Possible values:\
- STANDARD \
- 3YC \
- STD-LGA (Standard Price List for Large Government Agencies) | | `totalCount` | Yes | Integer | Indicates the total items matched as per the search criteria. | | `count` | Yes | Integer | Indicates the total number of offers returned in the response. | @@ -300,15 +300,26 @@ For the complete set of error codes, see [Status codes and error handling](../re ## Local currency support -For supported countries, partners can retrieve country-specific USD price lists in addition to regional price lists. Local currencies support is available for South Korea (KR), Türkiye (TR), Brazil (BR), and India (IN). These countries move from regional to country-specific pricing on the cutover date. A cutover is the date on which the country-specific USD price list becomes available and takes effect. For South Korea, Türkiye, Brazil, and India, the cutover date is December 1, 2026. The currency remains USD. +Local currency support provides country-specific prices and, where applicable, a change in subscription currency. A country's cutover is the date on which its country-specific pricing and applicable currency take effect. + +| Country | Currency after cutover | What changes | +|---|---|---| +| South Korea (`KR`), Türkiye (`TR`), Brazil (`BR`), India (`IN`) | USD | Country-specific prices replace regional USD prices. The currency does not change. | +| Canada (`CA`) | CAD | Country-specific CAD prices apply, with subscriptions moving from USD to CAD as described below. | +| Mexico (`MX`) | MXN | Country-specific MXN prices apply, with subscriptions moving from USD to MXN as described below. | + +**Important:** + +- Local currency support will be rolled out in phases. The first phase, planned for November 2026, introduces country-specific pricing in USD. The second phase, planned for December 2026, introduces CAD for Canada and MXN for Mexico. +- The December 1, 2026 cutover date applies to South Korea, Türkiye, Brazil, and India only; it is not a CAD or MXN cutover date. Use the applicable country's cutover when planning orders and renewals. ### Request country-specific prices -Use the required `region` request parameter in `POST /v3/pricelist` for either regional or country-specific prices. Supply a supported regional code (`AP`, `WE`, `LA`, `EE`, `PA`, or `NA`) for regional pricing, or a supported country code (`JP`, `CN`, `MX`, `KR`, `TR`, `BR`, or `IN`) for country-specific USD pricing. +Use `POST /v3/pricelist` to retrieve country-specific prices. Use `USD` for `KR`, `TR`, `BR`, and `IN`, `CAD` for `CA`, and `MXN` for `MX`. See [Request parameters](#request-parameters) for supported request fields and region and country codes. -For the same offer, currency, and price list month, a country-specific price can differ from the regional price. Use the applicable country-specific list for quoting after cutover, subject to the 3YC partner price locks described below. +Country-specific prices can differ from regional prices for the same offer, currency, and price list month. After cutover, use country-specific pricing, subject to existing 3YC partner price locks. -Each offer's `firstOrderDate` indicates when its country-specific price applies to orders. The following request illustrates a country-specific lookup for Türkiye with `region` set to `TR`. The month and offer ID are illustrative values, not a cutover date or a guarantee of offer availability. +Each offer's `firstOrderDate` indicates when its country-specific price applies. The following example retrieves a price for `Türkiye`. The month and offer ID are illustrative. ```json { @@ -323,14 +334,91 @@ Each offer's `firstOrderDate` indicates when its country-specific price applies } ``` -Supply the applicable regional code in `region` to request the regional price list, including when retrieving historical regional pricing for a 3YC commitment accepted before cutover. For example, `region` set to `NA` requests North American regional pricing. +To retrieve regional pricing, including historical pricing for a 3YC commitment accepted before cutover, specify the applicable regional code in `region`, such as `NA` for North America. -### Pricing at cutover to local currency +### Quote and place orders at cutover | Scenario | Pricing behavior | |---|---| -| New orders, renewals, early renewals, mid-term license additions, and `SWITCH_PLAN` on or after cutover | Use the country-specific USD price list, subject to the existing 3YC partner price lock described below. Mid-term purchases continue to modify the existing subscription. | -| 3YC commitment accepted before cutover | Retain the regional price list at the customer's partner price lock date until the commitment ends. Do not replace this locked price with the country-specific price. | -| 3YC commitment accepted on or after cutover | Lock to the country-specific USD price list at the commitment acceptance date. | +| New orders, renewals, early renewals, mid-term seat additions, and `SWITCH_PLAN` on or after cutover | Use country-specific pricing and currency after cutover, subject to commitment exceptions. If the currency changes, create a new-currency subscription instead of adding seats to the old-currency subscription. | +| 3YC commitment accepted before cutover | Retain the regional price list from the partner price lock date and the original currency until the commitment ends. | +| 3YC commitment accepted on or after cutover | Lock to the country-specific price list at the commitment acceptance date. | | Early renewal placed before cutover | Retain regional pricing. | -| Returns and plan reverts | Use the original order price, not the price currently available in the country-specific list. | +| Returns and switch reverts | Use the original order price and currency. Existing eligibility rules still apply. | + +For order requests, send the applicable `currencyCode` on each line item as described in [Create order](../order-management/create-order.md). + +### Track subscriptions when the currency changes + +Subscriptions are uniquely identified by SKU and currency. For Canada and Mexico, subscriptions transition from USD to the applicable local currency, CAD and MXN, as follows: + +- New orders after cutover create subscriptions in CAD or MXN. +- At the next eligible anniversary renewal, the subscription renews in the new currency. If a subscription in that currency does not exist, a new one is created. +- Auto-renewal is disabled for the old-currency subscription, which remains active until it expires. +- Active 3YC and High Growth Offer, or HGO, commitments remain in the old currency until the commitment ends. +- Scheduled subscriptions migrate with the active subscription. + +During the transition, two active subscriptions can exist for the same SKU. When tracking these subscriptions: + +- Retain both subscription IDs and their currencyCode values. +- Do not treat the new subscription as a duplicate. +- Do not overwrite the history of the old subscription. + +Currency changes also apply to global customers. Renewal consolidation applies only to subscriptions with the same deployment and SKU, not to all subscriptions for that SKU across countries. Continue to use `deploymentId` for deployment-specific orders. See[Manage deployments](../deployment-management/index.md). + +Use [Get details of a customer's subscriptions](../subscription-management/get-details-for-customers.md) to track the separate records and [Manage auto-renewals](../renewals/auto-renewals.md#renewals-when-the-country-currency-changes) to calculate the combined renewal quantity. + +At the anniversary date, subscriptions for the same deployment and SKU are consolidated into one renewal order in the new currency. Preview Renewal shows the combined renewal quantity. The renewal quantity is calculated as follows: + +- For each subscription, use renewalQuantity as the target quantity. If renewalQuantity is null, use currentQuantity. +- Subtract any quantity already early renewed from each subscription's target quantity. +- Add the remaining quantities from the old-currency and new-currency subscriptions to determine the final renewal quantity. +- If part of a subscription has been renewed early, the early-renewed quantity remains in the existing subscription until the next commitment. At the anniversary date, the remaining quantity is migrated to the new-currency subscription. + +For example, if the USD subscription has a target of 100 licenses and 40 were already early renewed, and the CAD subscription has a target of 20 with no early renewals, the anniversary renewal is for 80 licenses in CAD: + +```json +(100 - 40) + (20 - 0) = 80 +``` + +When the subscriptions are consolidated: + +- `renewalQuantity` is combined across both subscriptions. Either subscription can be updated before the anniversary date. +- The `autoRenewable` setting from the new-currency subscription applies. +- `flexDiscountCodes` are carried over. +- The Renewal / MOQ code is carried over. + +### Handle old-currency order rejections + +After a country changes currency, new orders, order previews, manual renewals, early renewals, and seat additions in the old currency are rejected with `CURRENCY_NOT_ACTIVE_FOR_COUNTRY` (HTTP 422), subject to the commitment exceptions. + +For eligible customers: + +- Place a new order in the new currency instead of adding licenses to the old-currency subscription. +- Do not attempt to migrate an old subscription by changing the currency in a request that still references that subscription. +- For early renewals, specify the new currency without the old `subscriptionId`. +- Do not reference the old USD subscription, even if the request specifies `CAD` or `MXN`. +- The new-currency subscription runs until the next anniversary date. + +See [Early renewal after a currency change](../renewals/manual-renewals.md#early-renewal-after-a-currency-change) for the request rules. + +### Preserve commitment pricing and currency + +Existing commitments have the following exceptions: + +- **3YC accepted before cutover:** Retains the existing price list and currency until the commitment ends. Orders cannot be placed in the new currency during the commitment. +- **3YC early renewal:** Active 3YC customers can continue to early renew in USD, subject to existing eligibility rules. +- **Early currency transition:** To move a customer to the new currency before the 3YC commitment ends, contact support to terminate the 3YC first. +- **HGO commitments:** Remain in the old currency until the commitment ends. +- **HGO subscriptions:** Remain ineligible for `SWITCH_PLAN`. + +### Switch plans and process returns + +For switch plans, returns, and reverts: + +- An eligible `SWITCH_PLAN` across currencies uses the destination currency for the entire transaction. +- Returns retain the original order price and currency. +- Switch reverts retain the original order price and currency. +- Existing product, commitment, return-window, and switch-eligibility restrictions continue to apply. + +See [Mid-term upgrades](../mid-term/index.md). diff --git a/src/pages/docs/mid-term/index.md b/src/pages/docs/mid-term/index.md index f439615cd..7a47ef392 100644 --- a/src/pages/docs/mid-term/index.md +++ b/src/pages/docs/mid-term/index.md @@ -49,6 +49,12 @@ The following limitations are present in this release: - **Complex upgrades excluded**: Combining multiple single apps into All Apps is not supported due to complexity in license mapping and pricing. - **Partial upgrade restrictions**: Certain partial upgrades may be limited based on product eligibility or financial viability. Subscriptions tagged as high-growth offers or specific global customer products are excluded from switch eligibility. +## Pricing when the country currency changes + +After a currency cutover, an eligible `SWITCH_PLAN` from the previous currency to the new currency is priced entirely in the new currency. For example, this applies to transitions from USD to CAD in Canada and from USD to MXN in Mexico. Returns and switch reverts retain the original order's pricing and currency. + +Currency changes do not expand switch eligibility. HGO subscriptions remain ineligible, and existing product and global customer restrictions continue to apply. See [Local currency support](../manage-pricing/index.md#local-currency-support) for country-specific prices and commitment exceptions. + ## Mid-term upgrade process The following figure illustrates the upgrade process: diff --git a/src/pages/docs/order-management/create-order.md b/src/pages/docs/order-management/create-order.md index 9bc248f3e..8f50ef615 100644 --- a/src/pages/docs/order-management/create-order.md +++ b/src/pages/docs/order-management/create-order.md @@ -9,9 +9,10 @@ Ensure that you are aware of the following before creating an order: - `orderType` is required in the Create Order request. - Possible values are: NEW, RETURN, PREVIEW, PREVIEW_RENEWAL, or RENEWAL - See [Order Scenarios](./order-scenarios.md) for request and response samples for each order type. -- `subscriptionId` is mandatory in lineItems for: +- For renewal of an existing subscription, `subscriptionId` is mandatory in lineItems for: - `orderType` RENEWAL - `orderType` PREVIEW_RENEWAL if lineItems are present + - Exception: an eligible [early renewal after a currency change](../renewals/manual-renewals.md#early-renewal-after-a-currency-change) must use the new currency without the old subscription ID. - `referenceOrderId` is required for RETURN orders and should not be included for other order types. - For `RETURN` orders that reference a `NEW` or `RENEWAL` order, you can now return a quantity that is less than the original line item quantity, within 14 days of the original order. The requested quantity is validated against the line item’s current `remainingQuantity` value on the original order. See [Return or cancellation of order](order-scenarios.md#return-or-cancellation-of-order) for details on eligibility, exclusions, and error codes. - `currencyCode` should now be sent at the lineItem level instead of the order level. @@ -21,6 +22,14 @@ Ensure that you are aware of the following before creating an order: - Do not send an Adobe Instant Deal Registration code or ID. Adobe evaluates eligible line items automatically, independently of whether `flexDiscountCodes` is present. - When `fetch-price=true`, a qualifying response line item includes `earnedDealRegPerUnit` and `earnedDealRegAmount` in `pricing`, and `pricingSummary` includes `totalEarnedDealRegAmount`. These deal registration amounts remain separate from existing partner-price fields. +## Orders after a country currency change + +After a country transitions to a new currency, eligible customers place new orders and purchase additional seats in the new currency. These orders create new subscriptions in the new currency rather than adding licenses to existing subscriptions in the previous currency. For example, this applies when Canada transitions from USD to CAD or Mexico transitions from USD to MXN. + +API requests for new orders, previews, manual renewals, early renewals, and license additions using the previous currency return `CURRENCY_NOT_ACTIVE_FOR_COUNTRY` with HTTP 422, subject to commitment exceptions. + +Pre-cutover 3YC commitments retain their existing price list and currency until the commitment ends. Customers with an active pre-cutover 3YC commitment cannot place orders in the new currency during the commitment period. Returns and switch reverts retain the pricing and currency of the original order. See [Local currency support](../manage-pricing/index.md#local-currency-support) for the complete lifecycle and commitment rules. + ## Request header | Parameter | Description | @@ -104,3 +113,4 @@ Order resource without read-only fields: | 401 | Invalid Authorization token | | 403 | Invalid API Key | | 404 | Invalid customer ID | +| 422 | Currency not active for the country | diff --git a/src/pages/docs/order-management/order-scenarios.md b/src/pages/docs/order-management/order-scenarios.md index 133e74e05..2e7887c9c 100644 --- a/src/pages/docs/order-management/order-scenarios.md +++ b/src/pages/docs/order-management/order-scenarios.md @@ -530,6 +530,8 @@ A few of the benefits of previewing a renewal order include: - `proratedDays` in the response indicates the number of days for which the order will be invoiced. This applies in the case of mid-term purchases. - Adobe Instant Deal Registration follows the same response behavior described for [Preview Order](#preview-an-order), including line-item application status and separate deal registration amounts when `fetch-price=true`. +When a country's currency changes, Preview Renewal shows the consolidated new-currency quantity for eligible old- and new-currency subscriptions of the same deployment and SKU, after deducting quantities already early renewed. See [Combined renewal quantities](../renewals/auto-renewals.md#calculate-the-combined-renewal-quantity). For a selected early renewal in the new currency, follow the [exception that omits the old subscription ID](../renewals/manual-renewals.md#early-renewal-after-a-currency-change). Existing multi-currency preview pricing restrictions still apply. + ### Sample request **Request URL:** `/v3/customers/{customer-id}/orders?fetch-price=true` @@ -705,9 +707,9 @@ OR **Notes:** -- RENEWAL order type is used for late renewals, which are initiated after the anniversary date. -- Subscription ID is required in the request line item. -- The license quantities must be less than or equal to the customer’s current subscription quantities. +- RENEWAL order type supports [early and late manual renewals](../renewals/manual-renewals.md). The example below shows a late renewal. +- For late renewal of an existing subscription, Subscription ID is required in the request line item. Eligible [early renewals after a currency change](../renewals/manual-renewals.md#early-renewal-after-a-currency-change) use the new currency without the old subscription ID. +- For late renewals, the license quantities must be less than or equal to the customer’s current subscription quantities. - Order ID is created by this service and returned synchronously. - Partner Marketplaces are expected to check the status of the order for success. - You can select the expired subscriptions for manual renewal by using the [Get All Subscriptions for a Customer](../subscription-management/get-details-for-customers.md) API. Subscriptions that can be selected for manual renewal are indicated by the `allowedActions`": `["MANUAL_RENEWAL"]` parameter of the Get All Subscriptions of a Customer API response. @@ -764,6 +766,7 @@ OR | 401 | Invalid Authorization token | | 403 | Invalid API Key | | 404 | Invalid customer ID | +| 422 | Currency not active for the country; see [Local currency support](../manage-pricing/index.md#handle-old-currency-order-rejections) | ## Assumptions diff --git a/src/pages/docs/references/resources.md b/src/pages/docs/references/resources.md index cee5abc4c..c6b37a014 100644 --- a/src/pages/docs/references/resources.md +++ b/src/pages/docs/references/resources.md @@ -89,7 +89,7 @@ Please see the Validations/Regular Expressions section for any regular expressio | priceListMonth | Yes | String | Price List published month | | marketSegment | Yes | String (Enum) | Market segment applicable for the offers included in the response. Possible values: \
- COM \
- EDU \
- GOV | | region | Yes | String (Enum) | Region where offer is sold. \
Possible values: \
- NA \
- PA \
- EE \
- MX \
- LA \
- WE \
- JP \
- AP | -| currency | Yes | String (Enum) | Currency applicable for the market segment and region. \
Possible Values: \
- AUD \
- EUR \
- GBP \
- JPY \
- USD | +| currency | Yes | String (Enum) | Currency applicable for the market segment and region or country. Must be supported for the partner and applicable price list. \
Possible Values: \
- AUD \
- CAD \
- EUR \
- GBP \
- JPY \
- MXN \
- USD | | discountType | Yes | String (Enum) | The volume discount type applicable for the offers included in the response. \
Possible values:\
- STANDARD \
- 3YC | | totalCount | Yes | Integer | Indicates the total items matched as per the search criteria. | | count | Yes | Integer | Indicates the total number of offers returned in the response. | @@ -241,6 +241,7 @@ Please see the Validations/Regular Expressions section for any regular expressio |Property | Type | Description | Range/Limits| |:----|:----|:----|:----| |subscriptionId (read only)| String | Unique identifier of the subscription resource | Max: 40 characters| +|currencyCode (read only)| String | Subscription currency in ISO 4217 format. Track this with the subscription ID during a [country currency change](../manage-pricing/index.md#track-subscriptions-when-the-currency-changes). | 3 characters| |currentQuantity (read only)| integer | Total quantity of the subscription that a customer has |Max: 10,000 for Team \
599,000 for Enterprise| |usedQuantity | integer | Total used quantity for the license or the consumable| | |offerId | String | The base discount level offer id. \
**Note:** This attribute is included for developers to identify the offer and NOT the discount level. Partners need to use “Get customer Account” and “Get Order history” APIs to see discount level information.| | diff --git a/src/pages/docs/release-notes/upcoming-releases.md b/src/pages/docs/release-notes/upcoming-releases.md index 6c6de19c2..b1eda5250 100644 --- a/src/pages/docs/release-notes/upcoming-releases.md +++ b/src/pages/docs/release-notes/upcoming-releases.md @@ -1,27 +1,43 @@ # Upcoming releases -## Local currency support: Country-specific USD pricing +**Note:** This is the initial version of the documentation, published early to provide partners with visibility into upcoming changes. The documentation will be updated as additional details become available. The expected release dates are indicative only and may change. + +## Local currency support **Expected release:** November 2026 -Local currencies support introduces country-specific USD price lists for South Korea (`KR`), Türkiye (`TR`), Brazil (`BR`), and India (`IN`) through the existing [Fetch Price List](../manage-pricing/index.md) API. These countries move from regional to country-specific pricing at cutover. A cutover is the date on which the country-specific USD price list becomes available and takes effect. For South Korea, Türkiye, Brazil, and India, the cutover date is December 1, 2026. The currency remains USD. +Local currency support introduces country-specific price lists through the existing [Fetch Price List](../manage-pricing/index.md) API. The pricing and currency rules for each country take effect on its cutover date. The cutover date is the date on which the country-specific price list becomes available and takes effect. + +| Country | Currency after cutover | What changes | +|---|---|---| +| South Korea (`KR`), Türkiye (`TR`), Brazil (`BR`), India (`IN`) | USD | Country-specific prices replace regional USD prices. The currency does not change. | +| Canada (`CA`) | CAD | Country-specific CAD prices apply, with subscriptions moving from USD to CAD. | +| Mexico (`MX`) | MXN | Country-specific MXN prices apply, with subscriptions moving from USD to MXN. | + +**Important:** Local currency support will be rolled out in phases. The first phase introduces country-specific pricing in USD. The second phase introduces CAD for Canada and MXN for Mexico. Follow official communications from Adobe for information about the releases. **What changed?** -- The existing `region` parameter in `POST /v3/pricelist` accepts a supported regional code for regional pricing or a supported country code (`KR`, `TR`, `BR`, or `IN`) for country-specific USD pricing. -- Country-specific prices can differ from regional prices for the same offer, currency, and price list month. Each offer's `firstOrderDate` indicates when its country-specific price applies to orders. -- Pricing after cutover follows the country-specific list, subject to existing 3YC price locks and the exceptions described in the pricing guide. +- Country-specific prices can differ from regional prices for the same offer, currency, and price list month. Each offer's `firstOrderDate` for each order indicates when the country-specific price takes effect for orders. +- New orders use the applicable country-specific price list and currency, subject to commitment exceptions. Existing subscriptions transition to the new currency at anniversary renewal, while active 3YC and HGO commitments retain the existing currency until the commitment ends. +- Subscriptions in both the old and new currencies can remain active for the same SKU. At renewal, eligible quantities from the old-currency subscription are consolidated into the new-currency subscription, excluding quantities that were renewed early. Partners can disable auto-renewal for the old-currency subscription to prevent consolidation. +- Existing flexible discount codes are carried over during consolidation. +- API requests to create orders or previews using the old currency are rejected after the currency change, subject to commitment exceptions. +- Eligible early renewals in the new currency cannot reference an old-currency subscription. **Why it matters** -Partners can retrieve the applicable country-specific prices for accurate quoting while retaining regional pricing. +Partners can quote country-specific prices and manage currency transitions without losing subscription history or counting early-renewed seats twice. **Action required** | Action | Details | |---|---| -| Request the applicable price list | Set `region` to `KR`, `TR`, `BR`, or `IN` for country-specific USD pricing, or to the applicable supported regional code for regional pricing. | -| Review pricing at cutover | Account for 3YC price locks, early renewals placed before cutover, and original-order pricing for returns and plan reverts. | +| Request the applicable price list | Retrieve country-specific prices in the applicable currency. See the [pricing guide](../manage-pricing/index.md#request-country-specific-prices) for request details. | +| Track both subscriptions | Retain subscription IDs and currencies, and support two active subscriptions for the same SKU during the transition. | +| Review renewal quantities | Use [Preview Renewal](../order-management/order-scenarios.md#preview-renewal-orders) and review the [combined renewal rules](../renewals/auto-renewals.md#renewals-when-the-country-currency-changes). | +| Update order handling | Handle HTTP 422 currency rejections and the [exception for early renewals in the new currency](../renewals/manual-renewals.md#early-renewal-after-a-currency-change). | +| Preserve pricing exceptions | Retain commitment price locks, early renewals placed before cutover, and the original order's pricing and currency for returns and switch reverts. | For more information, see [Local currency support](../manage-pricing/index.md#local-currency-support). diff --git a/src/pages/docs/renewals/auto-renewals.md b/src/pages/docs/renewals/auto-renewals.md index e4a1b79e1..cbbe4e23f 100644 --- a/src/pages/docs/renewals/auto-renewals.md +++ b/src/pages/docs/renewals/auto-renewals.md @@ -18,6 +18,26 @@ Auto‑renewal process outcomes: - Expire the subscription if auto‑renew is turned off. - Update the subscription attributes even when all seats were already early renewed. +## Renewals when the country currency changes + +After a country transitions to a new currency, eligible subscriptions renew in the new currency at the next anniversary renewal. Active 3YC and HGO commitments remain in the previous currency until the commitment ends. See [Local currency support](../manage-pricing/index.md#local-currency-support) for cutover and commitment rules. + +If subscriptions in both the previous and new currencies exist for the same deployment and SKU, the remaining eligible quantities are consolidated into a single renewal order in the new currency at anniversary renewal. If a new-currency subscription does not exist, the renewal creates one using the remaining renewal quantity from the previous-currency subscription. Auto-renewal for the previous-currency subscription is disabled, but the subscription remains active until it expires. Scheduled subscriptions transition with the active subscription. + +### Calculate the combined renewal quantity + +1. Determine each subscription's target independently: use `autoRenewal.renewalQuantity` when explicitly set, including an explicit zero; otherwise use `currentQuantity`. +2. Subtract each subscription's already early-renewed quantity from its own target. +3. Sum the remaining quantities for the renewal order in the new currency. If early renewals already cover both targets in full, no anniversary renewal order is placed. + +For example, a USD subscription has a target of 100 seats, of which 40 were early renewed before cutover. A CAD subscription has a target of 20 seats, none early renewed. The anniversary renewal is **80 CAD seats**: (100 - 40) + (20 - 0). + +[Preview Renewal](../order-management/order-scenarios.md#preview-renewal-orders) shows the consolidated renewal quantity. Partners can [update the renewal quantity](../subscription-management/update-subscription.md) on either subscription before renewal; review both targets to avoid counting the same intended seats twice. + +When both subscriptions exist, the new-currency subscription's auto-renewal preference takes precedence at consolidation. Flexible discount codes and renewal/MOQ codes carry over to the new-currency subscription. + +These rules do not move the renewal processing date when early renewal rolls the displayed anniversary date forward. The existing `renewalDate` continues to trigger renewal processing; see [Impact of early renewal on anniversary date and renewal date](manual-renewals.md#impact-of-early-renewal-on-anniversary-date-and-renewal-date). + ## See also - [Create Subscription](../subscription-management/create-subscription.md) diff --git a/src/pages/docs/renewals/manual-renewals.md b/src/pages/docs/renewals/manual-renewals.md index c4085bafa..425e19c13 100644 --- a/src/pages/docs/renewals/manual-renewals.md +++ b/src/pages/docs/renewals/manual-renewals.md @@ -34,6 +34,23 @@ Early renewal allows partners to renew subscriptions before the AD and introduce - **Non‑3YC customers:** Price effective date is the order placement date. - **3YC customers:** Price effective date is based on the license commitment start date. Early renewal does not reset the 3YC commitment cycle. +Country-specific prices apply from the country's cutover, subject to commitment price locks. Early renewals placed before cutover retain regional pricing. For currency changes, follow the [new-currency request rules](#early-renewal-after-a-currency-change) below. + +### Early renewal after a currency change + +After a currency cutover, eligible customers must early renew in the new currency. For example, this applies when Canada transitions from USD to CAD or Mexico transitions from USD to MXN. This is an exception to the standard requirement to reference an existing subscription: + +- Use `orderType: "PREVIEW_RENEWAL"` to preview and `orderType: "RENEWAL"` to submit the early renewal. +- Select an offer from the applicable country-specific price list and send `currencyCode: "CAD"` or `currencyCode: "MXN"` on the line item. +- Omit `subscriptionId` for this new-currency early renewal. An old USD subscription ID is rejected with HTTP 422 even when the request specifies the new currency. +- Include `deploymentId` where required for a global customer's deployment. + +The order creates a new-currency subscription to the next anniversary date. Old-currency early renewals are rejected with `CURRENCY_NOT_ACTIVE_FOR_COUNTRY` (HTTP 422), except where commitment rules permit the old currency. + +Customers with a 3YC commitment accepted before cutover cannot order in the new currency during that commitment. Active 3YC customers can still early renew in USD, subject to the existing eligibility restrictions, including the final-term recommitment rule. Contact support to terminate the 3YC before moving to the new currency early. Active HGO commitments also retain the old currency until commitment end. + +At anniversary renewal, quantities already early renewed on either subscription are deducted before the remaining quantities are combined in the new currency. See [Combined renewal quantities](auto-renewals.md#calculate-the-combined-renewal-quantity). + ### Quantity and product rules - The first early renewal can include either existing products or new products. @@ -74,10 +91,10 @@ Simulate a renewal to validate eligibility, pricing, and offers before placing t **Notes:** -- `subscriptionId` is necessary when the order is for an existing subscription +- `subscriptionId` is necessary when the order is for an existing subscription, except for an eligible [early renewal in a new currency](#early-renewal-after-a-currency-change), which must omit the old subscription ID. - If the intention is to renew a new offer, then it is optional. - - Optionally, in this case, `deploymentId` and `currency` can be included as valid properties. -- The order request will be rejected if a subscriptionId is found for the offerId included in the request. + - In this case, send the applicable `currencyCode` on the line item and include `deploymentId` where required for a global customer's deployment. +- When renewing a new offer without `subscriptionId`, the request is rejected if a subscription already exists for that offer, except for the new-currency early-renewal flow described above. - Adobe evaluates Instant Deal Registration automatically and independently of flexible discount codes. **Request** @@ -143,10 +160,10 @@ Use the `POST /v3/customers//orders` endpoint with `orderType` as **Notes:** -- `subscriptionId` is necessary when the order is for an existing subscription +- `subscriptionId` is necessary when the order is for an existing subscription, except for an eligible [early renewal in a new currency](#early-renewal-after-a-currency-change), which must omit the old subscription ID. - If the intention is to create a subscription for a new offer, then it is optional. - - Optionally, in this case, `deploymentId` and `currency` can be included as valid properties. -- The order request will be rejected if a subscriptionId is found for the offerId included in the request. + - In this case, send the applicable `currencyCode` on the line item and include `deploymentId` where required for a global customer's deployment. +- When renewing a new offer without `subscriptionId`, the request is rejected if a subscription already exists for that offer, except for the new-currency early-renewal flow described above. **Request:** diff --git a/src/pages/docs/subscription-management/get-details-for-customers.md b/src/pages/docs/subscription-management/get-details-for-customers.md index 3148c0634..8c99d5e7a 100644 --- a/src/pages/docs/subscription-management/get-details-for-customers.md +++ b/src/pages/docs/subscription-management/get-details-for-customers.md @@ -75,6 +75,7 @@ Example: - No parameters or filters are available at this time. - The `renewalCode` parameter will be available in the response only if the customer receives a High Growth Offer on the next Anniversary Date. +- During a [country currency change](../manage-pricing/index.md#track-subscriptions-when-the-currency-changes), two active subscriptions can exist for the same SKU. Track each `subscriptionId` and `currencyCode` separately, including deployment context for global customers. Do not discard the old-currency record before it expires. ## HTTP status codes diff --git a/src/pages/docs/subscription-management/index.md b/src/pages/docs/subscription-management/index.md index 3d1d2cc6e..7f9dcedc2 100644 --- a/src/pages/docs/subscription-management/index.md +++ b/src/pages/docs/subscription-management/index.md @@ -2,6 +2,14 @@ A Subscription is an agreement between the customer and Adobe to provide, receive, or use Adobe paid and free products and services on a continuing or periodic basis. A subscription may contain one or more acquired offers. +## Subscriptions during a country currency change + +After a country transitions to a new currency, new-currency orders and anniversary renewals create a subscription in the new currency if one does not already exist. The subscription in the previous currency remains active until it expires, with auto-renewal disabled as the subscription transitions to the new currency. As a result, two active subscriptions with different currencies can exist for the same SKU. Retain the separate subscription IDs and currencies in your integration. + +For example, this behavior applies when Canada transitions from USD to CAD or Mexico transitions from USD to MXN. + +At anniversary renewal, eligible subscriptions in the previous and new currencies for the same deployment and SKU are consolidated after excluding quantities that were renewed early. Active 3YC and HGO commitments remain in the previous currency until the commitment ends. See [Local currency support](../manage-pricing/index.md#local-currency-support) and [Currency-change auto-renewals](../renewals/auto-renewals.md#renewals-when-the-country-currency-changes). The consolidation rules take precedence over the independent subscription behavior described below. + ## Auto-renewal scenarios You can manage the auto-renewal preferences for each subscription independently through the subscription’s `autoRenewal` object, as shown in the following example: diff --git a/src/pages/docs/subscription-management/update-subscription.md b/src/pages/docs/subscription-management/update-subscription.md index a6cb5fafe..fcb69ed17 100644 --- a/src/pages/docs/subscription-management/update-subscription.md +++ b/src/pages/docs/subscription-management/update-subscription.md @@ -29,6 +29,12 @@ Ensure that you are aware of the following before updating the auto-renewal conf - 10,000 for Team products - 200,000 for Enterprise products (not supported yet) +### Renewal quantities during a currency change + +Before anniversary renewal, partners can update the renewal quantity for subscriptions in either the previous currency or the new currency. Each subscription contributes its explicitly set `autoRenewal.renewalQuantity`, or its `currentQuantity` if no renewal quantity is explicitly set. Quantities that were already renewed early are excluded before the remaining quantities are consolidated into the new-currency subscription. + +Review the previous and new currency subscriptions when setting renewal quantities. Do not set the same combined renewal quantity on both subscriptions unless you intend that quantity to be counted for each subscription. During a currency change, consolidation at renewal takes precedence over the standard renewal behavior for individual subscriptions. See [Currency-change auto-renewals](../renewals/auto-renewals.md#renewals-when-the-country-currency-changes) for preference precedence, carried-over discounts, and an example. + ## Request header | Parameter | Description |