> 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

# ListCategories

# Package: onlinePrograms

# Namespace: CategoriesService

# Method link: https://dev.wix.com/docs/api-reference/business-management/online-programs/categories/list-categories.md

## Permission Scopes:
Manage Online Programs: SCOPE.CHALLENGES.MANAGE

## Introduction

Retrieves up to 100 Categories.

When `categoryIds` is empty or omitted, the method returns all site Categories, up to the service limit of 100, ordered by creation date from newest to oldest.

---

## REST API

### Schema

```
 Method: listCategories
 Description: Retrieves up to 100 Categories.  When `categoryIds` is empty or omitted, the method returns all site Categories, up to the service limit of 100, ordered by creation date from newest to oldest.
 URL: https://www.wixapis.com/_api/program-categories-service/v3/categories
 Method: GET
 Method parameters:
   query param name: categoryIds | type: array<categoryIds> | description: IDs of Categories to retrieve. When empty or omitted, all site Categories are returned, up to 100.  | validation: maxItems 100, format GUID
 Return type: ListCategoriesResponse
  - name: categories | type: array<Category> | description: NOT-PRECEDENT: This consumed list method returns the complete bounded site collection and predates the paging response standard.  | validation: maxItems 100
     - name: id | type: string | description: Category GUID.  | read-only: true | validation: format GUID
     - name: revision | type: string | description: Revision number, which increments by 1 each time the Category is updated. To prevent conflicting changes, the current `revision` must be passed when updating the Category.  | read-only: true | validation: format int64
     - name: createdDate | type: string | description: Date and time the Category was created.  | read-only: true | validation: format date-time
     - name: updatedDate | type: string | description: Date and time the Category was last updated.  | read-only: true | validation: format date-time
     - name: label | type: string | description: Category's display label. The primary-language label must be unique within the site. Localized reads return the Wix Multilingual translation when one exists, and otherwise fall back to the primary label.  | validation: maxLength 100
     - name: assignedTo | type: array<string> | description: IDs of Programs assigned to this Category. For routine assignment changes, use [Bulk Assign Categories to Program](https://dev.wix.com/docs/api-reference/business-management/online-programs/categories/bulk-assign-categories-to-program.md), whose 10-Category-per-Program check is best-effort. Direct writes to `assignedTo` through Create Category, Bulk Create Categories, or Update Category bypass that check; callers using them must keep each Program at or below 10 Categories. Relationship updates are eventually consistent across the Program Categories and Programs APIs.  | validation: maxItems 200, format GUID
     - name: extendedFields | type: ExtendedFields | description: Custom field data for the Category. [Extended fields](https://dev.wix.com/docs/rest/articles/getting-started/extended-fields.md) must be configured in the app dashboard for `wix.achievements.categories.v3.category` before they can be accessed with API calls.  
        - 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


```

### Examples

### List selected categories
Retrieves the Categories with the supplied IDs. Omit categoryIds to retrieve all site Categories, up to 100.

```curl
curl -X GET \
'https://www.wixapis.com/online-programs/v3/categories?categoryIds=f69516df-6a8d-4fb7-894e-5c8291c23573' \
-H 'Authorization: <AUTH>'
```

---

## JavaScript SDK

### Schema

```
 Method: wixClientAdmin.onlinePrograms.categories.listCategories(options)
 Description: Retrieves up to 100 Categories.  When `categoryIds` is empty or omitted, the method returns all site Categories, up to the service limit of 100, ordered by creation date from newest to oldest.
 Method parameters:
   param name: options | type: ListCategoriesOptions  none  
        - name: categoryIds | type: array<string> | description: IDs of Categories to retrieve. When empty or omitted, all site Categories are returned, up to 100.  | validation: maxItems 100, format GUID
 Return type: PROMISE<ListCategoriesResponse>
  - name: categories | type: array<Category> | description: NOT-PRECEDENT: This consumed list method returns the complete bounded site collection and predates the paging response standard.  | validation: maxItems 100
     - name: _id | type: string | description: Category GUID.  | read-only: true | validation: format GUID
     - name: revision | type: string | description: Revision number, which increments by 1 each time the Category is updated. To prevent conflicting changes, the current `revision` must be passed when updating the Category.  | read-only: true | validation: format int64
     - name: _createdDate | type: Date | description: Date and time the Category was created.  | read-only: true 
     - name: _updatedDate | type: Date | description: Date and time the Category was last updated.  | read-only: true 
     - name: label | type: string | description: Category's display label. The primary-language label must be unique within the site. Localized reads return the Wix Multilingual translation when one exists, and otherwise fall back to the primary label.  | validation: maxLength 100
     - name: assignedTo | type: array<string> | description: IDs of Programs assigned to this Category. For routine assignment changes, use [Bulk Assign Categories to Program](https://dev.wix.com/docs/api-reference/business-management/online-programs/categories/bulk-assign-categories-to-program.md), whose 10-Category-per-Program check is best-effort. Direct writes to `assignedTo` through Create Category, Bulk Create Categories, or Update Category bypass that check; callers using them must keep each Program at or below 10 Categories. Relationship updates are eventually consistent across the Program Categories and Programs APIs.  | validation: maxItems 200, format GUID
     - name: extendedFields | type: ExtendedFields | description: Custom field data for the Category. [Extended fields](https://dev.wix.com/docs/rest/articles/getting-started/extended-fields.md) must be configured in the app dashboard for `wix.achievements.categories.v3.category` before they can be accessed with API calls.  
        - 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


```

### Examples

### List selected categories
```javascript
import { categories } from "@wix/online-programs";

async function listCategoriesExample() {
  const result = await categories.listCategories({
    categoryIds: ["0a4314a1-5237-4b7f-992f-d8ecdcbe73fc"],
  });
  return result;
}

/* Promise resolves to (captured response; Date values serialized as ISO strings):
{
  "categories": [
    {
      "revision": "1",
      "label": "Fitness",
      "assignedTo": [],
      "_id": "0a4314a1-5237-4b7f-992f-d8ecdcbe73fc",
      "_createdDate": "2026-10-15T08:16:44.427Z",
      "_updatedDate": "2026-10-15T08:16:44.427Z"
    }
  ]
}
*/

```

### listCategories (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 { categories } from '@wix/online-programs';
// Import the auth strategy for the relevant access type
// Import the relevant host module if needed

const myWixClient = createClient ({
  modules: { categories },
  // Include the auth strategy and host as relevant
});


async function listCategories(options) {
  const response = await myWixClient.categories.listCategories(options);
};
```

---