The Join Applications API manages the complete workflow for program participation, from initial application or invitation through approval and payment processing to final enrollment. It supports both member-initiated applications where users request to join programs, and owner-initiated invitations where program owners invite specific members to participate.
With the Join Applications API, you can:
The API integrates seamlessly with Wix's member ecosystem, payment systems, and pricing plans to provide a complete program enrollment solution. Join applications maintain a comprehensive audit trail through status change events and support both one-time payments and subscription-based program access.
It's important to note the following points before starting to code:
DECLINED and CANCELLED are terminal statuses. The service removes applications in either status asynchronously.This API supports these primary business flows:
The payment_status field tracks the payment lifecycle for a join application:
| Status | Description |
|---|---|
NO_PAYMENT_REQUIRED | Payment is not needed. This occurs when the program is free or when the member already has a valid pricing plan that covers the program. |
PAYMENT_PENDING | Payment is required from the member. The join application is waiting for the member to initiate the payment process. |
PAYMENT_IN_PROGRESS | A payment order has been created and the member is completing the checkout. The system is waiting for payment confirmation. |
PENDING_OWNER_APPROVAL | An offline (manual) payment has been submitted by the member. The site owner must approve or decline the transaction. |
PAYMENT_SUCCESSFUL | Payment has been completed successfully. The join application can proceed to participant creation if the status is APPROVED. |
PAYMENT_FAILED | Payment was declined by the payment system or an offline transaction was rejected by the owner. The member can retry payment by calling PreparePayment again. |
PAYMENT_CANCELED | Payment was canceled by the member. The member can retry payment by calling PreparePayment again. |
This section describes the payment flows from both member and owner perspectives.
When a program has no price and no connected pricing plans, the join application is created with NO_PAYMENT_REQUIRED status.
Member perspective:
CreateJoinApplication for a free program.payment_status: NO_PAYMENT_REQUIRED.status is set to APPROVED and a participant is automatically created.status is set to APPROVAL_PENDING and the owner must approve.Status transitions:
When a program has a price, members must complete payment before becoming participants.
Member perspective:
CreateJoinApplication for a paid program.payment_status: PAYMENT_PENDING.PreparePayment with payment_type: SINGLE_PAYMENT.PAYMENT_SUCCESSFUL and no checkout is needed.payment_status: PAYMENT_IN_PROGRESS.paymentInfo.paymentOrderId with the Wix payment checkout flow.payment_status becomes PAYMENT_SUCCESSFUL.status is APPROVED, a participant is automatically created.Status transitions:
Error scenarios:
MISSING_PAYMENT_ORDER: PreparePayment was not called before attempting payment operations.INVALID_PAYMENT_STATUS: Payment operation attempted in an invalid state. PreparePayment is supported from PAYMENT_PENDING, PAYMENT_FAILED, and PAYMENT_CANCELED; an already successful Pricing Plans payment can be returned without creating a new checkout.When a program is connected to pricing plans, members can pay through plan subscriptions.
Member perspective:
CreateJoinApplication for a program with connected pricing plans.payment_status: PAYMENT_SUCCESSFUL and plan IDs in payment_info.paid_plan_ids.payment_status: PAYMENT_PENDING.PreparePayment with payment_type: PAID_PLANS.PAYMENT_PENDING application to PAYMENT_SUCCESSFUL and returns the eligible plan IDs. No purchase is needed, even if that plan is no longer available for purchase.payment_status: PAYMENT_IN_PROGRESS.payment_status becomes PAYMENT_SUCCESSFUL with plan IDs in payment_info.paid_plan_ids.Status transitions:
Error scenarios:
NO_PAID_PLAN_CONNECTED: No pricing plans are connected to the program.PRICING_PLANS_NOT_INSTALLED: Pricing Plans app is not installed on the site.Offline payments allow members to pay through manual methods (cash, check, bank transfer). The site owner must approve these transactions.
Member perspective:
payment_status: PAYMENT_PENDING.OfflineTransactionCreated event.payment_status changes to PENDING_OWNER_APPROVAL.Owner perspective:
payment_status: PAYMENT_SUCCESSFUL → Participant created.payment_status: PAYMENT_FAILED → Join application is cleaned up.Status transitions:
Coupons can be applied to reduce the payment amount during checkout.
Member perspective:
payment_status: PAYMENT_IN_PROGRESS (after PreparePayment).ApplyCoupon with the coupon code.payment_info.coupon_id is populated with the applied coupon ID.Status transitions:
Retry after a failed or canceled payment:
ApplyCoupon, RemoveCoupon, and CompleteFreeCouponPayment are also accepted
when payment_status is PAYMENT_FAILED or PAYMENT_CANCELED. This lets a
member set up or change a coupon and retry without first calling PreparePayment.
If the coupon makes the order free, the retry can be closed out directly:
Error scenarios:
COUPON_NOT_FOUND: The coupon code is invalid.COUPON_ALREADY_APPLIED: A coupon is already applied to this order.MISSING_PAYMENT_ORDER: No payment order exists to apply the coupon to.INVALID_PAYMENT_STATUS: Coupon operation attempted in an invalid state. ApplyCoupon, RemoveCoupon, and CompleteFreeCouponPayment are supported from PAYMENT_IN_PROGRESS, PAYMENT_FAILED, and PAYMENT_CANCELED.A participant is automatically created when both conditions are met:
status is APPROVEDpayment_status is either NO_PAYMENT_REQUIRED or PAYMENT_SUCCESSFULThe participant_id field is populated on the join application once the participant is created, linking the application to the resulting participant entity.
Last updated: 24 August 2026