---
url: https://docs.nemo12.com/reference/api/admin-parentmodel.md
description: >-
  Endpoint API Nemo12 của module admin tới parentModel (514 endpoint), sinh từ
  source: phương thức, đường dẫn, quyền truy cập.
---

# API Catalog · admin tới parentModel

> ⚙️ **Trang này sinh tự động** từ source code bằng `scripts/gen-reference.mjs` — đừng sửa tay, sửa code rồi chạy `npm run gen:reference`.

Thuộc [API Catalog](../api.md). 47 module, 514 endpoint, `admin` tới `parentModel`.

## `admin`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/audit-log` | 🔐 role `admin` |
| GET | `/v1/admin/courses` | 🔐 role `admin` |
| PATCH | `/v1/admin/courses/{courseId}` | 🔐 role `admin` |
| PATCH | `/v1/admin/courses/{courseId}/sessions/{sessionNo}` | 🔐 role `admin` |
| GET | `/v1/admin/dead-letters` | 🔐 role `admin` |
| POST | `/v1/admin/dead-letters/{deadLetterId}/replay` | 🔐 role `admin` |
| GET | `/v1/admin/email-catalog` | 🔐 role `admin` |
| GET | `/v1/admin/email-catalog/{id}/preview` | 🔐 role `admin` |
| GET | `/v1/admin/email-pass-preview` | 🔐 role `admin` |
| GET | `/v1/admin/email-person` | 🔐 role `admin` |
| GET | `/v1/admin/email-samples` | 🔐 role `admin` |
| POST | `/v1/admin/email-samples` | 🔐 role `admin` |
| GET | `/v1/admin/email-sends` | 🔐 role `admin` |
| GET | `/v1/admin/email-stats` | 🔐 role `admin` |
| DELETE | `/v1/admin/email-suppressions` | 🔐 role `admin` |
| GET | `/v1/admin/email-suppressions` | 🔐 role `admin` |
| POST | `/v1/admin/email-suppressions` | 🔐 role `admin` |
| GET | `/v1/admin/engine-runs` | 🔐 role `admin` |
| GET | `/v1/admin/evidence/{evidenceId}` | 🔐 role `admin` |
| GET | `/v1/admin/foundry/models` | 🔐 role `admin` |
| GET | `/v1/admin/foundry/runs` | 🔐 role `admin` |
| POST | `/v1/admin/foundry/runs` | 🔐 role `admin` |
| GET | `/v1/admin/foundry/runs/{runId}` | 🔐 role `admin` |
| GET | `/v1/admin/geography/province-backfill` | 🔐 role `admin` |
| POST | `/v1/admin/geography/province-backfill` | 🔐 role `admin` |
| GET | `/v1/admin/learners` | 🔐 role `admin` |
| GET | `/v1/admin/learners/{learnerId}/ai-teen-model` | 🔐 role `admin` |
| GET | `/v1/admin/learners/{learnerId}/context-events` | 🔐 role `admin` |
| POST | `/v1/admin/learners/{learnerId}/context-events` | 🔐 role `admin` |
| GET | `/v1/admin/learners/{learnerId}/evidence` | 🔐 role `admin` |
| GET | `/v1/admin/learners/{learnerId}/ielts-model` | 🔐 role `admin` |
| GET | `/v1/admin/learners/{learnerId}/models` | 🔐 role `admin` |
| GET | `/v1/admin/learners/{learnerId}/models/{modelKind}/versions` | 🔐 role `admin` |
| POST | `/v1/admin/learners/{learnerId}/recompute-models` | 🔐 role `admin` |
| GET | `/v1/admin/membership-pricing` | 🔐 role `admin` |
| PATCH | `/v1/admin/membership-pricing/{code}` | 🔐 role `admin` |
| POST | `/v1/admin/mentor-assignments` | 🔐 role `admin` |
| GET | `/v1/admin/model-versions/{versionId}` | 🔐 role `admin` |
| GET | `/v1/admin/model-versions/{versionId}/compare` | 🔐 role `admin` |
| GET | `/v1/admin/overview` | 🔐 role `admin` |
| GET | `/v1/admin/retention-policies` | 🔐 role `admin` |
| POST | `/v1/admin/retention-policies/sync` | 🔐 role `admin` |
| POST | `/v1/admin/retention-refresh` | 🔐 role `admin` |
| POST | `/v1/admin/roles` | 🔐 role `admin` |
| GET | `/v1/admin/run-metrics` | 🔐 role `admin` |
| GET | `/v1/admin/workflow-runs` | 🔐 role `admin` |
| GET | `/v1/admin/workflow-runs/{runId}` | 🔐 role `admin` |

