Skip to main content
GET
/
api
/
public
/
courses
/
v2
{
  "Categories": [
    "<string>"
  ],
  "Courses": {},
  "Courses.Records": [
    {}
  ],
  "Courses.CurrentPage": 123,
  "Courses.TotalItems": 123,
  "Courses.TotalPages": 123,
  "Courses.HasNextPage": true
}

List Courses

Returns a paginated list of published courses for the current location. Supports filtering by category name, keyword search, and a flag to only return courses marked for the home page.
A course is a structured learning programme created by the space operator, consisting of multiple lessons. Members can enrol, track progress, and complete lessons through the portal.

Authentication

No authentication required.

Query Parameters

page
number
required
1-based page number.
top
number
required
Number of courses per page.
category
string
Filter by category name. Omit to return courses across all categories.
Keyword filter applied to course name and description. URL-encoded.
onlyHomePage
boolean
When true, returns only courses flagged to appear on the portal home page.
_shape
string
Comma-separated list of field paths to include in the response. When provided, only the specified fields are returned — useful for reducing payload size. Supports nested paths using dot notation. Example: _shape=Courses.Records.Name,Courses.Records.Description,Categories.

Response

Returns a CourseList object containing available categories and a paginated list of course summaries.
Categories
string[]
Array of all available course category names for filtering.
Courses
ApiListResult<CourseStatus>
Paginated wrapper containing course records.
Courses.Records
CourseStatus[]
Array of course summaries for the current page.
Courses.CurrentPage
number
Current page number.
Courses.TotalItems
number
Total number of matching courses.
Courses.TotalPages
number
Total number of pages.
Courses.HasNextPage
boolean
Whether there are more pages after the current one.

Examples

Fetch first page of courses

GET /api/public/courses/v2?page=1&top=10

TypeScript Integration

import endpoints from '@/api/endpoints'

const { resource: courses } = useTypedData(
  httpClient,
  endpoints.courses.list({
    page: 1,
    top: 10,
    categoryName: 'Marketing',
  }),
)