> ## Documentation Index
> Fetch the complete documentation index at: https://fayneos.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List All Published Courses in Your Academy via API

> Retrieve all published courses in your academy, including visibility, lesson count, and total reading time for each course.

The courses endpoint returns every published course in your academy in display order. You can use this to build custom catalog pages, sync course data to an external system, or display your catalog programmatically. Only published courses are returned; drafts are never included.

## List courses

<ParamField path="header.Authorization" type="string" required>
  Your API key as a Bearer token. See [Authentication](/api-reference/authentication) for details.
</ParamField>

```text theme={null}
GET /api/v1/courses
```

This endpoint takes no query parameters and no request body.

### Response fields

All response data is nested under a top-level `data` object.

<ResponseField name="data" type="object" required>
  <Expandable title="properties" defaultOpen>
    <ResponseField name="courses" type="object[]" required>
      Array of course objects, ordered by display order set in the dashboard.

      <Expandable title="course properties" defaultOpen>
        <ResponseField name="id" type="string" required>
          UUID of the course.
        </ResponseField>

        <ResponseField name="title" type="string" required>
          Display title of the course.
        </ResponseField>

        <ResponseField name="slug" type="string" required>
          URL-safe identifier for the course, unique within the academy.
        </ResponseField>

        <ResponseField name="description" type="string">
          Short description of the course. May be `null` if not set.
        </ResponseField>

        <ResponseField name="visibility" type="string" required>
          Visibility setting for the course. Possible values: `published`, `hidden`.
        </ResponseField>

        <ResponseField name="lesson_count" type="number" required>
          Number of published lessons in the course.
        </ResponseField>

        <ResponseField name="total_reading_time_minutes" type="number" required>
          Sum of all published lesson reading times in minutes.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<Note>
  This endpoint does not return course pricing. Manage and read prices from the course's Access settings in the dashboard.
</Note>

### Example request

<CodeGroup>
  ```bash cURL theme={null}
  curl https://yourname.fayneos.com/api/v1/courses \
    -H "Authorization: Bearer fa_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://yourname.fayneos.com/api/v1/courses', {
    headers: {
      'Authorization': 'Bearer fa_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    }
  });
  const { data } = await response.json();
  ```
</CodeGroup>

### Example response

```json theme={null}
{
  "data": {
    "courses": [
      {
        "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "title": "Cold Outreach Mastery",
        "slug": "cold-outreach-mastery",
        "description": "Master the full cold outreach workflow from prospecting to reply.",
        "visibility": "published",
        "lesson_count": 12,
        "total_reading_time_minutes": 95
      },
      {
        "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "title": "First-Time Manager Foundations",
        "slug": "first-time-manager-foundations",
        "description": "Core skills every new manager needs in their first 90 days.",
        "visibility": "published",
        "lesson_count": 8,
        "total_reading_time_minutes": 60
      }
    ]
  }
}
```