## `aiTeen`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/ai-teen/courses/{courseId}/enroll` | 🔒 session |
| GET | `/v1/ai-teen/courses/{courseId}/gates` | 🔒 session |
| POST | `/v1/ai-teen/courses/{courseId}/gates` | 🔒 session |
| GET | `/v1/ai-teen/courses/{courseId}/results` | 🔒 session |
| PUT | `/v1/ai-teen/courses/{courseId}/results` | 🔒 session |
| GET | `/v1/ai-teen/courses/{courseId}/steps` | 🔒 session |
| PUT | `/v1/ai-teen/courses/{courseId}/steps` | 🔒 session |
| POST | `/v1/ai-teen/courses/{courseId}/unenroll` | 🔒 session |
| GET | `/v1/ai-teen/enrollments` | 🔒 session |
| GET | `/v1/ai-teen/journeys` | 🔒 session |
| PUT | `/v1/ai-teen/journeys` | 🔒 session |

## `aiTeenContent`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/mentor/ai-teen/content` | 🔐 role `mentor` |
| POST | `/v1/mentor/ai-teen/content/courses/{courseId}/live` | 🔐 role `mentor` |
| GET | `/v1/mentor/ai-teen/content/courses/{courseId}/releases` | 🔐 role `mentor` |
| POST | `/v1/mentor/ai-teen/content/courses/{courseId}/releases` | 🔐 role `mentor` |
| GET | `/v1/mentor/ai-teen/content/docs/{docKey}` | 🔐 role `mentor` |
| PUT | `/v1/mentor/ai-teen/content/docs/{docKey}` | 🔐 role `mentor` |
| GET | `/v1/mentor/ai-teen/content/docs/{docKey}/versions` | 🔐 role `mentor` |
| GET | `/v1/mentor/ai-teen/content/docs/{docKey}/versions/{version}` | 🔐 role `mentor` |
| POST | `/v1/mentor/ai-teen/content/docs/{docKey}/versions/{version}/restore` | 🔐 role `mentor` |
| GET | `/v1/public/ai-teen/content/{courseId}/live` | 🌐 public |
| GET | `/v1/public/ai-teen/content/{courseId}/releases/{releaseId}` | 🌐 public |

## `auth`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/auth/access-session` | 🔐 role `admin` |
| POST | `/v1/auth/apple` | 🌐 public |
| POST | `/v1/auth/google` | 🌐 public |
| POST | `/v1/auth/logout` | 🔒 session |
| POST | `/v1/auth/mentor-grant` | 🔐 role `mentor` |
| GET | `/v1/me` | 🔒 session |

## `b21`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/b21/frameworks` | 🌐 public |
| GET | `/v1/b21/frameworks/{framework}/areas` | 🌐 public |
| GET | `/v1/b21/frameworks/{framework}/competencies/{code}` | 🌐 public |
| GET | `/v1/b21/frameworks/{framework}/translations` | 🌐 public |

## `calendar`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/calendar/agenda` | 🔒 session |
| GET | `/v1/calendar/open-events` | 🔒 session |
| GET | `/v1/calendar/subscriptions` | 🔒 session |
| POST | `/v1/calendar/subscriptions` | 🔒 session |
| DELETE | `/v1/calendar/subscriptions/{token}` | 🔒 session |

## `certificates`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/certificates/verify/{code}` | 🌐 public |
| GET | `/v1/learners/{learnerId}/certificates` | 🔒 session |
| GET | `/v1/learners/{learnerId}/certificates/{courseId}` | 🔒 session |

## `content`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/content/backfill-quality` | 🔐 role `staff` |
| GET | `/v1/content/gaps` | 🔐 role `staff` |
| GET | `/v1/content/items/{itemId}` | 🔐 role `staff` |
| PATCH | `/v1/content/items/{itemId}` | 🔐 role `staff` |
| POST | `/v1/content/items/{itemId}/evaluate` | 🔐 role `staff` |
| POST | `/v1/content/items/{itemId}/publish` | 🔐 role `staff` |
| POST | `/v1/content/items/{itemId}/reject` | 🔐 role `staff` |
| POST | `/v1/content/items/{itemId}/report` | 🔒 session |
| POST | `/v1/content/items/{itemId}/rollback` | 🔐 role `staff` |
| GET | `/v1/content/items/{itemId}/versions` | 🔐 role `staff` |
| POST | `/v1/content/items/{itemId}/versions` | 🔐 role `staff` |
| POST | `/v1/content/promote-candidates` | 🔐 role `staff` |
| GET | `/v1/content/quality-coverage` | 🔐 role `staff` |
| GET | `/v1/content/subjects` | 🔐 role `staff` |
| GET | `/v1/content/subjects/{subjectId}/nodes` | 🔐 role `staff` |
| GET | `/v1/content/subjects/{subjectId}/nodes/{nodeId}/items` | 🔐 role `staff` |

