> 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 # CreateOfflineOrder # Package: pricingPlans # Namespace: CheckoutService # Method link: https://dev.wix.com/docs/api-reference/business-solutions/pricing-plans/orders/create-offline-order.md ## Permission Scopes: Manage Orders: SCOPE.DC-PAIDPLANS.MANAGE-ORDERS ## Introduction Creates an order for a buyer who purchased the plan with an offline transaction. An offline order is handled off of the Wix site and is marked as `type`: `offline`. If a pricing plan has a limit on the amount of purchases per buyer, that limit is ignored for offline orders. Tax is only applied if the site [has it configured](https://support.wix.com/en/article/pricing-plans-setting-up-tax-collection). When creating a free offline order: The order's status is set to `"PENDING"` if the start date is in the future. Otherwise, the status is set to `"ACTIVE"`. The order's last payment status is set to `"NOT_APPLICABLE"`. " When creating a non-free offline order: The order's status is set to `"PENDING"` if the start date is in the future. Otherwise, the status is set to `"ACTIVE"`. The order's last payment status is set to `"UNPAID"` or `"PAID"` based on the data passed in the `paid` boolean in the request. Payment for an offline order can be set in 1 of 2 ways: + During order creation, set `paid`: `true`. + After creation, call Mark As Paid. --- ## REST API ### Schema ``` Method: createOfflineOrder Description: Creates an order for a buyer who purchased the plan with an offline transaction. An offline order is handled off of the Wix site and is marked as `type`: `offline`. If a pricing plan has a limit on the amount of purchases per buyer, that limit is ignored for offline orders. Tax is only applied if the site [has it configured](https://support.wix.com/en/article/pricing-plans-setting-up-tax-collection). When creating a free offline order: The order's status is set to `"PENDING"` if the start date is in the future. Otherwise, the status is set to `"ACTIVE"`. The order's last payment status is set to `"NOT_APPLICABLE"`. " When creating a non-free offline order: The order's status is set to `"PENDING"` if the start date is in the future. Otherwise, the status is set to `"ACTIVE"`. The order's last payment status is set to `"UNPAID"` or `"PAID"` based on the data passed in the `paid` boolean in the request. Payment for an offline order can be set in 1 of 2 ways: + During order creation, set `paid`: `true`. + After creation, call Mark As Paid. URL: https://www.wixapis.com/pricing-plans/v2/checkout/orders/offline Method: POST # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: planId, memberId Method parameters: param name: couponCode | type: couponCode | description: Coupon code to apply, from the Coupons API. param name: memberId | type: memberId | description: GUID of the member ordering the plan, from the Members API. | required: true param name: paid | type: paid | description: Whether the order is paid. Default: `false` param name: planId | type: planId | description: GUID of the plan being ordered, from the Plans API. | required: true param name: startDate | type: startDate | description: Start date and time for the ordered plan in a `YYYY-MM-DDThh:mm[:ss][.sss]Z` format. Default: Current date and time. param name: submissionId | type: submissionId | description: Form submission GUID that was submitted with the order. Return type: CreateOfflineOrderResponse - name: order | type: Order | description: Order. - name: id | type: string | description: Order GUID. - name: planId | type: string | description: GUID of the plan purchased with the order, from the Plans API. - name: subscriptionId | type: string | description: GUID of the related Wix subscription. Every pricing plan order corresponds to a Wix subscription, including orders for single payment plans. Learn more in a [Pricing Plans overview](https://support.wix.com/en/article/pricing-plans-an-overview#create-plans-to-suit-your-business). - name: wixPayOrderId | type: string | description: Wix Pay order GUID. Provided by Wix whether the order is created online or offline. The field is omitted when the order is free. - name: buyer | type: Buyer | description: The buyer's GUIDs. Includes `memberId` and `contactId`. Currently, Pricing Plan purchases are limited to members only. `contactId` is returned, but a buyer will not be able to purchase a plan without a `memberId`. - name: memberId | type: string | description: Member GUID for a Wix site member, from the Members API. - name: contactId | type: string | description: Contact GUID for a Wix site contact, from the Contacts API. - name: pricing | type: PricingDetails | description: Order pricing model, price, and payment schedule. Learn more about [pricing models](https://dev.wix.com/api/rest/wix-pricing-plans/pricing-plans/introduction#wix-pricing-plans_pricing-plans_introduction_pricing-models). - ONE-OF: - name: subscription | type: Recurrence | description: Pricing model for an order with recurring payment cycles. - name: cycleDuration | type: Duration | description: Number of payment cycles the subscription is valid for. `0` for unlimited plans or for plans that are valid until canceled. - name: count | type: integer | description: Number of days, months, weeks, or years in a single payment cycle. Currently limited to support only `1`. - name: unit | type: PeriodUnit | description: Unit of time for the cycle duration. - enum: - UNDEFINED: Not defined. - DAY: Time unit is a day. - WEEK: Time unit is a week. - MONTH: Time unit is a month. - YEAR: Time unit is a year. - name: cycleCount | type: integer | description: Length of a payment cycle. For example, 1 month to have monthly payments. Multiply `cycleDuration`'s `count` by `cycleCount` to get the subscription duration. Currently, only a value of `1` is supported. - name: singlePaymentForDuration | type: Duration | description: Pricing model for an order with a one-time payment and the order is valid for a specific amount of time. - name: singlePaymentUnlimited | type: boolean | description: Pricing model for an order with a one-time payment and the order is valid until canceled. - name: prices | type: array | description: Pricing details for all pricing models. - name: duration | type: PriceDuration | description: Cycle duration to apply `price` for. Use with all pricing models. Can apply the same price to multiple payment cycles. - name: cycleFrom | type: integer | description: Price starts to apply with this cycle. `1` is the first payment cycle for all pricing models. - name: numberOfCycles | type: integer | description: Amount of cycles to apply price for. For `subscription` pricing models with a finite number of cycles, the `numberOfCycles` is the same as `pricing.subscription.cycleCount`. For `subscription` pricing models that are unlimited or until-canceled, the `numberOfCycles` is not returned. For `singlePaymentForDuration` and `singlePaymentUnlimited` pricing models, the `numberOfCycles` is `1`. - name: price | type: Price | description: Order price. - name: subtotal | type: string | description: Price of the order excluding tax, specified as a monetary amount. For example, `"9.99"`. - name: coupon | type: Coupon | description: Coupon applied to the order, from the Coupons API. - name: code | type: string | description: Code of the applied coupon. - name: amount | type: string | description: Total discount of the coupon, as a monetary amount. - name: id | type: string | description: Coupon GUID. - name: discount | type: string | description: Total discount applied to the order. - name: tax | type: Tax | description: Tax applied to the order. Tax is only applied if the site [has it configured](https://support.wix.com/en/article/pricing-plans-setting-up-tax-collection). - name: name | type: string | description: Name of the tax. For example, VAT. - name: includedInPrice | type: boolean | description: Whether tax is included in the original price. When `false`, tax is added at checkout. - name: rate | type: string | description: Tax rate percentage, as a number between 0 and 100. For example, a 7% tax rate is `"7.00"`. - name: amount | type: string | description: Total tax, specified as a monetary amount. For example, `"3.99"`. - name: total | type: string | description: Price after tax and discount is applied. Specified as a monetary amount, for example, `"13.98"`. If no tax is applied, the amount is the same as `subtotal`. - name: currency | type: string | description: Three-letter currency code in [ISO-4217 alphabetic](https://en.wikipedia.org/wiki/ISO_4217#Active_codes) format. - name: proration | type: string | description: Price change after billing date was change and price was adjusted. Could be positive and negative values. - name: type | type: OrderType | description: How the order was processed. - enum: - UNDEFINED: Undefined order type. - ONLINE: The buyer purchased the plan using the site. - OFFLINE: The buyer made a manual, offline purchase without using the site. - EXTERNAL: The buyer made a purchase through an external payment provider. - name: status | type: OrderStatus | description: Status of the order. - enum: - UNDEFINED: Undefined order status. - DRAFT: Order has been initiated but payment hasn't been processed yet. The plan isn't yet available for use to the buyer. - PENDING: Order has been purchased and its start date is set in the future. - ACTIVE: Order has been processed. The plan is available for use. - PAUSED: Order, and use of the plan, is paused. The order, and use of the plan, can be resumed. - ENDED: Order has completed its duration and is no longer available for use. - CANCELED: Order has been canceled. - name: autoRenewCanceled | type: boolean | description: Whether the order will be canceled at the next payment date. If `true`, the order status will be `CANCELED` and the next payment won't be charged. Omitted for single payment orders. - name: cancellation | type: Cancellation | description: Details about the cancellation of an order. Only present if the status is `CANCELED`. - name: requestedDate | type: string | description: Date and time the cancellation was requested. - name: cause | type: CancellationCause | description: Reason for the cancellation. - enum: - UNDEFINED: Undefined cancellation cause. - OWNER_ACTION: Wix user canceled the order. - MEMBER_ACTION: Buyer initiated the cancellation. - PAYMENT_FAILURE: Payment transaction failed. - PAYMENT_SETUP_FAILURE: Buyer's payment details weren't set up correctly. - UNKNOWN: Reason for the cancellation is unknown. - name: effectiveAt | type: CancellationEffectiveAt | description: When the cancellation takes effect. Set when cancelling the order. - 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. - name: lastPaymentStatus | type: PaymentStatus | description: Status of the last payment for the order. Updated automatically for online orders. Updated manually by the Wix user for offline orders. - enum: - UNDEFINED: Undefined payment status. - PAID: Payment has been paid. - REFUNDED: Payment has been refunded. - FAILED: Payment transaction didn't complete. - UNPAID: Payment has not been paid. - PENDING: Billing has been initialized, but actual charge is yet to be made. This can happen for free trials and payments made with PayPal. - NOT_APPLICABLE: No payment was necessary. For example, for free plans or free trials. - name: startDate | type: string | description: Start date and time for the ordered plan. - name: endDate | type: string | description: Current end date and time for the ordered plan. `endDate` may be updated over the course of an order. If the order is paused, it will have a later `endDate` once it is resumed. `endDate` may also be postponed. Omitted if the order is valid until canceled and still `ACTIVE`. - name: pausePeriods | type: array | description: List of periods during which the order is paused. - name: status | type: Status | description: Status of the pause period. - enum: - UNDEFINED: Undefined status. - ACTIVE: Status while the order is paused. - ENDED: Status when the order is resumed. - name: pauseDate | type: string | description: Start date and time of the pause period. - name: resumeDate | type: string | description: End date and time of the pause period. Omitted while the pause period remains `ACTIVE`. - name: freeTrialDays | type: integer | description: Free trial period for the order, in days. Only available for recurring plans. - name: earliestEndDate | type: string | description: Earliest end date and time that the plan for the order can expire. Calculated by using the original end date plus any pause periods. Omitted if the order is active until canceled. Reserved for future use. - name: currentCycle | type: CurrentCycle | description: Current payment cycle for the order. `currentCycle` will be omitted if the order's status is `CANCELED` or `ENDED`, or if the `startDate` hasn't passed yet. - name: index | type: integer | description: Index of the current payment cycle in the order. `0` when order is in a free trial period. In all other cases, the index starts with `1`. - name: startedDate | type: string | description: Start date and time for the current payment cycle. - name: endedDate | type: string | description: End date and time for the current payment cycle. - name: planName | type: string | description: Plan name at the time of purchase. - name: planDescription | type: string | description: Plan description at the time of purchase - name: planPrice | type: string | description: Plan price as it was at the moment of order creation. - name: createdDate | type: string | description: Date and time the order was created. - name: updatedDate | type: string | description: Date and time the order was updated. - name: formData | type: FormData | description: Information about the form submitted during the plan's checkout. - name: formId | type: string | description: GUID of the [order form](https://dev.wix.com/docs/rest/api-reference/wix-forms/form-submissions/introduction.md) associated with the plan at checkout. - name: submissionId | type: string | description: GUID of a submission to the plan's order form at checkout. Every time a visitor completes the checkout process for a plan, a new submission is created. - name: submissionData | type: Map | description: Data submitted to the plan's order form at checkout. - ONE-OF: - name: nullValue | type: | description: - name: numberValue | type: number | description: - name: stringValue | type: string | description: - name: boolValue | type: boolean | description: - name: structValue | type: object | description: - name: listValue | type: ListValue | description: - name: values | type: array | description: Possible Errors: HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: invalid_sort_field | Description: Invalid sort field specified. HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: MEMBER_DOESNT_EXIST | Description: Member doesn't exist. HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: undefined_not_allowed | Description: Undefined values aren't allowed. HTTP Code: 403 | Status Code: PERMISSION_DENIED | Application Code: meta_site_id_missing | Description: Meta site GUID is missing. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: MISSING_BUSINESS_ADDRESS_STATE | Description: Business address state is missing. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: MISSING_BUSINESS_ADDRESS_COUNTRY | Description: Business address country is missing. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_INVALID_SUBTOTAL | Description: Subtotal is invalid for the applied coupon. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_NOT_APPLICABLE_FOR_PLAN | Description: Coupon can't be applied to this plan. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_DOES_NOT_EXIST | Description: Coupon doesn't exist. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_HAS_EXPIRED | Description: Coupon has expired. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_IS_NOT_ACTIVE_YET | Description: Coupon isn't active yet. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_LIMIT_PER_CUSTOMER_EXCEEDED | Description: Coupon limit per customer exceeded. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_USAGE_EXCEEDED | Description: Coupon usage limit exceeded. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_IS_DISABLED | Description: Coupon is disabled and can't be applied. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: PRICING_PLANS_NOT_INSTALLED | Description: Pricing Plans app isn't installed on the site. ``` ### Examples ### Create an Unpaid Offline Order ```curl curl -X POST \ 'https://www.wixapis.com/pricing-plans/v2/checkout/orders/offline' \ -H 'Authorization: >' \ -H 'Content-Type: application/json' \ --data-raw '{ "planId": "b90475cd-9000-4cb0-93dd-c81ee100e350", "memberId": "805ce40a-0000-464e-85ed-5bb052d8beb7", "paid": false }' ``` ### Create a Paid Offline Order With a Future Start Date and Coupon ```curl curl -X POST \ 'https://www.wixapis.com/pricing-plans/v2/checkout/orders/offline' \ -H 'Authorization: ' \ -H 'Content-Type: application/json' \ --data-raw '{ "memberId": "805ce40a-9000-464e-85ed-5bb052d8beb7", "planId": "b90475cd-0000-4cb0-93dd-c81ee100e350", "startDate": "2022-06-25T16:23:00Z", "paid": true, "couponCode": "HalfOff" }' ``` --- ## JavaScript SDK ### Schema ``` Method: wixClientAdmin.pricingPlans.CheckoutService.createOfflineOrder(planId, memberId, options) Description: Creates an order for a buyer who purchased the plan with an offline transaction. An offline order is handled off of the Wix site and is marked as `type`: `offline`. If a pricing plan has a limit on the amount of purchases per buyer, that limit is ignored for offline orders. Tax is only applied if the site [has it configured](https://support.wix.com/en/article/pricing-plans-setting-up-tax-collection). When creating a free offline order: The order's status is set to `"PENDING"` if the start date is in the future. Otherwise, the status is set to `"ACTIVE"`. The order's last payment status is set to `"NOT_APPLICABLE"`. " When creating a non-free offline order: The order's status is set to `"PENDING"` if the start date is in the future. Otherwise, the status is set to `"ACTIVE"`. The order's last payment status is set to `"UNPAID"` or `"PAID"` based on the data passed in the `paid` boolean in the request. Payment for an offline order can be set in 1 of 2 ways: + During order creation, set `paid`: `true`. + After creation, call Mark As Paid. # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: planId, memberId Method parameters: param name: memberId | type: string | description: GUID of the member ordering the plan, from the Members API. | required: true param name: options | type: CreateOfflineOrderOptions none - name: startDate | type: Date | description: Start date and time for the ordered plan in a `YYYY-MM-DDThh:mm[:ss][.sss]Z` format. Default: Current date and time. - name: paid | type: boolean | description: Whether the order is paid. Default: `false` - name: couponCode | type: string | description: Coupon code to apply, from the Coupons API. - name: submissionId | type: string | description: Form submission GUID that was submitted with the order. param name: planId | type: string | description: GUID of the plan being ordered, from the Plans API. | required: true Return type: PROMISE - name: order | type: Order | description: Order. - name: _id | type: string | description: Order GUID. - name: planId | type: string | description: GUID of the plan purchased with the order, from the Plans API. - name: subscriptionId | type: string | description: GUID of the related Wix subscription. Every pricing plan order corresponds to a Wix subscription, including orders for single payment plans. Learn more in a [Pricing Plans overview](https://support.wix.com/en/article/pricing-plans-an-overview#create-plans-to-suit-your-business). - name: wixPayOrderId | type: string | description: Wix Pay order GUID. Provided by Wix whether the order is created online or offline. The field is omitted when the order is free. - name: buyer | type: Buyer | description: The buyer's GUIDs. Includes `memberId` and `contactId`. Currently, Pricing Plan purchases are limited to members only. `contactId` is returned, but a buyer will not be able to purchase a plan without a `memberId`. - name: memberId | type: string | description: Member GUID for a Wix site member, from the Members API. - name: contactId | type: string | description: Contact GUID for a Wix site contact, from the Contacts API. - name: pricing | type: PricingDetails | description: Order pricing model, price, and payment schedule. Learn more about [pricing models](https://dev.wix.com/api/rest/wix-pricing-plans/pricing-plans/introduction#wix-pricing-plans_pricing-plans_introduction_pricing-models). - ONE-OF: - name: subscription | type: Recurrence | description: Pricing model for an order with recurring payment cycles. - name: cycleDuration | type: Duration | description: Number of payment cycles the subscription is valid for. `0` for unlimited plans or for plans that are valid until canceled. - name: count | type: integer | description: Number of days, months, weeks, or years in a single payment cycle. Currently limited to support only `1`. - name: unit | type: PeriodUnit | description: Unit of time for the cycle duration. - enum: - UNDEFINED: Not defined. - DAY: Time unit is a day. - WEEK: Time unit is a week. - MONTH: Time unit is a month. - YEAR: Time unit is a year. - name: cycleCount | type: integer | description: Length of a payment cycle. For example, 1 month to have monthly payments. Multiply `cycleDuration`'s `count` by `cycleCount` to get the subscription duration. Currently, only a value of `1` is supported. - name: singlePaymentForDuration | type: Duration | description: Pricing model for an order with a one-time payment and the order is valid for a specific amount of time. - name: singlePaymentUnlimited | type: boolean | description: Pricing model for an order with a one-time payment and the order is valid until canceled. - name: prices | type: array | description: Pricing details for all pricing models. - name: duration | type: PriceDuration | description: Cycle duration to apply `price` for. Use with all pricing models. Can apply the same price to multiple payment cycles. - name: cycleFrom | type: integer | description: Price starts to apply with this cycle. `1` is the first payment cycle for all pricing models. - name: numberOfCycles | type: integer | description: Amount of cycles to apply price for. For `subscription` pricing models with a finite number of cycles, the `numberOfCycles` is the same as `pricing.subscription.cycleCount`. For `subscription` pricing models that are unlimited or until-canceled, the `numberOfCycles` is not returned. For `singlePaymentForDuration` and `singlePaymentUnlimited` pricing models, the `numberOfCycles` is `1`. - name: price | type: Price | description: Order price. - name: subtotal | type: string | description: Price of the order excluding tax, specified as a monetary amount. For example, `"9.99"`. - name: coupon | type: Coupon | description: Coupon applied to the order, from the Coupons API. - name: code | type: string | description: Code of the applied coupon. - name: amount | type: string | description: Total discount of the coupon, as a monetary amount. - name: _id | type: string | description: Coupon GUID. - name: discount | type: string | description: Total discount applied to the order. - name: tax | type: Tax | description: Tax applied to the order. Tax is only applied if the site [has it configured](https://support.wix.com/en/article/pricing-plans-setting-up-tax-collection). - name: name | type: string | description: Name of the tax. For example, VAT. - name: includedInPrice | type: boolean | description: Whether tax is included in the original price. When `false`, tax is added at checkout. - name: rate | type: string | description: Tax rate percentage, as a number between 0 and 100. For example, a 7% tax rate is `"7.00"`. - name: amount | type: string | description: Total tax, specified as a monetary amount. For example, `"3.99"`. - name: total | type: string | description: Price after tax and discount is applied. Specified as a monetary amount, for example, `"13.98"`. If no tax is applied, the amount is the same as `subtotal`. - name: currency | type: string | description: Three-letter currency code in [ISO-4217 alphabetic](https://en.wikipedia.org/wiki/ISO_4217#Active_codes) format. - name: proration | type: string | description: Price change after billing date was change and price was adjusted. Could be positive and negative values. - name: type | type: OrderType | description: How the order was processed. - enum: - UNDEFINED: Undefined order type. - ONLINE: The buyer purchased the plan using the site. - OFFLINE: The buyer made a manual, offline purchase without using the site. - EXTERNAL: The buyer made a purchase through an external payment provider. - name: status | type: OrderStatus | description: Status of the order. - enum: - UNDEFINED: Undefined order status. - DRAFT: Order has been initiated but payment hasn't been processed yet. The plan isn't yet available for use to the buyer. - PENDING: Order has been purchased and its start date is set in the future. - ACTIVE: Order has been processed. The plan is available for use. - PAUSED: Order, and use of the plan, is paused. The order, and use of the plan, can be resumed. - ENDED: Order has completed its duration and is no longer available for use. - CANCELED: Order has been canceled. - name: autoRenewCanceled | type: boolean | description: Whether the order will be canceled at the next payment date. If `true`, the order status will be `CANCELED` and the next payment won't be charged. Omitted for single payment orders. - name: cancellation | type: Cancellation | description: Details about the cancellation of an order. Only present if the status is `CANCELED`. - name: requestedDate | type: Date | description: Date and time the cancellation was requested. - name: cause | type: CancellationCause | description: Reason for the cancellation. - enum: - UNDEFINED: Undefined cancellation cause. - OWNER_ACTION: Wix user canceled the order. - MEMBER_ACTION: Buyer initiated the cancellation. - PAYMENT_FAILURE: Payment transaction failed. - PAYMENT_SETUP_FAILURE: Buyer's payment details weren't set up correctly. - UNKNOWN: Reason for the cancellation is unknown. - name: effectiveAt | type: CancellationEffectiveAt | description: When the cancellation takes effect. Set when cancelling the order. - 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. - name: lastPaymentStatus | type: PaymentStatus | description: Status of the last payment for the order. Updated automatically for online orders. Updated manually by the Wix user for offline orders. - enum: - UNDEFINED: Undefined payment status. - PAID: Payment has been paid. - REFUNDED: Payment has been refunded. - FAILED: Payment transaction didn't complete. - UNPAID: Payment has not been paid. - PENDING: Billing has been initialized, but actual charge is yet to be made. This can happen for free trials and payments made with PayPal. - NOT_APPLICABLE: No payment was necessary. For example, for free plans or free trials. - name: startDate | type: Date | description: Start date and time for the ordered plan. - name: endDate | type: Date | description: Current end date and time for the ordered plan. `endDate` may be updated over the course of an order. If the order is paused, it will have a later `endDate` once it is resumed. `endDate` may also be postponed. Omitted if the order is valid until canceled and still `ACTIVE`. - name: pausePeriods | type: array | description: List of periods during which the order is paused. - name: status | type: Status | description: Status of the pause period. - enum: - UNDEFINED: Undefined status. - ACTIVE: Status while the order is paused. - ENDED: Status when the order is resumed. - name: pauseDate | type: Date | description: Start date and time of the pause period. - name: resumeDate | type: Date | description: End date and time of the pause period. Omitted while the pause period remains `ACTIVE`. - name: freeTrialDays | type: integer | description: Free trial period for the order, in days. Only available for recurring plans. - name: earliestEndDate | type: Date | description: Earliest end date and time that the plan for the order can expire. Calculated by using the original end date plus any pause periods. Omitted if the order is active until canceled. Reserved for future use. - name: currentCycle | type: CurrentCycle | description: Current payment cycle for the order. `currentCycle` will be omitted if the order's status is `CANCELED` or `ENDED`, or if the `startDate` hasn't passed yet. - name: index | type: integer | description: Index of the current payment cycle in the order. `0` when order is in a free trial period. In all other cases, the index starts with `1`. - name: startedDate | type: Date | description: Start date and time for the current payment cycle. - name: endedDate | type: Date | description: End date and time for the current payment cycle. - name: planName | type: string | description: Plan name at the time of purchase. - name: planDescription | type: string | description: Plan description at the time of purchase - name: planPrice | type: string | description: Plan price as it was at the moment of order creation. - name: _createdDate | type: Date | description: Date and time the order was created. - name: _updatedDate | type: Date | description: Date and time the order was updated. - name: formData | type: FormData | description: Information about the form submitted during the plan's checkout. - name: formId | type: string | description: GUID of the [order form](https://dev.wix.com/docs/rest/api-reference/wix-forms/form-submissions/introduction.md) associated with the plan at checkout. - name: submissionId | type: string | description: GUID of a submission to the plan's order form at checkout. Every time a visitor completes the checkout process for a plan, a new submission is created. - name: submissionData | type: Map | description: Data submitted to the plan's order form at checkout. - ONE-OF: - name: nullValue | type: | description: - name: numberValue | type: number | description: - name: stringValue | type: string | description: - name: boolValue | type: boolean | description: - name: structValue | type: object | description: - name: listValue | type: ListValue | description: - name: values | type: array | description: Possible Errors: HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: invalid_sort_field | Description: Invalid sort field specified. HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: MEMBER_DOESNT_EXIST | Description: Member doesn't exist. HTTP Code: 400 | Status Code: INVALID_ARGUMENT | Application Code: undefined_not_allowed | Description: Undefined values aren't allowed. HTTP Code: 403 | Status Code: PERMISSION_DENIED | Application Code: meta_site_id_missing | Description: Meta site GUID is missing. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: MISSING_BUSINESS_ADDRESS_STATE | Description: Business address state is missing. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: MISSING_BUSINESS_ADDRESS_COUNTRY | Description: Business address country is missing. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_INVALID_SUBTOTAL | Description: Subtotal is invalid for the applied coupon. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_NOT_APPLICABLE_FOR_PLAN | Description: Coupon can't be applied to this plan. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_DOES_NOT_EXIST | Description: Coupon doesn't exist. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_HAS_EXPIRED | Description: Coupon has expired. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_IS_NOT_ACTIVE_YET | Description: Coupon isn't active yet. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_LIMIT_PER_CUSTOMER_EXCEEDED | Description: Coupon limit per customer exceeded. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_USAGE_EXCEEDED | Description: Coupon usage limit exceeded. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: ERROR_COUPON_IS_DISABLED | Description: Coupon is disabled and can't be applied. HTTP Code: 428 | Status Code: FAILED_PRECONDITION | Application Code: PRICING_PLANS_NOT_INSTALLED | Description: Pricing Plans app isn't installed on the site. ``` ### Examples ### Create an offline order with options (with elevated permissions) ```javascript import { orders } from '@wix/pricing-plans'; import { auth } from '@wix/essentials'; /* * Sample planId value: 'cb4a8c57-273a-4567-94e3-cc43d5d339f2' * * Sample memberId value: '554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4' * * Sample options value: * { * couponCode: 'e4ddd93a-5601-4696-99dd-3356f0e558c0', * paid: true, * startDate: '2024-01-29T11:50:21.041Z', * submissionId: '9e128ddb-f62f-4a4a-adb5-064af40f18db' * } */ const elevatedCreateOfflineOrder = auth.elevate(orders.createOfflineOrder); export async function myCreateOfflineOrderFunctionWithOptions(planId, memberId, options) { try { const newOrder = await elevatedCreateOfflineOrder(planId, memberId, options); return newOrder; } catch (error) { console.error(error); // Handle the error } } /* Promise resolves to: * { * order: { * "_createdDate": "2024-01-28T09:49:21.041Z", * "_id": "82d99338-5653-459a-a751-b57483f7cfb5", * "_updatedDate": "2024-01-28T09:49:21.041Z", * "autoRenewCanceled": false, * "buyer": { * "contactId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4", * "memberId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4" * }, * "cycles": [ * { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * } * ], * "currentCycle": { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * }, * "endDate": "2026-04-27T09:49:21.041Z", * "earliestEndDate": "2026-04-27T09:49:21.041Z", * "formData": { * "formId": "3ef36359-24bd-471a-aa8b-a5ca683b50f4", * "submissionData": {}, * "submissionId": "e65d5d60-7e07-4d2f-971f-e471dcebd0d2" * }, * "freeTrialDays": 90, * "lastPaymentStatus": "UNPAID", * "pausePeriods": [], * "planDescription": "3 mo free trial with discount for 1 year", * "planId": "cb4a8c57-273a-4567-94e3-cc43d5d339f2", * "planName": "Beginner's Plan", * "planPrice": "50", * "pricing": { * "prices": [ * { * "duration": { * "cycleFrom": 1, * "numberOfCycles": 2 * }, * "price": { * "currency": "USD", * "discount": "0", * "fees": [], * "proration": "0", * "subtotal": "50.00", * "total": "50.00" * } * } * ], * "subscription": { * "cycleCount": 2, * "cycleDuration": { * "count": 1, * "unit": "YEAR" * } * } * }, * "startDate": "2024-01-28T09:49:21.041Z", * "status": "ACTIVE", * "statusNew": "DRAFT", * "subscriptionId": "305f8fc9-3724-4cac-9f67-4e29f2c46def", * "type": "OFFLINE", * "wixPayOrderId": "2f0e79d8-f15d-46c6-ac1a-10ec7a2030fb" * } * } */ ``` ### Create an offline order with options ```javascript import { orders } from '@wix/pricing-plans'; /* * Sample planId value: 'cb4a8c57-273a-4567-94e3-cc43d5d339f2' * * Sample memberId value: '554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4' * * Sample options value: * { * couponCode: 'e4ddd93a-5601-4696-99dd-3356f0e558c0', * paid: true, * startDate: '2024-01-29T11:50:21.041Z', * submissionId: '9e128ddb-f62f-4a4a-adb5-064af40f18db' * } */ export async function myCreateOfflineOrderFunctionWithOptions(planId, memberId, options) { try { const newOrder = await orders.createOfflineOrder(planId, memberId, options); return newOrder; } catch (error) { console.error(error); // Handle the error } } /* Promise resolves to: * { * order: { * "_createdDate": "2024-01-28T09:49:21.041Z", * "_id": "82d99338-5653-459a-a751-b57483f7cfb5", * "_updatedDate": "2024-01-28T09:49:21.041Z", * "autoRenewCanceled": false, * "buyer": { * "contactId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4", * "memberId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4" * }, * "cycles": [ * { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * } * ], * "currentCycle": { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * }, * "endDate": "2026-04-27T09:49:21.041Z", * "earliestEndDate": "2026-04-27T09:49:21.041Z", * "formData": { * "formId": "3ef36359-24bd-471a-aa8b-a5ca683b50f4", * "submissionData": {}, * "submissionId": "e65d5d60-7e07-4d2f-971f-e471dcebd0d2" * }, * "freeTrialDays": 90, * "lastPaymentStatus": "UNPAID", * "pausePeriods": [], * "planDescription": "3 mo free trial with discount for 1 year", * "planId": "cb4a8c57-273a-4567-94e3-cc43d5d339f2", * "planName": "Beginner's Plan", * "planPrice": "50", * "pricing": { * "prices": [ * { * "duration": { * "cycleFrom": 1, * "numberOfCycles": 2 * }, * "price": { * "currency": "USD", * "discount": "0", * "fees": [], * "proration": "0", * "subtotal": "50.00", * "total": "50.00" * } * } * ], * "subscription": { * "cycleCount": 2, * "cycleDuration": { * "count": 1, * "unit": "YEAR" * } * } * }, * "startDate": "2024-01-28T09:49:21.041Z", * "status": "ACTIVE", * "statusNew": "DRAFT", * "subscriptionId": "305f8fc9-3724-4cac-9f67-4e29f2c46def", * "type": "OFFLINE", * "wixPayOrderId": "2f0e79d8-f15d-46c6-ac1a-10ec7a2030fb" * } * } */ ``` ### Create an offline order for an existing member (with $w) This example provides a dropdown list of site members and public plans to complete a manual offline transaction. ```javascript /********************************** * Backend code - utils.web.js/ts * *********************************/ import { Permissions, webMethod } from '@wix/web-methods'; import { orders, plans } from '@wix/pricing-plans'; import { auth } from '@wix/essentials'; const elevatedListPublicPlans = auth.elevate(plans.listPublicPlans); const elevatedCreateOfflineOrder = auth.elevate(orders.createOfflineOrder); const elevatedMarkAsPaid = auth.elevate(orders.markAsPaid); export const listPublicPlans = webMethod( Permissions.Anyone, async () => { try { const plansResponse = await elevatedListPublicPlans(); const plans = plansResponse.plans; return plans; } catch (error) { console.error(error); // Handle the error } }); export const createOfflineOrder = webMethod( Permissions.Anyone, async (planId, memberId) => { try { const newOrder = await elevatedCreateOfflineOrder(planId, memberId); return newOrder; } catch (error) { console.error(error); // Handle the error } }); export const markAsPaid = webMethod( Permissions.Anyone, async (orderId) => { try { await elevatedMarkAsPaid(orderId); return; } catch (error) { console.error(error); // Handle the error } }); /************* * Page code * *************/ import { createOfflineOrder, listPublicPlans, markAsPaid } from 'backend/utils.web'; import { members } from '@wix/members'; $w.onReady(async function () { $w('#newOrderBtn').disable(); await populatePlansDropdown(); let planId; let memberId; // Populate #membersDropdown const membersQueryResults = await members.queryMembers().find(); $w('#membersListDropdown').options = membersQueryResults.items.map(member => { return { label: member.profile.nickname, value: member._id } }); $w('#membersListDropdown').onChange(() => { memberId = $w('#membersListDropdown').value; }); $w('#plansDropdown').onChange(() => { planId = $w('#plansDropdown').value; $w('#newOrderBtn').enable(); }); $w('#newOrderBtn').onClick(async () => { const newOrder = await createOfflineOrder(planId, memberId); const orderId = newOrder.order._id; markAsPaid(orderId); }); }); async function populatePlansDropdown() { const plans = await listPublicPlans(); $w('#plansListDropdown').options = plans.map((item) => { return { label: item.name, value: item._id } }); } ``` ### Create an offline order (with elevated permissions) ```javascript import { orders } from '@wix/pricing-plans'; import { auth } from '@wix/essentials'; /* Sample planId value: 'cb4a8c57-273a-4567-94e3-cc43d5d339f2' * * Sample memberId value: '554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4' */ const elevatedCreateOfflineOrder = auth.elevate(orders.createOfflineOrder); export async function myCreateOfflineOrderFunction(planId, memberId) { try { const newOrder = await elevatedCreateOfflineOrder(planId, memberId); return newOrder; } catch (error) { console.error(error); // Handle the error } } /* Promise resolves to: * { * "_createdDate": "2024-01-28T09:49:21.041Z", * "_id": "82d99338-5653-459a-a751-b57483f7cfb5", * "_updatedDate": "2024-01-28T09:49:21.041Z", * "autoRenewCanceled": false, * "buyer": { * "contactId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4", * "memberId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4" * }, * "currentCycle": { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * }, * "cycles": [ * { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * } * ], * "earliestEndDate": "2026-04-27T09:49:21.041Z", * "endDate": "2026-04-27T09:49:21.041Z", * "formData": { * "submissionData": { * "formId": "3ef36359-24bd-471a-aa8b-a5ca683b50f4", * "submissionData": {}, * "submissionId": "e65d5d60-7e07-4d2f-971f-e471dcebd0d2" * }, * }, * "freeTrialDays": 90, * "lastPaymentStatus": "UNPAID", * "pausePeriods": [], * "planDescription": "3 mo free trial with discount for 1 year", * "planId": "cb4a8c57-273a-4567-94e3-cc43d5d339f2", * "planName": "Beginner's Plan", * "planPrice": "50", * "pricing": { * "prices": [ * { * "duration": { * "cycleFrom": 1, * "numberOfCycles": 2 * }, * "price": { * "currency": "USD", * "discount": "0", * "fees": [], * "proration": "0", * "subtotal": "50.00", * "total": "50.00" * } * } * ], * "subscription": { * "cycleCount": 2, * "cycleDuration": { * "count": 1, * "unit": "YEAR" * } * } * }, * "startDate": "2024-01-28T09:49:21.041Z", * "statusNew": "DRAFT", * "subscriptionId": "305f8fc9-3724-4cac-9f67-4e29f2c46def", * "type": "OFFLINE", * "wixPayOrderId": "2f0e79d8-f15d-46c6-ac1a-10ec7a2030fb" * } */ ``` ### Create an offline order ```javascript import { orders } from '@wix/pricing-plans'; /* Sample planId value: 'cb4a8c57-273a-4567-94e3-cc43d5d339f2' * * Sample memberId value: '554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4' */ export async function myCreateOfflineOrderFunction(planId, memberId) { try { const newOrder = await orders.createOfflineOrder(planId, memberId); return newOrder; } catch (error) { console.error(error); // Handle the error } } /* Promise resolves to: * { * "_createdDate": "2024-01-28T09:49:21.041Z", * "_id": "82d99338-5653-459a-a751-b57483f7cfb5", * "_updatedDate": "2024-01-28T09:49:21.041Z", * "autoRenewCanceled": false, * "buyer": { * "contactId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4", * "memberId": "554c9e11-f4d8-4579-ac3a-a17f7e6cb0b4" * }, * "currentCycle": { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * }, * "cycles": [ * { * "endedDate": "2024-04-27T09:49:21.041Z", * "index": 0, * "startedDate": "2024-01-28T09:49:21.041Z" * } * ], * "earliestEndDate": "2026-04-27T09:49:21.041Z", * "endDate": "2026-04-27T09:49:21.041Z", * "formData": { * "submissionData": { * "formId": "3ef36359-24bd-471a-aa8b-a5ca683b50f4", * "submissionData": {}, * "submissionId": "e65d5d60-7e07-4d2f-971f-e471dcebd0d2" * }, * }, * "freeTrialDays": 90, * "lastPaymentStatus": "UNPAID", * "pausePeriods": [], * "planDescription": "3 mo free trial with discount for 1 year", * "planId": "cb4a8c57-273a-4567-94e3-cc43d5d339f2", * "planName": "Beginner's Plan", * "planPrice": "50", * "pricing": { * "prices": [ * { * "duration": { * "cycleFrom": 1, * "numberOfCycles": 2 * }, * "price": { * "currency": "USD", * "discount": "0", * "fees": [], * "proration": "0", * "subtotal": "50.00", * "total": "50.00" * } * } * ], * "subscription": { * "cycleCount": 2, * "cycleDuration": { * "count": 1, * "unit": "YEAR" * } * } * }, * "startDate": "2024-01-28T09:49:21.041Z", * "statusNew": "DRAFT", * "subscriptionId": "305f8fc9-3724-4cac-9f67-4e29f2c46def", * "type": "OFFLINE", * "wixPayOrderId": "2f0e79d8-f15d-46c6-ac1a-10ec7a2030fb" * } */ ``` ### createOfflineOrder (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 createOfflineOrder(planId,memberId,options) { const response = await myWixClient.orders.createOfflineOrder(planId,memberId,options); }; ``` ---