Cancellation Policies
Introduction
The Platform integrates with cancellation policies provided by vendors, allowing you to cancel or modify recent subscription changes within the vendor's permitted timeframe. When a cancellation policy is active, the Platform displays the available options directly on your Subscription page so you can act before the cancellation window expires.
In this article:
- How cancellation policies work
- Cancellation policy for Microsoft Cloud Solution Provider NCE
- Platform UI overview
- How to cancel or edit a subscription under a cancellation policy
- Additional information related to cancellation policies
- Important to note
- Cancellations API
- Summary
How cancellation policies work
Cancellation policies are defined by each vendor and determine whether — and for how long — you can reverse or modify a recent subscription change. The Platform retrieves these policies directly from the vendor and displays them on your Subscription page.
Cancellation options may be available in the following situations:
- After the initial purchase of a subscription.
- After the renewal of a subscription.
- After a quantity increase.
Cancellation policies vary by vendor
Each vendor defines its own cancellation rules, including which actions can be reversed, the timeframe for making changes, and whether a full cancellation or only a partial edit (such as reducing license quantity) is allowed. The Platform shows you only the options that the vendor currently supports for your subscription.
If a vendor does not provide a cancellation policy, no cancellation options appear on the Subscription page.
Cancellation policy for Microsoft Cloud Solution Provider NCE
For Microsoft Cloud Solution Provider (CSP) New Commerce Experience (NCE) license-based offers, the cancellation window is 7 calendar days (168 hours) from the date of the change. This window applies to:
- New purchases.
- Renewals.
- Quantity increases.
Within this 7-day window, you can reduce the license quantity of the subscription back to the previous amount.
How Microsoft refunds work
The Microsoft CSP NCE cancellation policy provides a prorated refund for unused 24-hour periods:
- First 24 hours: 100% of the charges are refunded.
- After 24 hours: The full amount minus 1 day's charge is refunded for each additional 24-hour period.
- After 168 hours (7 days): No refunds are available.
Example
Suppose the total quantity of your subscription is 5, and you have made 2 separate quantity increase orders — each adding 1 license. The Platform displays two cancellation actions, each allowing you to reduce the quantity by 1 license before the deadline shown.
Orders created within the cancellation window are visible in the orders section of the Subscription page.
Platform UI overview
When cancellation policies are available for your subscription, the Platform displays a Cancellation Policy card on the Subscription page. The card contains the following elements:
- A header showing the title "Cancellation Policy" and the number of active cancellation policies (for example, "Active cancellation policies: 6").
- An instruction area explaining what actions are available (such as reducing quantity within the cancellation window) and how to use the Edit or Cancel buttons.
- A Cancellation Actions section listing each available policy as a separate row.
Each cancellation action row displays:
- The action details (for example, "Reduce Quantity 2").
- The deadline by which the action must be taken (for example, "by 2026/11/03 12:58:02").
- A secondary line showing the Vendor order ID and any additional information provided by the vendor (such as Level and Order Type), presented as click-to-copy chips.
- An Edit or Cancel button on the right side of the row, outlined in red.
At the bottom of the card, a warning note reminds you that changes made on the last day of the cancellation window should be validated with the vendor.
If no cancellation policies are available for your subscription, the Cancellation Policy card does not appear on the page.
Buttons disabled during active orders
The Edit and Cancel buttons in the Cancellation Policy card are automatically disabled when another order is already in progress for the subscription. This prevents you from placing duplicate orders for the same cancellation action. Once the active order completes, the buttons become available again.
How to cancel or edit a subscription under a cancellation policy
To cancel or reduce the license quantity of a subscription within the cancellation window, follow these steps:
- Open the Subscription page for the subscription you want to modify.
- Locate the Cancellation Policy card. If the card is not visible, no cancellation policies are currently available for this subscription.
-
Review the list of cancellation actions. Each row shows the action you can take and the deadline.
- Click the Cancel button next to the action if you want to fully cancel the change, or click the Edit button if you want to partially reduce the quantity.
-
In the confirmation pop-up, review the action details and deadline, then click Confirm to proceed or Cancel to go back.
For a subscription with a total quantity of 1, only the Cancel button is available in the Cancellation Policy card (no Edit option), because a subscription cannot be reduced from 1 to 0 — it must be canceled completely.
Editing a subscription within the cancellation policy
When you click the Edit button next to a cancellation action, the selected policy is highlighted and the Subscription edit form opens below the Cancellation Policy card. You can then reduce the license quantity as permitted by the policy.
The cancellation policy notification text on the Subscription page provides more precise instructions on what changes are permitted.
Additional information related to cancellation policies
When you want to cancel a subscription, the Platform may show you additional information related to the cancellation policy. This extra information can include, for example, a note about the cancellation process or details related to your original order. The Platform can show additional information only if the vendor provides it.
If the additional information received from the vendor is lengthy, the Platform shows only a partial message. You can see the full message by hovering your mouse cursor over the partial text. Partial messages are easy to recognize because three dots (...) appear at the end of the visible text next to the cancellation options.
When the Platform receives a list of additional details from a vendor, it displays them as separate lines next to the cancellation options, presented as click-to-copy chips in the cancellation action row.
Additional information appears in two places when available:
- On the main Subscription page, next to the cancellation options.
- In the confirmation pop-up that appears when you click the Cancel button.
If the Platform receives incomplete additional information from a vendor, it may display the value without an explanation of what the value represents, because the vendor did not provide that context.
For partial cancellations (using the Edit button to reduce quantity), the Platform does not display additional information.
Important to note
- The time displayed next to each cancellation policy is your localized time, based on your browser settings.
- Changes made on the last day of the cancellation window should be validated with the vendor, because time must be accounted for in system communication between the Platform and the vendor.
- When applying the vendor cancellation policy, limit your change order to items available under the cancellation policy. For example, if the vendor allows you to reduce license quantity, do not also change the billing frequency in the same order.
- For Microsoft CSP NCE, the cancellation policy provides a refund for each unused 24-hour period. This means 100 percent of the charges are refunded in the first 24 hours, and the full amount minus 1 day's charge is refunded in the second 24 hours. No refunds are available after the initial 168-hour (7-day) period.
- There is no dedicated cancellation order notification template. You receive regular change order notifications if notifications are enabled in the Platform.
Cancellations API
The Platform provides an API to integrate cancellations with a third-party system. With one API call you can retrieve which recent orders or changes you can cancel (for example, roll back a quantity increase) and the deadline for doing so. Based on the specifics of the vendor, you can use this information to either cancel the corresponding recent order or reduce quantity with a new change order.
Workflow overview
Integrating cancellations via the API is a two-step process:
- Retrieve available cancellation policies — Call the GET endpoint to find out which recent changes on a subscription can be canceled or edited, and by when.
- Execute the cancellation — Based on the CancellationType in the response, either use the Cancel Subscription Order endpoint (POST) for "Full" cancellations, or use the Create Subscription Change Order endpoint (POST) for "Partial" cancellations.
Request headers
All three endpoints use the following headers:
| Header | Required | Description |
|---|---|---|
| Authorization | Yes | Bearer token. |
| X-Referer | Yes | The URL of the requesting Platform. |
| Ocp-Apim-Subscription-Key | Yes | Subscription key generated upon subscribing for the relevant product. |
| Api-Version | Yes | API version. Use "3.0" for the GET and Cancel endpoints, or a date-based version (for example, "2021-04-01") for the Create Subscription Change Order endpoint. See the API reference for the correct value for each endpoint. |
| Environment | See note | Sandbox or Production. Required for the GET and Cancel endpoints, optional for the Create Subscription Change Order endpoint. |
| X-On-Behalf-Of | Yes | Customer identifier. |
| Accept-Language | No | Locale for localized responses (for example, en-US, fi, nl). |
Step 1: Retrieve cancellation policies
Method and route:
GET https://api.appxite.com/subscription/{subscriptionId}/cancellations
This endpoint returns an array of cancellation policy objects for the specified subscription. Each object represents one action you can take (for example, "Reduce Quantity 2") within a specific deadline.
GET response fields
| Field | Type | Description |
|---|---|---|
| CancellationDeadline | DateTime | The deadline by which the cancellation action must be taken (UTC). |
| CancellationDetails | String | A description of the available action (for example, "Reduce Quantity 2"). |
| VendorOrderId | String | The vendor's order identifier associated with the original change. |
| CancellationType | String | "Full" for a complete reversal of the original order's change. "Partial" for a smaller reduction that does not fully reverse the change. |
| SubscriptionId | String (GUID) | The unique identifier of the subscription. |
| CancellationAdditionalInfos | Object (nullable) | Additional vendor-provided details as key-value pairs (for example, Level, Order Type, Promo code). Can be null if the vendor does not provide additional information. |
When no cancellation policies are available, the endpoint returns 200 OK with an empty array. This is a normal response, not an error.
Example GET response
[
{
"CancellationDeadline": "2026-09-09T10:54:46",
"CancellationDetails": "Reduce Quantity 2",
"VendorOrderId": "P9202158167",
"CancellationType": "Full",
"SubscriptionId": "09aa7fcb-a669-4966-86cf-6eb260a8d0eb",
"CancellationAdditionalInfos": {
"Level": "65322607CA02A12",
"Order Type": "NEW",
"Promo code": "FLEX_DISC_COM_ALL_COUNTRIES"
}
},
{
"CancellationDeadline": "2026-09-09T10:54:46",
"CancellationDetails": "Reduce Quantity 1",
"VendorOrderId": "P9202158167",
"CancellationType": "Partial",
"SubscriptionId": "09aa7fcb-a669-4966-86cf-6eb260a8d0eb",
"CancellationAdditionalInfos": {
"Level": "65322607CA02A12",
"Order Type": "NEW",
"Promo code": "FLEX_DISC_COM_ALL_COUNTRIES"
}
}
]
In this example, two cancellation actions are available for the same Vendor order ID ("P9202158167"). Both entries refer to the same original change where 2 licenses were added:
- The "Full" entry ("Reduce Quantity 2") lets you completely reverse that original change by removing all 2 licenses that were added.
- The "Partial" entry ("Reduce Quantity 1") lets you remove only 1 of the 2 licenses that were added.
Both share the same deadline. To execute the "Full" action, use the Cancel Subscription Order endpoint. To execute the "Partial" action, use the Create Subscription Change Order endpoint.
Step 2: Execute the cancellation
Which endpoint you use depends on the CancellationType returned by the GET call:
- CancellationType "Full" — Use the Cancel Subscription Order endpoint (POST). This fully reverses the original order's change. For example, if the original order added 2 licenses, a "Full" cancellation with "Reduce Quantity 2" rolls back all 2 licenses.
- CancellationType "Partial" — Use the Create Subscription Change Order endpoint (POST) with the reduced quantity. This partially reverses the original order's change. For example, if the original order added 2 licenses, a "Partial" cancellation with "Reduce Quantity 1" rolls back only 1 of the 2 licenses.
Full cancellation: Cancel subscription order
Method and route:
POST https://api.appxite.com/subscription/{subscriptionId}/cancellations
POST response fields
A successful request returns 200 OK with an OrderWithOperations object. The key fields are:
| Field | Type | Description |
|---|---|---|
| OrderWithOperations.Order.Id | String (GUID) | The unique identifier of the created cancellation order. |
| OrderWithOperations.Order.Name | String | The name of the cancellation order (for example, "Office 365 E5 cancelled"). |
| OrderWithOperations.Order.OrderNumber | Integer | The sequential order number assigned by the Platform. |
| OrderWithOperations.Order.Status | String | The current workflow status of the order. |
| OrderWithOperations.Order.CreatedDateUtc | DateTime (UTC) | The timestamp when the cancellation order was created. |
| OrderWithOperations.Operations | Array | Available operations for this order. See the API reference for details on how to process each operation. |
| ValidationResult.IsValid | Boolean | Whether the cancellation order passed validation. Always check this field before proceeding. |
| ValidationResult.CancelOrderItemsErrors | Array (nullable) | Validation errors specific to the cancellation items. Null when there are no errors. |
Example POST response
{
"OrderWithOperations": {
"Order": {
"OrderData": "{\r\n \"OrderId\": \"18c3bfe8-2f25-4d79-ba0e-e2e6c573e6d5\",\r\n \"OrderName\": \"Office 365 E5 cancelled\",\r\n \"ScheduledOnDateUtc\": null,\r\n \"OrderScheduleType\": null,\r\n \"OrderedOffers\": null,\r\n \"OrderedAddons\": null,\r\n \"SubscriptionChanges\": null,\r\n \"SubscriptionNameChanges\": null,\r\n \"SubscriptionSuspensions\": null,\r\n \"SubscriptionReactivations\": null,\r\n \"SubscriptionDeletions\": null,\r\n \"SubscriptionMarkupChanges\": null,\r\n \"SubscriptionCustomPropertiesChanges\": null,\r\n \"SubscriptionTransformations\": null,\r\n \"CancelOrderItems\": [\r\n {\r\n \"OrderItemId\": \"5b0a0a21-22f4-4b0b-8c58-62d1a17b564f\",\r\n \"CanceledOrderItemId\": null,\r\n \"VendorOrderId\": null,\r\n \"SubscriptionId\": \"efab7a21-76bb-481a-80c4-75d3f7fb4261\"\r\n }\r\n ],\r\n \"OrderNumber\": 0,\r\n \"CreatedByApiUser\": null,\r\n \"IsOrderScheduled\": false\r\n}",
"Id": "18c3bfe8-2f25-4d79-ba0e-e2e6c573e6d5",
"Name": "Office 365 E5 cancelled",
"OrderNumber": 53745,
"ItemsCount": 1,
"Status": "WorkflowReseller_ProvisionStarted",
"StatusName": "ProvisionStarted",
"WorkflowName": "WorkflowReseller",
"OrganizationId": "11d3c9c5-0ad5-4692-8e2e-61415d44d0dc",
"ResellerOrganizationId": "0b05d7fb-1a9c-4e2f-a4ab-77769e429e62",
"CreatedBy": "882d3771-0857-42b3-9b6c-eeea0ac57b8f",
"CreatedByApiUser": "",
"CreatedDateUtc": "2024-03-05T22:44:39.8142483Z",
"EditedDateUtc": "2024-03-05T22:44:40.0173782Z",
"EditedBy": "882d3771-0857-42b3-9b6c-eeea0ac57b8f",
"OrderNote": null,
"ScheduledOnDateUtc": null,
"ExternalId": null,
"RequireValidation": false,
"IsEditable": false,
"IsLockedByEditor": false
},
"Operations": [{
"Id": "60c13030-116e-42f8-9ae9-4376547692b3",
"Name": "AddOrderNote",
"RequireValidation": false,
"RequireTermsAgree": false,
"RequireUserMessage": false,
"StartProvision": false,
"TargetStatusId": "d2a7f4cf-6814-4840-b625-2e91ef9af3c4",
"IsTargetStatusEditable": false,
"Rank": 5
}, {
"Id": "3dc2b7d4-51bf-47ad-b29e-1ff12bb808c7",
"Name": "PlaceOrder",
"RequireValidation": true,
"RequireTermsAgree": true,
"RequireUserMessage": false,
"StartProvision": false,
"TargetStatusId": "d2a7f4cf-6814-4840-b625-2e91ef9af3c4",
"IsTargetStatusEditable": false,
"Rank": 0
}, {
"Id": "29483518-5e8e-4fa4-ae3d-2419ed81cb18",
"Name": "Delete",
"RequireValidation": false,
"RequireTermsAgree": false,
"RequireUserMessage": false,
"StartProvision": false,
"TargetStatusId": "f32a6308-3d38-44fb-8467-36511d96d74b",
"IsTargetStatusEditable": false,
"Rank": 4
}]
},
"ValidationResult": {
"OrderedOffersErrors": null,
"OrderedAddonsErrors": null,
"SubscriptionChangesErrors": null,
"SubscriptionTrialConversionsErrors": null,
"SubscriptionNameChangesErrors": null,
"SubscriptionSuspensionErrors": null,
"SubscriptionReactivationError": null,
"SubscriptionDeletionErrors": null,
"CancelOrderItemsErrors": null,
"IsValid": true
}
}
In this example, the cancellation order was created successfully (IsValid: true) and contains one cancellation item. The Operations array lists the available next actions for this order. See the API reference for details on how to process the order operations.
Partial cancellation: Create subscription change order
For cancellation policies with CancellationType "Partial", use the Create Subscription Change Order endpoint to reduce the license quantity by an amount smaller than the full original change.
Method and route:
POST https://api.appxite.com/subscription/PostPlaceOrder
This endpoint creates and places a change order for the specified subscription. To use it for a partial cancellation, set the Quantity and quantityKey fields to the new (reduced) quantity you want the subscription to have.
Request body
The request body contains a SubscriptionChanges array with the subscription change details. Key fields to set for a partial cancellation under a cancellation policy:
| Field | Type | Description |
|---|---|---|
| ChangeType | String | Set to "SubscriptionChange". |
| OfferId | String (GUID) | The offer identifier for the subscription. |
| OrderItemId | String (GUID) | The order item identifier. |
| Quantity | Integer | The new (reduced) license quantity you want the subscription to have. This is the target quantity, not the number of licenses to remove. |
| Name | String | The name of the subscription. |
| SubscriptionId | String (GUID) | The unique identifier of the subscription being modified. |
| SubscriptionState | String | The current state of the subscription (for example, "Enabled"). |
| FormData.quantityKey | Integer | The new (reduced) quantity. Must match the Quantity field. |
| FormData.termDuration | String | The term duration (for example, "P1M" for monthly). Do not change this value when applying a cancellation policy. |
| FormData.billingCycle | String | The billing frequency (for example, "Monthly"). Do not change this value when applying a cancellation policy. |
| OrderScheduleType | String | Set to "Now" to execute the change immediately. |
| OrderName | String | A descriptive name for the change order. |
Example request body
The following example reduces the license quantity of an Enterprise Mobility + Security E3 subscription to 10:
{
"SubscriptionChanges": [{
"ChangeType": "SubscriptionChange",
"OfferId": "7c637e4d-b832-48c2-82b1-0baae4e14465",
"OrderItemId": "1c7c6b63-ac8d-4cbd-b93a-91f293638400",
"Quantity": 10,
"Name": "Enterprise Mobility + Security E3",
"SubscriptionId": "bf7197aa-7a5d-4ceb-8f8d-6a8d8a00adfa",
"SubscriptionState": "Enabled",
"CustomerMarkup": 0,
"TaxItems": [],
"IsCpq": true,
"FormData": {
"quantityKey": 10,
"termDuration": "P1M",
"billingCycle": "Monthly",
"segment": "commercial",
"tenant": {
"DomainName": "domain.onmicrosoft.com",
"InternalId": "cd376914-57c8-4eca-b724-6cac5fb5ab0f",
"ExternalId": "2acaa74c-2882-4d8f-9aa4-518d105f7324"
},
"customTermEndDates": "None"
}
}],
"OrderScheduleType": "Now",
"OrderName": "Enterprise Mobility + Security E3 updated"
}
Key points for partial cancellations
- Set Quantity and FormData.quantityKey to the target quantity you want the subscription to have after the reduction, not the number of licenses you want to remove. For example, if the subscription currently has 12 licenses and you want to remove 2, set both values to 10.
- Keep termDuration, billingCycle, and all other subscription settings unchanged. Only modify the quantity-related fields.
- Set OrderScheduleType to "Now" to ensure the change is processed immediately, within the cancellation window.
- Verify that the reduced quantity does not go below the minimum allowed by the "Partial" cancellation policy entry from the GET response.
Best practices
- Always call GET before POST. Retrieve the current cancellation policies before attempting to cancel. Policies are time-sensitive and can expire, so calling GET immediately before acting ensures you have the latest available options and deadlines.
- Check the CancellationType field. "Full" means reversing the entire original order's change — use the Cancel Subscription Order endpoint. "Partial" means reducing only part of the original change — use the Create Subscription Change Order endpoint.
- Match on VendorOrderId. Multiple cancellation actions can share the same Vendor order ID (one "Full" and one "Partial" entry for each original change). Make sure your integration selects the correct action by matching both the VendorOrderId and the desired CancellationType.
- Respect the CancellationDeadline. Do not attempt to cancel after the deadline has passed. Build in a safety margin, especially for last-day cancellations, because time is needed for system communication between the Platform and the vendor.
- Handle an empty GET response gracefully. An empty array from the GET endpoint means no cancellation policies are currently available. Your integration should treat this as a normal state, not an error.
- Check ValidationResult.IsValid. Always verify this field in the response before treating a cancellation as successful. If IsValid is false, check the corresponding error arrays for details on what went wrong.
Summary
The Platform integrates with vendor cancellation policies to let you reverse or modify recent subscription changes within the vendor's permitted timeframe. For Microsoft CSP NCE license-based offers, the cancellation window is 7 calendar days (168 hours), with prorated refunds for unused 24-hour periods. To apply a cancellation policy through the UI, use the Edit or Cancel buttons inside the Cancellation Policy card on the Subscription page — not the standard Edit option at the bottom of the page. For third-party integrations, the Cancellations API provides a two-step workflow: retrieve available policies with a GET call, then execute the cancellation with the appropriate POST endpoint. The Platform displays available cancellation actions with localized time, shows additional vendor-provided information when available, and disables buttons while orders are in progress to prevent duplicate submissions.
Was this article helpful?
Articles in this section
- Add add-on subscriptions when purchasing
- Adjust renewal dates based on commitment period
- Azure Subscription Role Assignments within Tier 2 Seller and Indirect Provider Model
- Cancellation Policies
- Change subscription names
- Channel Subscription Management overview
- How do I suspend a Subscription for the Customer?
- How Do NCE Trial Subscriptions Work?
- How to change the price on existing Subscription?
- How to change the quantity of subscription licenses
Add comment
Please sign in to leave a comment.