> 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

## Resource: Introduction

## Article: Introduction

## Article Link: https://dev.wix.com/docs/api-reference/business-management/online-programs/programs/introduction.md

## Article Content:

# About the Programs API

The Programs API manages the Online Programs that site owners create for courses, challenges, coaching journeys, and other structured experiences. A program contains public-facing information, scheduling rules, access restrictions, optional pricing, SEO settings, rewards, and summary counts for its sections and steps.

Use this API for both owner-facing program management and visitor or member-facing program discovery. The programs a caller can retrieve depend on the caller identity and the program's access restrictions.

With the Programs API, you can:

+ Create draft programs.
+ Update program details, timeline, access, pricing, SEO, rewards, and video step settings.
+ Publish programs when they are ready for participants.
+ Query and search programs for management or public discovery.
+ Duplicate existing programs or templates.
+ End or archive programs when they should no longer accept normal participation.
+ Count matching programs for dashboards and filters.

Programs are usually used together with other Online Programs APIs. Use the Steps and Sections APIs to manage program content, the Categories API to organize programs, the Join Applications API to handle enrollment and payment flows, and the Participants API to manage enrolled members and progress.

## Program lifecycle

Programs move through these statuses:

| Status | Description |
|--------|-------------|
| `DRAFT` | The program is editable and visible only in management contexts. |
| `PUBLISHED` | The program is available according to its access restrictions. |
| `ENDED` | The program is no longer available for new participation, but remains visible where applicable. |
| `ARCHIVED` | The program is closed and removed from normal public discovery. |

## Timeline modes

A program can be self-paced or scheduled:

+ Self-paced programs let participants progress at their own pace.
+ Scheduled programs use `timeline.startDate` and `timeline.durationInDays` to determine the program period.

When a published scheduled program reaches its end date, the service schedules an automatic transition to `ENDED`. The transition timing uses the site's timezone.

## Access restrictions

The `restrictions.accessType` field controls who can discover and join a program:

| Access type | Description |
|-------------|-------------|
| `PUBLIC` | Anyone who can access the site can discover the program and start the join flow. |
| `PRIVATE` | The program can be discovered, but joining requires owner approval. |
| `SECRET` | The program is hidden from public discovery and visible only to participants, owners, and trusted apps. |

## Before you begin

It's important to note the following points before starting to code:

+ New programs are created as drafts. Publish a draft to make it available according to its access restrictions.
+ Ended and archived programs can't be updated.
+ Programs with active participants can't switch timeline settings.
+ A scheduled program can't be published with a start date in the past.
+ `categoryIds` is read-only on the Program object. Use the Categories API to assign categories to a program.
+ Programs store one-time payment prices. The Join Applications API handles enrollment and payment flows, including payment with Pricing Plans or Coupons.
+ Secret programs are visible only to participants, owners, and trusted apps.
+ Archived programs have their SEO slug replaced with the program ID so that the original slug can be reused.

## Use cases

+ [Create a draft program](https://dev.wix.com/docs/api-reference/business-management/online-programs/programs/sample-flows.md#create-a-draft-program).
+ [Publish a program](https://dev.wix.com/docs/api-reference/business-management/online-programs/programs/sample-flows.md#publish-a-program).
+ [Update program details](https://dev.wix.com/docs/api-reference/business-management/online-programs/programs/sample-flows.md#update-program-details).
+ [Query and search programs](https://dev.wix.com/docs/api-reference/business-management/online-programs/programs/sample-flows.md#query-and-search-programs).
+ [Duplicate a program](https://dev.wix.com/docs/api-reference/business-management/online-programs/programs/sample-flows.md#duplicate-a-program).
+ [End, archive, or delete a program](https://dev.wix.com/docs/api-reference/business-management/online-programs/programs/sample-flows.md#end-archive-or-delete-a-program).

## Terminology

+ **Program**: A course, challenge, coaching journey, or other structured experience created on a Wix site.
+ **Draft program**: A program that can be edited and isn't visible to members or visitors.
+ **Published program**: A program that's available according to its access restrictions.
+ **Participant**: A member enrolled in a program.
+ **Join application**: A request or invitation to enroll in a program.

## See also

+ Programs API: create and manage program records.
+ Program Categories API: assign and organize categories for programs.
+ Program Sections API and Program Steps API: manage program content.
+ Join Applications API: manage applications, invitations, approvals, payment preparation, Pricing Plans, and Coupons.
+ Participants API: manage enrolled members and progress.

@sdk_package_setup