Enrolling a member in an online program can require payment, and how that payment happens depends on how the program is priced. A free program needs no payment at all, while a priced program, a program connected to pricing plans, and an offline payment each move through a different sequence of payment statuses before the member becomes a participant.
This article describes the statuses a join application tracks, the flow for each payment method, and the conditions that create a participant. For the methods to call in a full implementation, see Sample Flows.
A join application tracks 2 independent statuses.
status reflects where the application sits in the approval workflow:
| Status | Description |
|---|---|
INVITED | The Wix user invited the member, who hasn't yet accepted. |
APPROVAL_PENDING | The member applied and the Wix user hasn't yet decided. |
APPROVED | The application is approved. Payment may still be required before the member is enrolled. |
CANCELLED | The member canceled their own application. |
DECLINED | The Wix user declined the application. |
SUSPENDED | The connected participant is suspended because the related Pricing Plans subscription expired. A successful new payment resumes the flow. |
paymentStatus tracks the payment lifecycle:
| Status | Description |
|---|---|
NO_PAYMENT_REQUIRED | Payment isn't needed, because the program is free or the member already has a plan that covers it. |
PAYMENT_PENDING | Payment is required and the member hasn't started it. |
PAYMENT_IN_PROGRESS | A payment order exists and the member is completing checkout. |
PENDING_OWNER_APPROVAL | The member submitted an offline payment that the Wix user must approve or decline. |
PAYMENT_SUCCESSFUL | Payment completed successfully. |
PAYMENT_FAILED | The payment system declined the payment, or the Wix user rejected an offline transaction. |
PAYMENT_CANCELED | The member canceled the payment. |
Status transitions are unidirectional and specific to the current status. For example, you can only approve an application that's in APPROVAL_PENDING.
The flows below describe how paymentStatus moves for each way a member can pay.
When a program has no price and no connected pricing plans, the join application is created with paymentStatus set to NO_PAYMENT_REQUIRED.
paymentStatus set to NO_PAYMENT_REQUIRED.status is set to APPROVED and a participant is created automatically.status is set to APPROVAL_PENDING and the Wix user must approve it.When a program has a price, the member must complete payment before becoming a participant.
paymentStatus set to PAYMENT_PENDING.paymentType set to SINGLE_PAYMENT.PAYMENT_SUCCESSFUL and no checkout is needed.paymentStatus becomes PAYMENT_IN_PROGRESS.paymentInfo.paymentOrderId with the Wix payment checkout flow.paymentStatus becomes PAYMENT_SUCCESSFUL. If status is APPROVED, a participant is created automatically.When a program is connected to pricing plans, members can pay through a plan subscription.
paymentStatus is PAYMENT_SUCCESSFUL and the plan IDs are in paymentInfo.paidPlanIds. Otherwise, paymentStatus is PAYMENT_PENDING.paymentType set to 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.paymentStatus becomes PAYMENT_IN_PROGRESS.paymentStatus becomes PAYMENT_SUCCESSFUL and the plan IDs are in paymentInfo.paidPlanIds.Offline payments let members pay manually, by cash, check, or bank transfer. The Wix user must approve the transaction.
paymentStatus set to PAYMENT_PENDING.paymentStatus becomes PENDING_OWNER_APPROVAL.paymentStatus becomes PAYMENT_SUCCESSFUL and a participant is created.paymentStatus becomes PAYMENT_FAILED and the join application is cleaned up.A coupon reduces the payment amount at checkout.
PAYMENT_IN_PROGRESS, following Prepare Payment.paymentInfo.couponId is populated.Apply Coupon, Remove Coupon, and Complete Free Coupon Payment are also accepted when paymentStatus is PAYMENT_FAILED or PAYMENT_CANCELED. This lets a member set up or change a coupon and retry without calling Prepare Payment first. If the coupon makes the order free, the retry can be closed out directly:
A participant is created automatically when both of these conditions are met:
status is APPROVED.paymentStatus is NO_PAYMENT_REQUIRED or PAYMENT_SUCCESSFUL.Once the participant exists, participantId is populated on the join application, linking the application to the resulting participant.
Last updated: 24 August 2026