## `coral`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/coral/blueprints` | 🔐 role `staff` |
| PATCH | `/v1/coral/blueprints/{blueprintId}` | 🔐 role `staff` |
| GET | `/v1/coral/blueprints/{blueprintId}/experiences` | 🔐 role `staff` |
| POST | `/v1/coral/blueprints/{blueprintId}/generate` | 🔐 role `staff` |
| PATCH | `/v1/coral/course-lessons/{lessonId}` | 🔐 role `staff` |
| PATCH | `/v1/coral/course-units/{unitId}` | 🔐 role `staff` |
| GET | `/v1/coral/courses` | 🔐 role `staff` |
| GET | `/v1/coral/courses/{courseId}` | 🔐 role `staff` |
| PATCH | `/v1/coral/courses/{courseId}` | 🔐 role `staff` |
| PUT | `/v1/coral/courses/{courseId}/outcomes` | 🔐 role `staff` |
| PUT | `/v1/coral/courses/{courseId}/pains` | 🔐 role `staff` |
| GET | `/v1/coral/dq/lesson` | 🔐 role `staff` |
| POST | `/v1/coral/dq/mark` | 🔐 role `staff` |
| GET | `/v1/coral/dq/queue` | 🔐 role `staff` |
| GET | `/v1/coral/exams` | 🔐 role `staff` |
| GET | `/v1/coral/exams/{examId}` | 🔐 role `staff` |
| GET | `/v1/coral/experiences/{experienceId}` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/blocked` | 🔐 role `staff` |
| POST | `/v1/coral/foundry/blocked/release` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/courses` | 🔐 role `staff` |
| POST | `/v1/coral/foundry/drafts/apply` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/feedback` | 🔐 role `staff` |
| POST | `/v1/coral/foundry/feedback` | 🔐 role `staff` |
| POST | `/v1/coral/foundry/feedback/act` | 🔐 role `staff` |
| POST | `/v1/coral/foundry/items/promote` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/limits` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/preflight` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/priorities` | 🔐 role `staff` |
| PUT | `/v1/coral/foundry/priorities` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/prompt-work` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/prompts` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/queue` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/runs` | 🔐 role `staff` |
| POST | `/v1/coral/foundry/runs` | 🔐 role `staff` |
| GET | `/v1/coral/foundry/runs/{runId}` | 🔐 role `staff` |
| POST | `/v1/coral/foundry/runs/batch` | 🔐 role `staff` |
| POST | `/v1/coral/generate-items` | 🔐 role `staff` |
| GET | `/v1/coral/labs` | 🔐 role `staff` |
| GET | `/v1/coral/lesson-body/{lessonId}` | 🔐 role `staff` |
| PATCH | `/v1/coral/lesson-body/{lessonId}/examples/{kind}/{seq}` | 🔐 role `staff` |
| PATCH | `/v1/coral/lesson-body/{lessonId}/quiz/{seq}` | 🔐 role `staff` |
| PATCH | `/v1/coral/lesson-body/{lessonId}/story` | 🔐 role `staff` |
| GET | `/v1/coral/overview` | 🔐 role `staff` |
| GET | `/v1/coral/prompts` | 🔐 role `staff` |
| GET | `/v1/coral/review-queue` | 🔐 role `staff` |
| PATCH | `/v1/coral/review-queue/{reviewId}` | 🔐 role `staff` |
| PATCH | `/v1/coral/unit-concepts` | 🔐 role `staff` |
| GET | `/v1/coral/unit-prereqs` | 🔐 role `staff` |
| PATCH | `/v1/coral/unit-prereqs` | 🔐 role `staff` |
| GET | `/v1/coral/units` | 🔐 role `staff` |

## `courses`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/courses` | 🔒 session |
| GET | `/v1/courses/{courseId}` | 🔒 session |
| POST | `/v1/courses/{courseId}/enroll` | 🔒 session |
| POST | `/v1/courses/{courseId}/unenroll` | 🔒 session |

## `curriculum`

