> 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 # SearchPrograms # Package: programsOld # Namespace: ProgramsService # Method link: https://dev.wix.com/docs/api-reference/business-management/online-programs/programs-old/program/search-programs.md ## Permission Scopes: Wix Multilingual - Nile Wrapper Domain Events Read: SCOPE.MULTILINGUAL.NILE_WRAPPER_DOMAIN_EVENTS_READ ## Introduction Searches programs by title and structured filters. Use this method when you need full-text search over `description.title`. Results are visibility-filtered according to the caller identity. --- ## REST API ### Schema ``` Method: searchPrograms Description: Searches programs by title and structured filters. Use this method when you need full-text search over `description.title`. Results are visibility-filtered according to the caller identity. URL: https://www.wixapis.com/online-programs/v3/programs/search Method: POST Method parameters: param name: search | type: CursorSearch - name: cursorPaging | type: CursorPaging | description: Cursor paging options. Learn more about [cursor paging](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/data-retrieval/about-sorting-and-paging.md). - name: limit | type: integer | description: Maximum number of items to return in the results. | validation: minimum 0, maximum 100, format int32 - name: cursor | type: string | description: Pointer to the next or previous page in the list of results. Pass the relevant cursor token from the `pagingMetadata` object in the previous call's response. Not relevant for the first request. | validation: maxLength 16000 - name: filter | type: object | description: Filter object. Learn more about [API Query Language](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/data-retrieval/about-the-wix-api-query-language.md). - name: sort | type: array | description: List of sort objects. Learn more about [Sorting and Paging](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/data-retrieval/about-sorting-and-paging.md). | validation: maxItems 10 - name: fieldName | type: string | description: Name of the field to sort by. | validation: maxLength 512 - name: order | type: SortOrder | description: Sort order. - enum: ASC, DESC - name: aggregations | type: array | description: Aggregations are a way to explore large amounts of data by displaying summaries about various partitions of the data and later allowing to narrow the navigation to a specific partition. | validation: maxItems 10 - ONE-OF: - name: value | type: ValueAggregation | description: Value aggregation. - ONE-OF: - name: includeOptions | type: IncludeMissingValuesOptions | description: Options for including missing values. - name: addToBucket | type: string | description: Specify custom bucket name. Defaults are [string -> "N/A"], [int -> "0"], [bool -> "false"] ... | validation: maxLength 20 - name: sortType | type: SortType | description: Whether to sort by number of matches or value of the field. - enum: - COUNT: Sort by number of matches. - VALUE: Sort by value of the field alphabetically. - name: sortDirection | type: SortDirection | description: Whether to sort in ascending or descending order. - enum: - DESC: Sort in descending order. - ASC: Sort in ascending order. - name: limit | type: integer | description: How many aggregations to return. Can be between 1 and 250. 10 is the default. | validation: format int32 - name: missingValues | type: MissingValues | description: Whether to include or exclude missing values from the aggregation results. Default: `EXCLUDE`. - enum: - EXCLUDE: Exclude missing values from the aggregation results. - INCLUDE: Include missing values in the aggregation results. - name: range | type: RangeAggregation | description: Range aggregation. - name: buckets | type: array | description: List of range buckets, where during aggregation each entity will be placed in the first bucket its value falls into, based on the provided range bounds. | validation: maxItems 50 - name: from | type: number | description: Inclusive lower bound of the range. Required if `to` is not provided. | validation: format double - name: to | type: number | description: Exclusive upper bound of the range. Required if `from` is not provided. | validation: format double - name: scalar | type: ScalarAggregation | description: Scalar aggregation. - name: type | type: ScalarType | description: Define the operator for the scalar aggregation. - enum: - COUNT_DISTINCT: Count of distinct values. - MIN: Minimum value. - MAX: Maximum value. - name: dateHistogram | type: DateHistogramAggregation | description: Date histogram aggregation. - name: interval | type: Interval | description: Interval for date histogram aggregation. - enum: - YEAR: Yearly interval - MONTH: Monthly interval - WEEK: Weekly interval - DAY: Daily interval - HOUR: Hourly interval - MINUTE: Minute interval - SECOND: Second interval - name: nested | type: NestedAggregation | description: Nested aggregation. - name: nestedAggregations | type: array | description: Flattened list of aggregations, where each next aggregation is nested within previous one. | validation: minItems 2, maxItems 3 - ONE-OF: - name: value | type: ValueAggregation | description: Value aggregation. - name: range | type: RangeAggregation | description: Range aggregation. - name: scalar | type: ScalarAggregation | description: Scalar aggregation. - name: dateHistogram | type: DateHistogramAggregation | description: Date histogram aggregation. - name: name | type: string | description: User-defined name of aggregation, should be unique, will appear in aggregation results. | validation: maxLength 100 - name: type | type: NestedAggregationType | description: Type of aggregation, client must provide matching aggregation field below. - enum: - VALUE: An aggregation where result buckets are dynamically built - one per unique value. - RANGE: An aggregation, where user can define set of ranges - each representing a bucket. - SCALAR: A single-value metric aggregation. For example, min, max, sum, avg. - DATE_HISTOGRAM: An aggregation, where result buckets are dynamically built - one per time interval (hour, day, week, etc.). - name: fieldPath | type: string | description: Field to aggregate by, use dot notation to specify json path. | validation: maxLength 200 - name: name | type: string | description: User-defined name of aggregation, should be unique, will appear in aggregation results. | validation: maxLength 100 - name: type | type: AggregationType | description: Type of aggregation, client must provide matching aggregation field below. - enum: - VALUE: An aggregation where result buckets are dynamically built - one per unique value. - RANGE: An aggregation, where user can define set of ranges - each representing a bucket. - SCALAR: A single-value metric aggregation. For example, min, max, sum, avg. - DATE_HISTOGRAM: An aggregation, where result buckets are dynamically built - one per time interval (hour, day, week, etc.) - NESTED: Multi-level aggregation, where each next aggregation is nested within previous one. - name: fieldPath | type: string | description: Field to aggregate by, use dot notation to specify json path. | validation: maxLength 200 - name: search | type: SearchDetails | description: Free text to match in searchable fields. - name: mode | type: Mode | description: Defines how separate search terms in `expression` are combined. - enum: - OR: Any of the search terms must be present. - AND: All search terms must be present. - name: expression | type: string | description: Search term or expression. | validation: maxLength 100 - name: fields | type: array | description: Fields to search in. If empty - will search in all searchable fields. Use dot notation to specify json path. | validation: maxItems 20, maxLength 200 - name: fuzzy | type: boolean | description: Whether to use auto fuzzy search (allowing typos by a managed proximity algorithm). - name: timeZone | type: string | description: UTC offset or IANA time zone. Valid values are ISO 8601 UTC offsets, such as +02:00 or -06:00, and IANA time zone GUIDs, such as Europe/Rome. Affects all filters and aggregations returned values. You may override this behavior in a specific filter by providing timestamps including time zone. For example, `"2023-12-20T10:52:34.795Z"`. | validation: maxLength 50 Searchable fields: - field: id | operators: $eq, $ne, $exists, $in, $any, $begins, $gt, $lt, $lte, $gte | sort: ASC, DESC | aggregatable: true | searchable: false - field: description.title | operators: $eq, $ne, $exists, $in, $any, $begins, $gt, $lt, $lte, $gte | sort: ASC, DESC | aggregatable: true | searchable: true - field: status | operators: $eq, $in | sort: ASC, DESC | aggregatable: true | searchable: false - field: createdDate | operators: none | sort: ASC, DESC | aggregatable: false | searchable: false - field: timeline.selfPaced | operators: $eq | sort: none | aggregatable: true | searchable: false - field: restrictions.accessType | operators: $in | sort: none | aggregatable: true | searchable: false - field: updatedDate | operators: none | sort: ASC, DESC | aggregatable: false | searchable: false - field: categoryIds | operators: $hasAll, $hasSome | sort: none | aggregatable: true | searchable: false Return type: SearchProgramsResponse - name: programs | type: array | description: Programs that match the search and caller visibility. - name: id | type: string | description: Program GUID. | validation: format GUID - name: revision | type: string | description: Revision number, which increments by 1 each time the program is updated. To prevent conflicting changes, the current revision must be specified when updating a program. | validation: format int64 - name: createdDate | type: string | description: Date and time the program was created. | validation: format date-time - name: updatedDate | type: string | description: Date and time the program was last updated. | validation: format date-time - name: status | type: Status | description: Current program lifecycle status. - enum: - 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. - ARCHIVED: The program is closed and removed from normal public discovery. - name: statusUpdatedDate | type: string | description: Date and time when `status` last changed. | validation: format date-time - name: categoryIds | type: array | description: Category GUIDs assigned to the program. This field is read-only; use the Program Categories API to assign categories. | validation: maxItems 10, format GUID - name: description | type: Description | description: Public-facing program title, details, and media. - ONE-OF: - name: image | type: Image | description: Program image. - name: id | type: string | description: WixMedia image GUID. - name: url | type: string | description: Image URL. - name: height | type: integer | description: Original image height. - name: width | type: integer | description: Original image width. - name: altText | type: string | description: Image alt text. - name: filename | type: string | description: Image filename. - name: video | type: VideoV2 | description: Program video. - name: id | type: string | description: WixMedia GUID. - name: resolutions | type: array | description: Available resolutions for the video, starting with the optimal resolution. | validation: maxItems 100 - name: url | type: string | description: Video URL. - name: height | type: integer | description: Video height. - name: width | type: integer | description: Video width. - name: format | type: string | description: Video format for example, mp4, hls. - name: filename | type: string | description: Video filename. - name: title | type: string | description: Program title. | validation: maxLength 150 - name: details | type: string | description: Detailed program description. | validation: maxLength 8000 - name: timeline | type: Timeline | description: Program timeline settings. Use this to configure self-paced or scheduled programs. - name: selfPaced | type: boolean | description: Whether participants can progress at their own pace. - name: startDate | type: string | description: Local date when the scheduled program starts. | validation: format LOCAL_DATE - name: durationInDays | type: integer | description: Scheduled program duration in days. | validation: format int32 - name: restrictions | type: Restrictions | description: Program access, participation, and progression rules. - name: maxParticipants | type: integer | description: Maximum number of active participants allowed in the program. | validation: minimum 1, format int32 - name: hideFutureSteps | type: boolean | description: Whether future steps are hidden from participants until they become available. - name: resolveStepsInOrder | type: boolean | description: Whether participants must complete steps in order. - name: shareProgress | type: boolean | description: Whether participants can share progress in the connected group. - name: accessType | type: AccessType | description: Program discovery and join access. - enum: - 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. - name: price | type: Money | description: Optional one-time payment price for joining the program. - name: value | type: string | description: Monetary amount. Decimal string with a period as a decimal separator (e.g., 3.99). | validation: decimalValue {"gt":"0.00","maxScale":3} - name: currency | type: string | description: Currency code. Must be valid ISO 4217 currency code (e.g., USD). | validation: format CURRENCY - name: seo | type: Seo | description: SEO settings used for the program page. - name: slug | type: string | description: Unique URL slug for the program page. | validation: format URL_SLUG - name: seoData | type: SeoSchema | description: Advanced SEO schema data. - name: tags | type: array | description: SEO tag information. - name: type | type: string | description: SEO tag type. Supported values: `title`, `meta`, `script`, `link`. - name: props | type: object | description: A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value. For example: `{"name": "description", "content": "the description itself"}`. - name: meta | type: object | description: SEO tag metadata. For example, `{"height": 300, "width": 240}`. - name: children | type: string | description: SEO tag inner content. For example, ` inner content `. - name: custom | type: boolean | description: Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages). - name: disabled | type: boolean | description: Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines. - name: settings | type: Settings | description: SEO general settings. - name: preventAutoRedirect | type: boolean | description: Whether the [automatical redirect visits](https://support.wix.com/en/article/customizing-your-pages-seo-settings-in-the-seo-panel) from the old URL to the new one is enabled. Default: `false` (automatical redirect is enabled). - name: keywords | type: array | description: User-selected keyword terms for a specific page. | validation: maxItems 5 - name: term | type: string | description: Keyword value. - name: isMain | type: boolean | description: Whether the keyword is the main focus keyword. - name: origin | type: string | description: The source that added the keyword terms to the SEO settings. | validation: maxLength 1000 - name: url | type: PageUrl | description: Program page URL. - name: base | type: string | description: The base URL. For premium sites, this is the domain. For free sites, this is the site URL. For example, `mysite.wixsite.com/mysite`. - name: path | type: string | description: The relative path for the page within the site. For example, `/product-page/a-product`. - name: imageUrl | type: string | description: Image URL derived from the program description media. | validation: format WEB_URL - name: imageAlt | type: string | description: Alternative text for the SEO image. | validation: maxLength 1000 - name: courseWorkload | type: string | description: Approximate SEO program duration in ISO 8601 duration format. | validation: maxLength 100 - name: rewards | type: array | description: Rewards assigned to participants when they reach configured milestones. | validation: maxItems 10 - name: trigger | type: Trigger | description: Program milestone that grants the reward. If omitted, the trigger defaults to `JOINED_TO_PROGRAM` for compatibility with existing rewards. - enum: - JOINED_TO_PROGRAM: Default trigger for existing rewards. The reward is granted when a member joins the program. - STEP_COMPLETED: The reward is granted when at least one step is completed. - ALL_STEPS_COMPLETED: The reward is granted when all required steps are completed. - name: badgeIds | type: array | description: Badge GUIDs to assign when the reward is granted. | validation: maxItems 50, format GUID - name: certificate | type: Certificate | description: Certificate assigned when the reward is granted. - name: id | type: string | description: Certificate GUID. Currently this is the program GUID. | validation: format GUID - name: connectedDate | type: string | description: Date and time the certificate was connected to the program. | validation: format date-time - name: socialGroupId | type: string | description: GUID of the social group connected to the program, if one exists. | validation: format GUID - name: extendedFields | type: ExtendedFields | description: Custom fields for apps that extend the Program entity. - name: namespaces | type: object | description: Extended field data. Each key corresponds to the namespace of the app that created the extended fields. The value of each key is structured according to the schema defined when the extended fields were configured. You can only access fields for which you have the appropriate permissions. Learn more about [extended fields](https://dev.wix.com/docs/rest/articles/getting-started/extended-fields.md). | validation: format map - name: shouldSendInvoice | type: boolean | description: Whether to send an invoice after a single-payment purchase. When false, the buyer receives a payment confirmation email instead. - name: videoStepsSettings | type: VideoStepsSettings | description: Settings that control how video steps behave in this program. - name: autoNavigate | type: boolean | description: Whether the participant is automatically moved to the next video step after finishing the current one. - name: requiredCompletionPercentage | type: number | description: Percentage of a video that must be watched to complete a video step. - name: contentSummary | type: ContentSummary | description: Read-only counts of content entities in the program. - name: stepCount | type: integer | description: Number of steps in the program. | validation: maximum 3000 - name: sectionCount | type: integer | description: Number of sections in the program. | validation: maximum 1000 - name: ownerUserId | type: string | description: GUID of the site user who created the program. | validation: format GUID - name: pagingMetadata | type: CursorPagingMetadata | description: Cursor paging metadata. - name: count | type: integer | description: Number of items returned in current page. | validation: format int32 - name: cursors | type: Cursors | description: Cursor strings that point to the next page, previous page, or both. - name: next | type: string | description: Cursor string pointing to the next page in the list of results. | validation: maxLength 16000 - name: prev | type: string | description: Cursor pointing to the previous page in the list of results. | validation: maxLength 16000 - name: hasNext | type: boolean | description: Whether there are more pages to retrieve following the current page. + `true`: Another page of results can be retrieved. + `false`: This is the last page. - name: aggregationData | type: AggregationData | description: Aggregation data returned by the search backend. - name: results | type: array | description: key = aggregation name (as derived from search request). | validation: maxItems 10000 - ONE-OF: - name: values | type: ValueResults | description: Value aggregation results. - name: results | type: array | description: List of value aggregations. | validation: maxItems 250 - name: value | type: string | description: Value of the field. | validation: maxLength 100 - name: count | type: integer | description: Count of entities with this value. - name: ranges | type: RangeResults | description: Range aggregation results. - name: results | type: array | description: List of ranges returned in same order as requested. | validation: maxItems 50 - name: from | type: number | description: Inclusive lower bound of the range. | validation: format double - name: to | type: number | description: Exclusive upper bound of the range. | validation: format double - name: count | type: integer | description: Count of entities in this range. - name: scalar | type: ScalarResult | description: Scalar aggregation results. - name: type | type: ScalarType | description: Type of scalar aggregation. - enum: - COUNT_DISTINCT: Count of distinct values. - MIN: Minimum value. - MAX: Maximum value. - name: value | type: number | description: Value of the scalar aggregation. - name: groupedByValue | type: GroupByValueResults | description: Group by value aggregation results. - name: results | type: array | description: List of value aggregations. | validation: maxItems 1000 - name: value | type: string | description: Value of the field. | validation: maxLength 1000 - name: nestedResults | type: NestedAggregationResults | description: Nested aggregations. - ONE-OF: - name: values | type: ValueResults | description: Value aggregation results. - name: ranges | type: RangeResults | description: Range aggregation results. - name: scalar | type: ScalarResult | description: Scalar aggregation results. - name: name | type: string | description: User-defined name of aggregation, matches the one provided in request. | validation: maxLength 100 - name: type | type: AggregationType | description: Type of aggregation that matches result. - enum: - VALUE: An aggregation where result buckets are dynamically built - one per unique value. - RANGE: An aggregation, where user can define set of ranges - each representing a bucket. - SCALAR: A single-value metric aggregation. For example, min, max, sum, avg. - DATE_HISTOGRAM: An aggregation, where result buckets are dynamically built - one per time interval (hour, day, week, etc.) - NESTED: Multi-level aggregation, where each next aggregation is nested within previous one. - name: fieldPath | type: string | description: Field to aggregate by, matches the one provided in request. | validation: maxLength 200 - name: dateHistogram | type: DateHistogramResults | description: Date histogram aggregation results. - name: results | type: array | description: List of date histogram aggregations. | validation: maxItems 200 - name: value | type: string | description: Date in ISO 8601 format. | validation: maxLength 100 - name: count | type: integer | description: Count of documents in the bucket. - name: nested | type: NestedResults | description: Nested aggregation results. - name: results | type: array | description: List of nested aggregations. | validation: maxItems 1000 - name: results | type: Map | description: List of nested aggregations. | validation: format map - ONE-OF: - name: value | type: ValueResult | description: Value aggregation result. - name: value | type: string | description: Value of the field. | validation: maxLength 1000 - name: count | type: integer | description: Count of entities with this value. | validation: format int32 - name: range | type: RangeResult | description: Range aggregation result. - name: from | type: number | description: Inclusive lower bound of the range. | validation: format double - name: to | type: number | description: Exclusive upper bound of the range. | validation: format double - name: count | type: integer | description: Count of entities in this range. | validation: format int32 - name: scalar | type: ScalarResult | description: Scalar aggregation result. - name: value | type: number | description: Value of the scalar aggregation. - name: dateHistogram | type: ValueResult | description: Date histogram aggregation result. - name: name | type: string | description: User-defined name of aggregation as derived from search request. | validation: maxLength 100 - name: type | type: AggregationType | description: Type of aggregation that must match provided kind as derived from search request. - name: fieldPath | type: string | description: Field to aggregate by as derived from search request. | validation: maxLength 200 ``` ### Examples ### Search programs by title Searches programs by title and filters to public or private published programs. ```curl curl -X POST \ 'https://www.wixapis.com/online-programs/v3/programs/search' \ -H 'Authorization: ' \ -H 'Content-Type: application/json' \ -d '{ "search": { "search": { "expression": "wellness" }, "filter": { "status": { "$eq": "PUBLISHED" }, "restrictions.accessType": { "$in": [ "PUBLIC", "PRIVATE" ] } }, "cursorPaging": { "limit": 20 } } }' ``` --- ## JavaScript SDK ### Schema ``` Method: wixClientAdmin.programsOld.ProgramsService.searchPrograms(search) Description: Searches programs by title and structured filters. Use this method when you need full-text search over `description.title`. Results are visibility-filtered according to the caller identity. # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present. Required parameters: search Method parameters: param name: search | type: CursorSearch | required: true - name: cursorPaging | type: CursorPaging | description: Cursor paging options. Learn more about [cursor paging](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/data-retrieval/about-sorting-and-paging.md). - name: limit | type: integer | description: Maximum number of items to return in the results. | validation: minimum 0, maximum 100, format int32 - name: cursor | type: string | description: Pointer to the next or previous page in the list of results. Pass the relevant cursor token from the `pagingMetadata` object in the previous call's response. Not relevant for the first request. | validation: maxLength 16000 - name: filter | type: object | description: Filter object. Learn more about [API Query Language](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/data-retrieval/about-the-wix-api-query-language.md). - name: sort | type: array | description: List of sort objects. Learn more about [Sorting and Paging](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/data-retrieval/about-sorting-and-paging.md). | validation: maxItems 10 - name: fieldName | type: string | description: Name of the field to sort by. | validation: maxLength 512 - name: order | type: SortOrder | description: Sort order. - enum: ASC, DESC - name: aggregations | type: array | description: Aggregations are a way to explore large amounts of data by displaying summaries about various partitions of the data and later allowing to narrow the navigation to a specific partition. | validation: maxItems 10 - ONE-OF: - name: value | type: ValueAggregation | description: Value aggregation. - ONE-OF: - name: includeOptions | type: IncludeMissingValuesOptions | description: Options for including missing values. - name: addToBucket | type: string | description: Specify custom bucket name. Defaults are [string -> "N/A"], [int -> "0"], [bool -> "false"] ... | validation: maxLength 20 - name: sortType | type: SortType | description: Whether to sort by number of matches or value of the field. - enum: - COUNT: Sort by number of matches. - VALUE: Sort by value of the field alphabetically. - name: sortDirection | type: SortDirection | description: Whether to sort in ascending or descending order. - enum: - DESC: Sort in descending order. - ASC: Sort in ascending order. - name: limit | type: integer | description: How many aggregations to return. Can be between 1 and 250. 10 is the default. | validation: format int32 - name: missingValues | type: MissingValues | description: Whether to include or exclude missing values from the aggregation results. Default: `EXCLUDE`. - enum: - EXCLUDE: Exclude missing values from the aggregation results. - INCLUDE: Include missing values in the aggregation results. - name: range | type: RangeAggregation | description: Range aggregation. - name: buckets | type: array | description: List of range buckets, where during aggregation each entity will be placed in the first bucket its value falls into, based on the provided range bounds. | validation: maxItems 50 - name: from | type: number | description: Inclusive lower bound of the range. Required if `to` is not provided. - name: to | type: number | description: Exclusive upper bound of the range. Required if `from` is not provided. - name: scalar | type: ScalarAggregation | description: Scalar aggregation. - name: type | type: ScalarType | description: Define the operator for the scalar aggregation. - enum: - COUNT_DISTINCT: Count of distinct values. - MIN: Minimum value. - MAX: Maximum value. - name: dateHistogram | type: DateHistogramAggregation | description: Date histogram aggregation. - name: interval | type: Interval | description: Interval for date histogram aggregation. - enum: - YEAR: Yearly interval - MONTH: Monthly interval - WEEK: Weekly interval - DAY: Daily interval - HOUR: Hourly interval - MINUTE: Minute interval - SECOND: Second interval - name: nested | type: NestedAggregation | description: Nested aggregation. - name: nestedAggregations | type: array | description: Flattened list of aggregations, where each next aggregation is nested within previous one. | validation: minItems 2, maxItems 3 - ONE-OF: - name: value | type: ValueAggregation | description: Value aggregation. - name: range | type: RangeAggregation | description: Range aggregation. - name: scalar | type: ScalarAggregation | description: Scalar aggregation. - name: dateHistogram | type: DateHistogramAggregation | description: Date histogram aggregation. - name: name | type: string | description: User-defined name of aggregation, should be unique, will appear in aggregation results. | validation: maxLength 100 - name: type | type: NestedAggregationType | description: Type of aggregation, client must provide matching aggregation field below. - enum: - VALUE: An aggregation where result buckets are dynamically built - one per unique value. - RANGE: An aggregation, where user can define set of ranges - each representing a bucket. - SCALAR: A single-value metric aggregation. For example, min, max, sum, avg. - DATE_HISTOGRAM: An aggregation, where result buckets are dynamically built - one per time interval (hour, day, week, etc.). - name: fieldPath | type: string | description: Field to aggregate by, use dot notation to specify json path. | validation: maxLength 200 - name: name | type: string | description: User-defined name of aggregation, should be unique, will appear in aggregation results. | validation: maxLength 100 - name: type | type: AggregationType | description: Type of aggregation, client must provide matching aggregation field below. - enum: - VALUE: An aggregation where result buckets are dynamically built - one per unique value. - RANGE: An aggregation, where user can define set of ranges - each representing a bucket. - SCALAR: A single-value metric aggregation. For example, min, max, sum, avg. - DATE_HISTOGRAM: An aggregation, where result buckets are dynamically built - one per time interval (hour, day, week, etc.) - NESTED: Multi-level aggregation, where each next aggregation is nested within previous one. - name: fieldPath | type: string | description: Field to aggregate by, use dot notation to specify json path. | validation: maxLength 200 - name: search | type: SearchDetails | description: Free text to match in searchable fields. - name: mode | type: Mode | description: Defines how separate search terms in `expression` are combined. - enum: - OR: Any of the search terms must be present. - AND: All search terms must be present. - name: expression | type: string | description: Search term or expression. | validation: maxLength 100 - name: fields | type: array | description: Fields to search in. If empty - will search in all searchable fields. Use dot notation to specify json path. | validation: maxItems 20, maxLength 200 - name: fuzzy | type: boolean | description: Whether to use auto fuzzy search (allowing typos by a managed proximity algorithm). - name: timeZone | type: string | description: UTC offset or IANA time zone. Valid values are ISO 8601 UTC offsets, such as +02:00 or -06:00, and IANA time zone GUIDs, such as Europe/Rome. Affects all filters and aggregations returned values. You may override this behavior in a specific filter by providing timestamps including time zone. For example, `"2023-12-20T10:52:34.795Z"`. | validation: maxLength 50 Searchable fields: - field: _id | operators: $eq, $ne, $exists, $in, $any, $begins, $gt, $lt, $lte, $gte | sort: ASC, DESC | aggregatable: true | searchable: false - field: description.title | operators: $eq, $ne, $exists, $in, $any, $begins, $gt, $lt, $lte, $gte | sort: ASC, DESC | aggregatable: true | searchable: true - field: status | operators: $eq, $in | sort: ASC, DESC | aggregatable: true | searchable: false - field: _createdDate | operators: none | sort: ASC, DESC | aggregatable: false | searchable: false - field: timeline.selfPaced | operators: $eq | sort: none | aggregatable: true | searchable: false - field: restrictions.accessType | operators: $in | sort: none | aggregatable: true | searchable: false - field: _updatedDate | operators: none | sort: ASC, DESC | aggregatable: false | searchable: false - field: categoryIds | operators: $hasAll, $hasSome | sort: none | aggregatable: true | searchable: false Return type: PROMISE - name: programs | type: array | description: Programs that match the search and caller visibility. - name: _id | type: string | description: Program GUID. | validation: format GUID - name: revision | type: string | description: Revision number, which increments by 1 each time the program is updated. To prevent conflicting changes, the current revision must be specified when updating a program. | validation: format int64 - name: _createdDate | type: Date | description: Date and time the program was created. - name: _updatedDate | type: Date | description: Date and time the program was last updated. - name: status | type: Status | description: Current program lifecycle status. - enum: - 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. - ARCHIVED: The program is closed and removed from normal public discovery. - name: statusUpdatedDate | type: Date | description: Date and time when `status` last changed. - name: categoryIds | type: array | description: Category GUIDs assigned to the program. This field is read-only; use the Program Categories API to assign categories. | validation: maxItems 10, format GUID - name: description | type: Description | description: Public-facing program title, details, and media. - ONE-OF: - name: image | type: string | description: Program image. - name: video | type: string | description: Program video. - name: title | type: string | description: Program title. | validation: maxLength 150 - name: details | type: string | description: Detailed program description. | validation: maxLength 8000 - name: timeline | type: Timeline | description: Program timeline settings. Use this to configure self-paced or scheduled programs. - name: selfPaced | type: boolean | description: Whether participants can progress at their own pace. - name: startDate | type: string | description: Local date when the scheduled program starts. | validation: format LOCAL_DATE - name: durationInDays | type: integer | description: Scheduled program duration in days. | validation: format int32 - name: restrictions | type: Restrictions | description: Program access, participation, and progression rules. - name: maxParticipants | type: integer | description: Maximum number of active participants allowed in the program. | validation: minimum 1, format int32 - name: hideFutureSteps | type: boolean | description: Whether future steps are hidden from participants until they become available. - name: resolveStepsInOrder | type: boolean | description: Whether participants must complete steps in order. - name: shareProgress | type: boolean | description: Whether participants can share progress in the connected group. - name: accessType | type: AccessType | description: Program discovery and join access. - enum: - 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. - name: price | type: Money | description: Optional one-time payment price for joining the program. - name: value | type: string | description: Monetary amount. Decimal string with a period as a decimal separator (e.g., 3.99). | validation: decimalValue {"gt":"0.00","maxScale":3} - name: currency | type: string | description: Currency code. Must be valid ISO 4217 currency code (e.g., USD). | validation: format CURRENCY - name: seo | type: Seo | description: SEO settings used for the program page. - name: slug | type: string | description: Unique URL slug for the program page. | validation: format URL_SLUG - name: seoData | type: SeoSchema | description: Advanced SEO schema data. - name: tags | type: array | description: SEO tag information. - name: type | type: string | description: SEO tag type. Supported values: `title`, `meta`, `script`, `link`. - name: props | type: object | description: A `{"key": "value"}` pair object where each SEO tag property (`"name"`, `"content"`, `"rel"`, `"href"`) contains a value. For example: `{"name": "description", "content": "the description itself"}`. - name: meta | type: object | description: SEO tag metadata. For example, `{"height": 300, "width": 240}`. - name: children | type: string | description: SEO tag inner content. For example, ` inner content `. - name: custom | type: boolean | description: Whether the tag is a [custom tag](https://support.wix.com/en/article/adding-additional-meta-tags-to-your-sites-pages). - name: disabled | type: boolean | description: Whether the tag is disabled. If the tag is disabled, people can't find your page when searching for this phrase in search engines. - name: settings | type: Settings | description: SEO general settings. - name: preventAutoRedirect | type: boolean | description: Whether the [automatical redirect visits](https://support.wix.com/en/article/customizing-your-pages-seo-settings-in-the-seo-panel) from the old URL to the new one is enabled. Default: `false` (automatical redirect is enabled). - name: keywords | type: array | description: User-selected keyword terms for a specific page. | validation: maxItems 5 - name: term | type: string | description: Keyword value. - name: isMain | type: boolean | description: Whether the keyword is the main focus keyword. - name: origin | type: string | description: The source that added the keyword terms to the SEO settings. | validation: maxLength 1000 - name: url | type: string | description: Program page URL. - name: imageUrl | type: string | description: Image URL derived from the program description media. | validation: format WEB_URL - name: imageAlt | type: string | description: Alternative text for the SEO image. | validation: maxLength 1000 - name: courseWorkload | type: string | description: Approximate SEO program duration in ISO 8601 duration format. | validation: maxLength 100 - name: rewards | type: array | description: Rewards assigned to participants when they reach configured milestones. | validation: maxItems 10 - name: trigger | type: Trigger | description: Program milestone that grants the reward. If omitted, the trigger defaults to `JOINED_TO_PROGRAM` for compatibility with existing rewards. - enum: - JOINED_TO_PROGRAM: Default trigger for existing rewards. The reward is granted when a member joins the program. - STEP_COMPLETED: The reward is granted when at least one step is completed. - ALL_STEPS_COMPLETED: The reward is granted when all required steps are completed. - name: badgeIds | type: array | description: Badge GUIDs to assign when the reward is granted. | validation: maxItems 50, format GUID - name: certificate | type: Certificate | description: Certificate assigned when the reward is granted. - name: _id | type: string | description: Certificate GUID. Currently this is the program GUID. | validation: format GUID - name: connectedDate | type: Date | description: Date and time the certificate was connected to the program. - name: socialGroupId | type: string | description: GUID of the social group connected to the program, if one exists. | validation: format GUID - name: extendedFields | type: ExtendedFields | description: Custom fields for apps that extend the Program entity. - name: namespaces | type: object | description: Extended field data. Each key corresponds to the namespace of the app that created the extended fields. The value of each key is structured according to the schema defined when the extended fields were configured. You can only access fields for which you have the appropriate permissions. Learn more about [extended fields](https://dev.wix.com/docs/rest/articles/getting-started/extended-fields.md). | validation: format map - name: shouldSendInvoice | type: boolean | description: Whether to send an invoice after a single-payment purchase. When false, the buyer receives a payment confirmation email instead. - name: videoStepsSettings | type: VideoStepsSettings | description: Settings that control how video steps behave in this program. - name: autoNavigate | type: boolean | description: Whether the participant is automatically moved to the next video step after finishing the current one. - name: requiredCompletionPercentage | type: number | description: Percentage of a video that must be watched to complete a video step. - name: contentSummary | type: ContentSummary | description: Read-only counts of content entities in the program. - name: stepCount | type: integer | description: Number of steps in the program. | validation: maximum 3000 - name: sectionCount | type: integer | description: Number of sections in the program. | validation: maximum 1000 - name: ownerUserId | type: string | description: GUID of the site user who created the program. | validation: format GUID - name: pagingMetadata | type: CursorPagingMetadata | description: Cursor paging metadata. - name: count | type: integer | description: Number of items returned in current page. | validation: format int32 - name: cursors | type: Cursors | description: Cursor strings that point to the next page, previous page, or both. - name: next | type: string | description: Cursor string pointing to the next page in the list of results. | validation: maxLength 16000 - name: prev | type: string | description: Cursor pointing to the previous page in the list of results. | validation: maxLength 16000 - name: hasNext | type: boolean | description: Whether there are more pages to retrieve following the current page. + `true`: Another page of results can be retrieved. + `false`: This is the last page. - name: aggregationData | type: AggregationData | description: Aggregation data returned by the search backend. - name: results | type: array | description: key = aggregation name (as derived from search request). | validation: maxItems 10000 - ONE-OF: - name: values | type: ValueResults | description: Value aggregation results. - name: results | type: array | description: List of value aggregations. | validation: maxItems 250 - name: value | type: string | description: Value of the field. | validation: maxLength 100 - name: count | type: integer | description: Count of entities with this value. - name: ranges | type: RangeResults | description: Range aggregation results. - name: results | type: array | description: List of ranges returned in same order as requested. | validation: maxItems 50 - name: from | type: number | description: Inclusive lower bound of the range. - name: to | type: number | description: Exclusive upper bound of the range. - name: count | type: integer | description: Count of entities in this range. - name: scalar | type: ScalarResult | description: Scalar aggregation results. - name: type | type: ScalarType | description: Type of scalar aggregation. - enum: - COUNT_DISTINCT: Count of distinct values. - MIN: Minimum value. - MAX: Maximum value. - name: value | type: number | description: Value of the scalar aggregation. - name: groupedByValue | type: GroupByValueResults | description: Group by value aggregation results. - name: results | type: array | description: List of value aggregations. | validation: maxItems 1000 - name: value | type: string | description: Value of the field. | validation: maxLength 1000 - name: nestedResults | type: NestedAggregationResults | description: Nested aggregations. - ONE-OF: - name: values | type: ValueResults | description: Value aggregation results. - name: ranges | type: RangeResults | description: Range aggregation results. - name: scalar | type: ScalarResult | description: Scalar aggregation results. - name: name | type: string | description: User-defined name of aggregation, matches the one provided in request. | validation: maxLength 100 - name: type | type: AggregationType | description: Type of aggregation that matches result. - enum: - VALUE: An aggregation where result buckets are dynamically built - one per unique value. - RANGE: An aggregation, where user can define set of ranges - each representing a bucket. - SCALAR: A single-value metric aggregation. For example, min, max, sum, avg. - DATE_HISTOGRAM: An aggregation, where result buckets are dynamically built - one per time interval (hour, day, week, etc.) - NESTED: Multi-level aggregation, where each next aggregation is nested within previous one. - name: fieldPath | type: string | description: Field to aggregate by, matches the one provided in request. | validation: maxLength 200 - name: dateHistogram | type: DateHistogramResults | description: Date histogram aggregation results. - name: results | type: array | description: List of date histogram aggregations. | validation: maxItems 200 - name: value | type: string | description: Date in ISO 8601 format. | validation: maxLength 100 - name: count | type: integer | description: Count of documents in the bucket. - name: nested | type: NestedResults | description: Nested aggregation results. - name: results | type: array | description: List of nested aggregations. | validation: maxItems 1000 - name: results | type: Map | description: List of nested aggregations. | validation: format map - ONE-OF: - name: value | type: ValueResult | description: Value aggregation result. - name: value | type: string | description: Value of the field. | validation: maxLength 1000 - name: count | type: integer | description: Count of entities with this value. | validation: format int32 - name: range | type: RangeResult | description: Range aggregation result. - name: from | type: number | description: Inclusive lower bound of the range. - name: to | type: number | description: Exclusive upper bound of the range. - name: count | type: integer | description: Count of entities in this range. | validation: format int32 - name: scalar | type: ScalarResult | description: Scalar aggregation result. - name: value | type: number | description: Value of the scalar aggregation. - name: dateHistogram | type: ValueResult | description: Date histogram aggregation result. - name: name | type: string | description: User-defined name of aggregation as derived from search request. | validation: maxLength 100 - name: type | type: AggregationType | description: Type of aggregation that must match provided kind as derived from search request. - name: fieldPath | type: string | description: Field to aggregate by as derived from search request. | validation: maxLength 200 ``` ### Examples ### searchPrograms ```javascript import { programs } from '@wix/online-programs'; async function searchPrograms(search) { const response = await programs.searchPrograms(search); }; ``` ### searchPrograms (with elevated permissions) ```javascript import { programs } from '@wix/online-programs'; import { auth } from '@wix/essentials'; async function mySearchProgramsMethod(search) { const elevatedSearchPrograms = auth.elevate(programs.searchPrograms); const response = await elevatedSearchPrograms(search); } ``` ### searchPrograms (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 { programs } from '@wix/online-programs'; // Import the auth strategy for the relevant access type // Import the relevant host module if needed const myWixClient = createClient ({ modules: { programs }, // Include the auth strategy and host as relevant }); async function searchPrograms(search) { const response = await myWixClient.programs.searchPrograms(search); }; ``` ---