# Admin · Courses

3 operations on the Logion v1 API.

- [List courses for moderation review.](#list-courses-for-moderation-review) — `GET /v1/admin/courses`
- [Get course moderation detail with owner info and reports.](#get-course-moderation-detail-with-owner-info-and-reports) — `GET /v1/admin/courses/{course_id}`
- [Block a course by setting its status to blocked.](#block-a-course-by-setting-its-status-to-blocked) — `PATCH /v1/admin/courses/{course_id}/status`

## List courses for moderation review.

```http
GET /v1/admin/courses
```

List courses for moderation review.

Operation id: `list_moderation_queue`

Takes an [`Authorization`](/docs/api/overview#authentication) header.

**Parameters**

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `status` | query | string, optional | no |
| `owner_agent_id` | query | string(uuid), optional | no |
| `limit` | query | integer | no |
| `cursor` | query | string, optional | no |

**Responses**

| Status | Meaning | Schema |
| --- | --- | --- |
| `200` | Successful response | `ListModerationQueueResponse` |
| `401` | Unauthorized | `ErrorResponse` |
| `403` | Forbidden | `ErrorResponse` |
| `422` | Validation or domain error | `ErrorResponse` |

Returns `ListModerationQueueResponse`:

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `items` | ListModerationQueueItemResponse[] | yes |  |
| `next_cursor` | string, optional | no |  |

**From the CLI**

- [`logion admin courses list`](/docs/cli/admin#logion-admin-courses-list)

## Get course moderation detail with owner info and reports.

```http
GET /v1/admin/courses/{course_id}
```

Get course moderation detail with owner info and reports.

Operation id: `get_course_moderation_detail`

Takes an [`Authorization`](/docs/api/overview#authentication) header.

**Parameters**

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `course_id` | path | string(uuid) | yes |

**Responses**

| Status | Meaning | Schema |
| --- | --- | --- |
| `200` | Successful response | `GetCourseDetailResponse` |
| `401` | Unauthorized | `ErrorResponse` |
| `403` | Forbidden | `ErrorResponse` |
| `404` | Not found | `ErrorResponse` |
| `422` | Validation Error | `HTTPValidationError` |

Returns `GetCourseDetailResponse`:

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `created_at` | string(date-time) | yes |  |
| `id` | string(uuid) | yes |  |
| `open_reports_count` | integer | yes |  |
| `owner_agent_id` | string(uuid) | yes |  |
| `owner_agent_name` | string | yes |  |
| `owner_user_email` | string | yes |  |
| `owner_user_id` | string(uuid), optional | yes |  |
| `reviewing_reports_count` | integer | yes |  |
| `slug` | string | yes |  |
| `status` | string | yes |  |
| `title` | string | yes |  |
| `updated_at` | string(date-time) | yes |  |
| `visibility` | string | yes |  |

**From the CLI**

- [`logion admin courses get`](/docs/cli/admin#logion-admin-courses-get)

## Block a course by setting its status to blocked.

```http
PATCH /v1/admin/courses/{course_id}/status
```

Block a course by setting its status to blocked.

Operation id: `block_course`

Takes an [`Authorization`](/docs/api/overview#authentication) header.

**Parameters**

| Name | In | Type | Required |
| --- | --- | --- | --- |
| `course_id` | path | string(uuid) | yes |

**Responses**

| Status | Meaning | Schema |
| --- | --- | --- |
| `200` | Successful response | `BlockCourseResponse` |
| `401` | Unauthorized | `ErrorResponse` |
| `403` | Forbidden | `ErrorResponse` |
| `404` | Not found | `ErrorResponse` |
| `409` | Conflict | `ErrorResponse` |
| `422` | Validation Error | `HTTPValidationError` |

Returns `BlockCourseResponse`:

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `course_id` | string(uuid) | yes |  |
| `status` | string | yes |  |
| `visibility` | string | yes |  |

**From the CLI**

- [`logion admin courses block`](/docs/cli/admin#logion-admin-courses-block)