| Method | Path | Auth |
| --- | --- | --- |
| DELETE | `/v1/admin/curriculum/articles/{articleId}` | 🔐 role `admin` |
| GET | `/v1/admin/curriculum/articles/{articleId}` | 🔐 role `admin` |
| PUT | `/v1/admin/curriculum/articles/{articleId}` | 🔐 role `admin` |
| POST | `/v1/admin/curriculum/articles/{articleId}/publish` | 🔐 role `admin` |
| POST | `/v1/admin/curriculum/articles/{articleId}/restore/{version}` | 🔐 role `admin` |
| GET | `/v1/admin/curriculum/articles/{articleId}/versions` | 🔐 role `admin` |
| GET | `/v1/admin/curriculum/lessons/{lessonId}/articles` | 🔐 role `admin` |
| POST | `/v1/admin/curriculum/lessons/{lessonId}/articles` | 🔐 role `admin` |
| PUT | `/v1/admin/curriculum/lessons/{lessonId}/articles/order` | 🔐 role `admin` |
| GET | `/v1/admin/curriculum/tree` | 🔐 role `admin` |
| GET | `/v1/curriculum/courses` | 🔒 session |
| GET | `/v1/curriculum/courses/{courseId}` | 🔒 session |
| GET | `/v1/curriculum/lessons/{lessonId}/articles/{slug}` | 🔒 session |
| GET | `/v1/curriculum/lessons/{lessonId}/parts` | 🔒 session |
| PUT | `/v1/curriculum/lessons/{lessonId}/parts/{part}` | 🔒 session |
| GET | `/v1/curriculum/lessons/{lessonId}/reflection` | 🔒 session |
| PUT | `/v1/curriculum/lessons/{lessonId}/reflection` | 🔒 session |
| GET | `/v1/curriculum/lessons/{lessonId}/stages` | 🔒 session |
| PUT | `/v1/curriculum/lessons/{lessonId}/stages/{stage}` | 🔒 session |
| GET | `/v1/curriculum/units/{unitId}/orientation-quiz` | 🔒 session |
| GET | `/v1/public/ielts/catalog` | 🌐 public |

## `dashboards`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/mentor/dashboards` | 🔒 session |
| GET | `/v1/mentor/dashboards/{id}` | 🔒 session |

## `desk`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/mentor/desk` | 🔒 session |
| GET | `/v1/mentor/desk/{cohort}` | 🔒 session |
| GET | `/v1/mentor/desk/{cohort}/{learnerId}` | 🔒 session |

## `dictation`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/admin/dictation/build` | 🔐 role `admin` |
| GET | `/v1/admin/dictation/sets` | 🔐 role `admin` |
| GET | `/v1/admin/dictation/sets/{setId}/audio` | 🔐 role `admin` |
| PUT | `/v1/admin/dictation/sets/{setId}/status` | 🔐 role `admin` |
| GET | `/v1/curriculum/lessons/{lessonId}/dictation` | 🔒 session |
| GET | `/v1/dictation/leaderboard/{level}` | 🔒 session |
| GET | `/v1/dictation/options` | 🔒 session |
| GET | `/v1/dictation/practices` | 🔒 session |
| POST | `/v1/dictation/practices` | 🔒 session |
| DELETE | `/v1/dictation/practices/{practiceId}` | 🔒 session |
| GET | `/v1/dictation/practices/{practiceId}/audio` | 🔒 session |
| POST | `/v1/dictation/practices/{practiceId}/check` | 🔒 session |
| GET | `/v1/dictation/sets/{setId}/audio` | 🔒 session |
| POST | `/v1/dictation/sets/{setId}/check` | 🔒 session |

## `email`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/e/o/{file}` | 🌐 public |
| POST | `/e/one-click/{token}` | 🌐 public |
| GET | `/e/s/{token}` | 🌐 public |
| POST | `/e/s/{token}` | 🌐 public |
| GET | `/e/u/{token}` | 🌐 public |
| POST | `/e/u/{token}` | 🌐 public |
| GET | `/email/preferences/{token}` | 🌐 public |
| POST | `/email/preferences/{token}` | 🌐 public |

