> Portal Navigation: > > - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version. > - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages). > - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`). > - Top-level index of all portals: https://dev.wix.com/docs/llms.txt > - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt # RequestCancellation # Package: pricingPlans # Namespace: MemberOrdersService # Method link: https://dev.wix.com/docs/api-reference/business-solutions/pricing-plans/orders/request-cancellation.md ## Permission Scopes: Perform member actions: SCOPE.PRICING-PLANS.OWN-EXTERNAL ## Introduction Cancels an order. Recurring orders can be canceled either immediately or at the next payment date. One time orders can only be canceled immediately. There may be some operations that continue to be processed before the status of the order is changed to `"CANCELED"`. For example, payments might need to be refunded before the order is fully canceled. Canceling during the free trial period: When a buyer cancels their order during the free trial period, the buyer's subscription expires at the end of the free trial period and they won't be billed. The buyer may continue using the benefits until the end of the free trial period. >**Note:** >This method requires [visitor or member authentication](https://dev.wix.com/docs/rest/articles/getting-started/access-types-and-permissions.md). --- ## REST API ### Schema ``` Method: requestCancellation Description: Cancels an order. Recurring orders can be canceled either immediately or at the next payment date. One time orders can only be canceled immediately. There may be some operations that continue to be processed before the status of the order is changed to `"CANCELED"`. For example, payments might need to be refunded before the order is fully canceled. Canceling during the free trial period: When a buyer cancels their order during the free trial period, the buyer's subscription expires at the end of the free trial period and they won't be billed. The buyer may continue using the benefits until the end of the free trial period. >**Note:** >This method requires [visitor or member authentication](https://dev.wix.com/docs/rest/articles/getting-started/access-types-and-permissions.md). URL: https://www.wixapis.com/pricing-plans/v2/member/orders/{id}/cancel Method: POST # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: effectiveAt Method parameters: param name: effectiveAt | type: CancellationEffectiveAt | required: true - enum: UNDEFINED - Undefined cancellation time. IMMEDIATELY - Cancellation occurs immediately and the buyer can no longer use the plan. NEXT_PAYMENT_DATE - Cancellation occurs at the next payment date and time. Buyer can continue to use the plan until that date and time. Return type: RequestCancellationResponse EMPTY-OBJECT {} ``` --- ## JavaScript SDK ### Schema ``` Method: wixClientAdmin.pricingPlans.MemberOrdersService.requestCancellation(_id, effectiveAt) Description: Cancels an order. Recurring orders can be canceled either immediately or at the next payment date. One time orders can only be canceled immediately. There may be some operations that continue to be processed before the status of the order is changed to `"CANCELED"`. For example, payments might need to be refunded before the order is fully canceled. Canceling during the free trial period: When a buyer cancels their order during the free trial period, the buyer's subscription expires at the end of the free trial period and they won't be billed. The buyer may continue using the benefits until the end of the free trial period. >**Note:** >This method requires [visitor or member authentication](https://dev.wix.com/docs/rest/articles/getting-started/access-types-and-permissions.md). # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: _id, effectiveAt Method parameters: param name: _id | type: string | description: Order GUID. | required: true param name: effectiveAt | type: CancellationEffectiveAt | required: true - enum: UNDEFINED - Undefined cancellation time. IMMEDIATELY - Cancellation occurs immediately and the buyer can no longer use the plan. NEXT_PAYMENT_DATE - Cancellation occurs at the next payment date and time. Buyer can continue to use the plan until that date and time. Return type: PROMISE EMPTY-OBJECT {} ``` ### Examples ### Cancel or pause a member order (with $w) This example provides a dropdown list of active orders for a logged-in member. The member selects a plan from the `#ordersDropdown` and clicks the `#cancelOrderBtn` to cancel the plan or the `#pauseOrderBtn` to pause the plan. ```javascript /********************************** * Backend code - order.web.js/ts * **********************************/ import { Permissions, webMethod } from '@wix/web-methods'; import { orders } from '@wix/pricing-plans'; import { auth } from '@wix/essentials'; const elevatedPauseOrder = auth.elevate(orders.pauseOrder); export const listCurrentMemberOrders = webMethod( Permissions.Anyone, async (orderStatuses) => { try { const result = await orders.memberListOrders(orderStatuses); return result; } catch (error) { console.error(error); // Handle the error } }); export const requestCancellation = webMethod( Permissions.Anyone, async (orderId) => { const effectiveAt = 'NEXT_PAYMENT_DATE'; try { await orders.requestCancellation(orderId, effectiveAt) ; return; } catch (error) { console.error(error); // Handle the error } }); export const pauseOrder = webMethod( Permissions.Anyone, async (orderId) => { try { await elevatedPauseOrder(orderId); return; } catch (error) { console.error(error); // Handle the error } }); /************* * Page code * *************/ import { listCurrentMemberOrders, requestCancellation, pauseOrder } from 'backend/order.web'; $w.onReady(function () { // Disabe UI elements on page load $w('#requestCancelOrderBtn').disable(); $w('#pauseOrderBtn').disable(); $w('#ordersDropdown').disable(); let selectedOrderId; populateOrdersDropdown(); $w('#ordersDropdown').onChange( () => { selectedOrderId = $w('#ordersDropdown').value; $w('#requestCancelOrderBtn').enable(); $w('#pauseOrderBtn').enable(); }); $w('#requestCancelOrderBtn').onClick(async () => { await requestCancellation(selectedOrderId); }); $w('#pauseOrderBtn').onClick(async () => { await pauseOrder(selectedOrderId); }); }); async function populateOrdersDropdown() { const activeOrdersList = await listCurrentMemberOrders({orderStatuses: 'ACTIVE'}); $w('#ordersDropdown').options = activeOrdersList.orders.map((order) => { return { label: order.planName, value: order._id } }); $w('#ordersDropdown').enable(); } ``` ### Cancel an order immediately ```javascript import { orders } from '@wix/pricing-plans'; /* Sample _id value: '7b4ec42c-582a-4e2f-874b-09e66e0ae09d' * * Sample effectiveAt value: 'IMMEDIATELY' */ export async function myRequestCancellationFunction(_id, effectiveAt) { try { await orders.requestCancellation(_id, effectiveAt); return; } catch (error) { console.error(error); // Handle the error } } /* Promise resolves to void */ ``` ### requestCancellation (self-hosted) Self-hosted SDK calls require you to [create a client](https://dev.wix.com/docs/sdk/articles/work-with-the-sdk/about-the-wix-client.md). ```javascript import { createClient } from '@wix/sdk'; import { orders } from '@wix/pricing-plans'; // Import the auth strategy for the relevant access type // Import the relevant host module if needed const myWixClient = createClient ({ modules: { orders }, // Include the auth strategy and host as relevant }); async function requestCancellation(_id,effectiveAt) { const response = await myWixClient.orders.requestCancellation(_id,effectiveAt); }; ``` ---