## `essay`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/essay-orders` | 🔒 session |
| POST | `/v1/admin/essay-orders/{id}/paid` | 🔒 session |
| POST | `/v1/learners/{learnerId}/essay-enroll` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay-orders` | 🔒 session |
| POST | `/v1/learners/{learnerId}/essay-orders` | 🔒 session |
| POST | `/v1/learners/{learnerId}/essay/coach` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/drafts` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/drafts/{promptId}` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/essay/drafts/{promptId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/drafts/{promptId}/diff` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/drafts/{promptId}/versions/{no}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/drills` | 🔒 session |
| POST | `/v1/learners/{learnerId}/essay/drills/{drillId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/marks` | 🔒 session |
| POST | `/v1/learners/{learnerId}/essay/marks` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/essay/marks/{id}` | 🔒 session |
| PATCH | `/v1/learners/{learnerId}/essay/marks/{id}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/process` | 🔒 session |
| GET | `/v1/learners/{learnerId}/essay/stories` | 🔒 session |
| POST | `/v1/learners/{learnerId}/essay/stories` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/essay/stories/{storyId}/ladder/{rung}` | 🔒 session |
| POST | `/v1/mentor/essay/drafts/{draftId}/comments` | 🔐 role `admin` |
| GET | `/v1/mentor/essay/learners` | 🔐 role `admin` |
| GET | `/v1/mentor/essay/learners/{learnerId}/drafts` | 🔐 role `admin` |

## `events`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/banner-usage` | 🔒 session |
| GET | `/v1/events` | 🔒 session |
| GET | `/v1/events/{eventId}` | 🔒 session |
| PATCH | `/v1/events/{eventId}` | 🔒 session |
| GET | `/v1/events/{eventId}/activities` | 🔒 session |
| POST | `/v1/events/{eventId}/activities` | 🔒 session |
| DELETE | `/v1/events/{eventId}/activities/{activityId}` | 🔒 session |
| PATCH | `/v1/events/{eventId}/activities/{activityId}` | 🔒 session |
| POST | `/v1/events/{eventId}/activities/{activityId}/answers` | 🔒 session |
| POST | `/v1/events/{eventId}/activities/{activityId}/start` | 🔒 session |
| POST | `/v1/events/{eventId}/activities/{activityId}/vote` | 🔒 session |
| DELETE | `/v1/events/{eventId}/answers/{answerId}` | 🔒 session |
| POST | `/v1/events/{eventId}/answers/{answerId}/upvote` | 🔒 session |
| GET | `/v1/events/{eventId}/backstage` | 🔒 session |
| GET | `/v1/events/{eventId}/banners` | 🔒 session |
| POST | `/v1/events/{eventId}/banners` | 🔒 session |
| PUT | `/v1/events/{eventId}/banners/{bannerId}` | 🔒 session |
| GET | `/v1/events/{eventId}/checklist` | 🔒 session |
| PUT | `/v1/events/{eventId}/checklist/{taskId}` | 🔒 session |
| POST | `/v1/events/{eventId}/checklist/tasks` | 🔒 session |
| POST | `/v1/events/{eventId}/register` | 🔒 session |
| GET | `/v1/events/{eventId}/resources` | 🔒 session |
| DELETE | `/v1/events/{eventId}/resources/{resourceId}` | 🔒 session |
| GET | `/v1/events/{eventId}/room` | 🔒 session |
| GET | `/v1/events/{eventId}/stage` | 🔒 session |
| POST | `/v1/events/{eventId}/unregister` | 🔒 session |
| PUT | `/v1/events/{eventId}/video` | 🔒 session |
| GET | `/v1/public/events` | 🌐 public |

## `exams`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/exam-attempts/{attemptId}/submit` | 🔒 session |
| POST | `/v1/exams/{examId}/start` | 🔒 session |
| GET | `/v1/learners/{learnerId}/exam-attempts` | 🔒 session |
| GET | `/v1/subjects/{subjectId}/exams` | 🌐 public |

## `families`

| Method | Path | Auth |
| --- | --- | --- |
| PATCH | `/v1/mentor/contacts/{id}` | 🔐 role `mentor` |
| POST | `/v1/mentor/contacts/{id}/link` | 🔐 role `mentor` |
| POST | `/v1/mentor/contacts/{id}/unlink` | 🔐 role `mentor` |
| GET | `/v1/mentor/families` | 🔐 role `mentor` |
| POST | `/v1/mentor/families` | 🔐 role `mentor` |
| GET | `/v1/mentor/families/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/mentor/families/{id}` | 🔐 role `mentor` |
| POST | `/v1/mentor/families/{id}/care` | 🔐 role `mentor` |
| POST | `/v1/mentor/families/{id}/children` | 🔐 role `mentor` |
| POST | `/v1/mentor/families/{id}/contacts` | 🔐 role `mentor` |
| GET | `/v1/mentor/families/{id}/journey` | 🔐 role `mentor` |
| GET | `/v1/mentor/families/{id}/notes` | 🔐 role `mentor` |
| POST | `/v1/mentor/families/{id}/notes` | 🔐 role `mentor` |
| POST | `/v1/mentor/families/{id}/photos` | 🔐 role `mentor` |
| GET | `/v1/mentor/families/{id}/scorecards` | 🔐 role `mentor` |
| PATCH | `/v1/mentor/family-learners/{id}` | 🔐 role `mentor` |
| PUT | `/v1/mentor/journey/{kind}/{memberId}` | 🔐 role `mentor` |
| PATCH | `/v1/mentor/notes/{id}` | 🔐 role `mentor` |
| POST | `/v1/mentor/notes/{id}/suggest-tags` | 🔐 role `mentor` |
| PATCH | `/v1/mentor/photos/{id}` | 🔐 role `mentor` |
| GET | `/v1/mentor/tag-stats` | 🔐 role `mentor` |

## `forum`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/forum/{kind}/{id}/report` | 🔒 session |
| POST | `/v1/forum/{kind}/{id}/vote` | 🔒 session |
| GET | `/v1/forum/topics` | 🔒 session |
| POST | `/v1/forum/topics` | 🔒 session |
| GET | `/v1/forum/topics/{topicId}` | 🔒 session |
| POST | `/v1/forum/topics/{topicId}/replies` | 🔒 session |

## `geography`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/mentor/geography` | 🔒 session |

## `grammarLive`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/grammar-live` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/grammar-live/{sessionId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/grammar-live/{sessionId}` | 🔒 session |

## `gull`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/public/gull/entities/{id}/history` | 🌐 public |
| GET | `/v1/public/gull/graph` | 🌐 public |

## `ielts`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/ielts-live-classes` | 🔐 role `admin` |
| GET | `/v1/ielts-live-classes/{classId}` | 🔐 role `admin` |
| DELETE | `/v1/ielts-milestones/{milestoneId}` | 🔒 session |
| PATCH | `/v1/ielts-milestones/{milestoneId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/grammar-membership` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-assessment-brief` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-baseline` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-baselines` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-baselines` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/ielts-baselines/{baselineId}` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-declarations` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-diag4` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-diag4/{skill}/start` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-diag4/attempts/{attemptId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-diag4/attempts/{attemptId}/submit` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-diag4/reports/{reportId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-diagnostic` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-diagnostic/submit` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-exam-quiz` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-exam-quiz/submit` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-goal` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-goal` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-goal/milestones` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-goal/milestones/apply` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-goal/milestones/suggest` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-learner-profile` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-learner-profile` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-learning-plan` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-learning-plan` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/ielts-learning-plan/share` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-learning-plan/share` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-learning-plan/share` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-membership` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-model` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-model/history` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-pathway` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-productions` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-productions/speaking` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-productions/speaking/{productionId}/choose` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-productions/writing` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-profile` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-setup` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-setup` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-study-rewards` | 🔒 session |
| GET | `/v1/public/ielts/learning-plans/{slug}` | 🌐 public |

## `ieltsContent`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/ielts/content/clusters` | 🔐 role `admin` |
| PATCH | `/v1/admin/ielts/content/clusters/{id}` | 🔐 role `admin` |
| GET | `/v1/admin/ielts/content/items/{id}` | 🔐 role `admin` |
| PATCH | `/v1/admin/ielts/content/items/{id}` | 🔐 role `admin` |
| PATCH | `/v1/admin/ielts/content/questions/{id}` | 🔐 role `admin` |
| POST | `/v1/learners/{learnerId}/ielts-content/check` | 🔒 session |
| GET | `/v1/public/ielts/content/{skill}/{slug}` | 🔐 role `admin` |
| GET | `/v1/public/ielts/content/clusters` | 🔒 session |
| GET | `/v1/public/ielts/content/lexicon/{domain}` | 🔒 session |
| GET | `/v1/public/ielts/content/warmup` | 🔐 role `admin` |
| GET | `/v1/public/ielts/exam-papers` | 🔒 session |

## `ieltsFullTests`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/ielts-full-tests/unlocks` | 🔐 role `admin` |
| POST | `/v1/admin/ielts-full-tests/unlocks` | 🔐 role `admin` |
| GET | `/v1/learners/{learnerId}/ielts-full-tests` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-full-tests/{n}/attempts` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-full-tests/attempts/{attemptId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-full-tests/attempts/{attemptId}/finish` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-full-tests/attempts/{attemptId}/report` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-full-tests/attempts/{attemptId}/sections/{skill}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-full-tests/attempts/{attemptId}/sections/{skill}/start` | 🔒 session |

## `ieltsPractice`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/learners/{learnerId}/ielts-practice-attempts` | 🔒 session |
| GET | `/v1/public/ielts/listening/{cluster}/{seq}/audio` | 🔒 session |
| GET | `/v1/public/ielts/micro-items/{itemId}/audio` | 🔒 session |
| GET | `/v1/public/ielts/reading/{cluster}/{seq}/audio` | 🔒 session |

## `ieltsSkills`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/ielts-effort` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-grammar` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-grammar` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-ladder/speaking` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-ladder/writing` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-micro-attempts` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/ielts-micro-progress` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-micro-progress` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/ielts-micro-progress` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-paper-bands` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-paper-parts` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-recordings` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-recordings/{productionId}/audio` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-reports` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-skills/{skill}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/ielts-speaking-turns` | 🔒 session |
| GET | `/v1/learners/{learnerId}/ielts-vocabulary` | 🔒 session |
| POST | `/v1/learners/{learnerId}/learning-events` | 🔒 session |

## `invitations`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/invitations` | 🔒 session |
| POST | `/v1/invitations` | 🔒 session |
| POST | `/v1/invitations/accept` | 🔒 session |
| POST | `/v1/invitations/accept-guardian` | 🔒 session |
| POST | `/v1/invitations/guardian` | 🔒 session |
| PATCH | `/v1/learners/{learnerId}/learning-priority` | 🔒 session |
| POST | `/v1/learners/self` | 🔒 session |

## `journeySummary`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/me/journey-summary` | 🌐 public |

## `journeys`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/journeys` | 🔒 session |
| GET | `/v1/admin/learners/{learnerId}/journeys` | 🔒 session |
| GET | `/v1/learners/{learnerId}/journeys` | 🔐 role `admin` |
| POST | `/v1/learners/{learnerId}/journeys/{journeyId}/actions/{actionId}/accept` | 🔐 role `admin` |
| POST | `/v1/learners/{learnerId}/journeys/{journeyId}/snooze` | 🔐 role `admin` |
| POST | `/v1/learners/{learnerId}/journeys/re-evaluate` | 🔐 role `admin` |

## `knowledge`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/diagnostic/{sessionId}/next` | 🔒 session |
| POST | `/v1/diagnostic/{sessionId}/submit` | 🔒 session |
| POST | `/v1/diagnostic/start` | 🔒 session |
| GET | `/v1/learners/{learnerId}/cockpit` | 🔒 session |
| POST | `/v1/learners/{learnerId}/goal` | 🔒 session |
| GET | `/v1/learners/{learnerId}/units/gate` | 🔒 session |
| POST | `/v1/learners/{learnerId}/units/gate/ack` | 🔒 session |
| GET | `/v1/subjects` | 🌐 public |
| GET | `/v1/subjects/{subjectId}/graph` | 🌐 public |

## `leaderboard`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/admin/leaderboard/close` | 🔒 session |
| POST | `/v1/admin/nemo-ledger/{ledgerId}/paid` | 🔒 session |
| GET | `/v1/ielts/leaderboard` | 🔒 session |
| GET | `/v1/ielts/leaderboard/weeks` | 🔒 session |
| GET | `/v1/ielts/leaderboard/weeks/{weekStart}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/nemo-wallet` | 🔒 session |

## `learner-profile`

| Method | Path | Auth |
| --- | --- | --- |
| DELETE | `/v1/learners/{learnerId}/photo` | 🔒 session |
| GET | `/v1/learners/{learnerId}/photo` | 🔒 session |
| POST | `/v1/learners/{learnerId}/photo` | 🔒 session |
| GET | `/v1/learners/{learnerId}/self-profile` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/self-profile` | 🔒 session |

## `learning`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/labs/{labId}` | 🔒 session |
| POST | `/v1/labs/{labId}/evidence` | 🔒 session |
| POST | `/v1/learners/{learnerId}/experience/complete` | 🔒 session |
| GET | `/v1/learners/{learnerId}/lab-favorites` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/lab-favorites/{labId}` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/lab-favorites/{labId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/labs` | 🔒 session |
| POST | `/v1/learners/{learnerId}/practice/start` | 🔒 session |
| GET | `/v1/learners/{learnerId}/xp` | 🔒 session |
| POST | `/v1/practice/{sessionId}/answer` | 🔒 session |
| POST | `/v1/practice/{sessionId}/warmup` | 🔒 session |
| GET | `/v1/subjects/{subjectId}/labs` | 🔒 session |

## `liveSession`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/live/form` | 🔒 session |
| POST | `/v1/live/join` | 🔒 session |
| GET | `/v1/live/room/{id}` | 🔒 session |
| POST | `/v1/live/room/{id}/answer` | 🔒 session |
| POST | `/v1/live/room/{id}/checkin` | 🔒 session |
| POST | `/v1/live/room/{id}/reflection` | 🔒 session |
| GET | `/v1/live/sessions` | 🔒 session |
| POST | `/v1/live/sessions` | 🔒 session |
| GET | `/v1/live/sessions/{id}` | 🔒 session |
| POST | `/v1/live/sessions/{id}/control` | 🔒 session |
| GET | `/v1/live/sessions/{id}/progress` | 🔒 session |

## `markmaps`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/markmaps` | 🔒 session |
| POST | `/v1/markmaps` | 🔒 session |
| GET | `/v1/markmaps/{id}` | 🔒 session |
| PUT | `/v1/markmaps/{id}` | 🔒 session |
| PUT | `/v1/markmaps/{id}/visibility` | 🔒 session |
| GET | `/v1/public/markmaps` | 🌐 public |
| GET | `/v1/public/markmaps/{id}` | 🌐 public |

## `marlin-pains`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/marlin-pains` | 🌐 public |
| GET | `/v1/marlin-pains/{slug}` | 🌐 public |

## `membership`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/me/membership` | 🔒 session |
| PATCH | `/v1/me/profile` | 🔒 session |

## `mentor`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/mentor-notes` | 🔐 role `mentor` |
| POST | `/v1/learners/{learnerId}/mentor-notes` | 🔐 role `mentor` |
| PATCH | `/v1/mentor/ielts-productions/{productionId}` | 🔐 role `mentor` |
| GET | `/v1/mentor/ielts-productions/{productionId}/audio` | 🔐 role `mentor` |
| GET | `/v1/mentor/learners` | 🔐 role `mentor` |
| GET | `/v1/mentor/learners/{learnerId}/ai-teen-model` | 🔐 role `mentor` |
| GET | `/v1/mentor/learners/{learnerId}/ielts-report` | 🔐 role `mentor` |

## `microSkills`

| Method | Path | Auth |
| --- | --- | --- |
| PATCH | `/v1/admin/ielts/micro-skill-items/{id}` | 🔐 role `admin` |
| GET | `/v1/admin/ielts/micro-skills` | 🔐 role `admin` |
| PATCH | `/v1/admin/ielts/micro-skills/{id}` | 🔐 role `admin` |
| GET | `/v1/public/ielts/micro-skills` | 🔒 session |
| GET | `/v1/public/ielts/micro-skills/{skill}/{code}` | 🔒 session |
| GET | `/v1/public/ielts/micro-skills/{skill}/{code}/levels/{level}/{seq}` | 🔒 session |
| GET | `/v1/public/ielts/task-types` | 🔒 session |
| GET | `/v1/public/ielts/task-types/{skill}/{code}` | 🔒 session |

## `models`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/context-event-kinds` | 🌐 public |
| GET | `/v1/learners/{learnerId}/context-events` | 🔒 session |
| POST | `/v1/learners/{learnerId}/context-events` | 🔒 session |
| GET | `/v1/learners/{learnerId}/learning-plan` | 🔒 session |
| POST | `/v1/learners/{learnerId}/learning-plan/replan` | 🔒 session |
| GET | `/v1/learners/{learnerId}/learning-plan/versions/{version}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/lighthouse` | 🔒 session |
| GET | `/v1/learners/{learnerId}/model-versions` | 🔒 session |
| GET | `/v1/learners/{learnerId}/model-versions/{version}` | 🔒 session |

## `onboarding`

| Method | Path | Auth |
| --- | --- | --- |
| PATCH | `/v1/exam-targets/{targetId}` | 🔒 session |
| PATCH | `/v1/goal-dates/{dateId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/exam-schedule` | 🔒 session |
| POST | `/v1/learners/{learnerId}/exam-schedule` | 🔒 session |
| GET | `/v1/learners/{learnerId}/exam-targets` | 🔒 session |
| POST | `/v1/learners/{learnerId}/exam-targets` | 🔒 session |
| GET | `/v1/learners/{learnerId}/goal-dates` | 🔒 session |
| POST | `/v1/learners/{learnerId}/initialize-models` | 🔒 session |
| PATCH | `/v1/learners/{learnerId}/intensity` | 🔒 session |
| GET | `/v1/learners/{learnerId}/onboarding` | 🔒 session |
| GET | `/v1/learners/{learnerId}/profile` | 🔒 session |
| PATCH | `/v1/learners/{learnerId}/profile` | 🔒 session |
| POST | `/v1/learners/{learnerId}/schools` | 🔒 session |

## `orca`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/orca/actions` | 🔒 session |
| GET | `/v1/orca/competitions` | 🔒 session |
| GET | `/v1/orca/competitions/{id}` | 🔒 session |

## `outreach`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/outreach/blocks` | 🔐 role `admin` |
| POST | `/v1/admin/outreach/blocks` | 🔐 role `admin` |
| DELETE | `/v1/admin/outreach/blocks/{key}` | 🔐 role `admin` |
| POST | `/v1/admin/outreach/import` | 🔐 role `admin` |
| GET | `/v1/admin/outreach/orgs` | 🔐 role `admin` |
| GET | `/v1/admin/outreach/orgs/{orgId}` | 🔐 role `admin` |
| PATCH | `/v1/admin/outreach/orgs/{orgId}` | 🔐 role `admin` |
| POST | `/v1/admin/outreach/orgs/{orgId}/attempts` | 🔐 role `admin` |
| POST | `/v1/admin/outreach/preview` | 🔐 role `admin` |
| POST | `/v1/admin/outreach/send` | 🔐 role `admin` |
| GET | `/v1/admin/outreach/summary` | 🔐 role `admin` |
| GET | `/v1/admin/outreach/templates` | 🔐 role `admin` |
| PATCH | `/v1/admin/outreach/templates/{templateId}` | 🔐 role `admin` |

## `parent`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/beliefs` | 🔒 session |
| POST | `/v1/learners/{learnerId}/beliefs` | 🔒 session |
| GET | `/v1/learners/{learnerId}/observations` | 🔒 session |
| POST | `/v1/learners/{learnerId}/observations` | 🔒 session |
| GET | `/v1/learners/{learnerId}/parent-recommendation` | 🔒 session |
| GET | `/v1/parent/next-steps` | 🔒 session |

## `parentModel`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/parents` | 🔐 role `admin` |
| GET | `/v1/admin/parents/{userId}` | 🔐 role `admin` |
| GET | `/v1/admin/parents/{userId}/evidence` | 🔐 role `admin` |
| POST | `/v1/admin/parents/{userId}/recompute` | 🔐 role `admin` |
| POST | `/v1/admin/parents/backfill-evidence` | 🔐 role `admin` |
| POST | `/v1/admin/parents/recompute` | 🔐 role `admin` |
