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

# API Catalog · partners tới whale

> ⚙️ **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). 20 module, 227 endpoint, `partners` tới `whale`.

## `partners`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/partners` | 🔐 role `admin` |
| POST | `/v1/admin/partners/{code}/status` | 🔐 role `admin` |
| GET | `/v1/admin/partners/buyer` | 🔐 role `admin` |
| POST | `/v1/admin/partners/payouts/{id}/paid` | 🔐 role `admin` |
| POST | `/v1/admin/partners/sales` | 🔐 role `admin` |
| POST | `/v1/admin/partners/sales/{ref}/refund` | 🔐 role `admin` |
| GET | `/v1/admin/partners/tax-report` | 🔐 role `admin` |
| POST | `/v1/partners/apply` | 🔒 session |
| POST | `/v1/partners/clicks` | 🌐 public |
| GET | `/v1/partners/me` | 🔒 session |
| PUT | `/v1/partners/me/bank` | 🔒 session |
| POST | `/v1/partners/me/campaigns` | 🔒 session |
| POST | `/v1/partners/me/payouts` | 🔒 session |
| POST | `/v1/partners/me/payouts/{id}/cancel` | 🔒 session |
| GET | `/v1/partners/my-discount` | 🔒 session |

## `platform`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/health` | 🌐 public |

## `portraits`

| Method | Path | Auth |
| --- | --- | --- |
| PATCH | `/v1/activities/{activityId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/activities` | 🔒 session |
| POST | `/v1/learners/{learnerId}/milestones` | 🔒 session |
| GET | `/v1/learners/{learnerId}/portraits` | 🔒 session |
| POST | `/v1/learners/{learnerId}/portraits` | 🔒 session |
| POST | `/v1/learners/{learnerId}/tracks` | 🔒 session |
| PATCH | `/v1/milestones/{milestoneId}` | 🔒 session |
| PATCH | `/v1/portraits/{portraitId}` | 🔒 session |
| GET | `/v1/portraits/{portraitId}/comments` | 🔒 session |
| POST | `/v1/portraits/{portraitId}/comments` | 🔒 session |
| PUT | `/v1/portraits/{portraitId}/learner-sections` | 🔒 session |
| POST | `/v1/portraits/{portraitId}/react` | 🔒 session |
| PATCH | `/v1/tracks/{trackId}` | 🔒 session |

## `privacy`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/consents` | 🔒 session |
| POST | `/v1/consents` | 🔒 session |
| POST | `/v1/consents/{consentId}/revoke` | 🔒 session |
| GET | `/v1/privacy/data-usage` | 🔒 session |
| POST | `/v1/privacy/deletion-requests` | 🔒 session |
| GET | `/v1/privacy/deletion-requests/{requestId}` | 🔒 session |
| GET | `/v1/privacy/retention-policies` | 🔒 session |

## `programInterest`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/me/program-interest` | 🔒 session |
| POST | `/v1/me/program-interest` | 🔒 session |
| GET | `/v1/me/program-join` | 🔒 session |
| POST | `/v1/me/program-join` | 🔒 session |

## `progress`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/daily` | 🔒 session |
| GET | `/v1/learners/{learnerId}/forecast` | 🔒 session |
| GET | `/v1/learners/{learnerId}/gaps` | 🔒 session |
| GET | `/v1/learners/{learnerId}/metrics` | 🔒 session |
| GET | `/v1/learners/{learnerId}/overview` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/pins` | 🔒 session |
| GET | `/v1/learners/{learnerId}/pins` | 🔒 session |
| POST | `/v1/learners/{learnerId}/pins` | 🔒 session |
| GET | `/v1/learners/{learnerId}/progress` | 🔒 session |
| GET | `/v1/learners/{learnerId}/report-subjects` | 🔒 session |

## `referral`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/referral/claim` | 🔒 session |
| GET | `/v1/referral/me` | 🔒 session |

## `retention`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/retention/review-queue` | 🔒 session |
| GET | `/v1/learners/{learnerId}/retention/summary` | 🔒 session |

## `sat`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/sat/forms` | 🔐 role `admin` |
| POST | `/v1/admin/sat/forms` | 🔐 role `admin` |
| PUT | `/v1/admin/sat/forms/{id}/modules/{section}/{stage}` | 🔐 role `admin` |
| POST | `/v1/admin/sat/forms/{id}/publish` | 🔐 role `admin` |
| GET | `/v1/admin/sat/forms/{id}/validate` | 🔐 role `admin` |
| GET | `/v1/admin/sat/items` | 🔐 role `admin` |
| POST | `/v1/admin/sat/items` | 🔐 role `admin` |
| GET | `/v1/admin/sat/items/{id}` | 🔐 role `admin` |
| POST | `/v1/admin/sat/items/{id}/review` | 🔐 role `admin` |
| PUT | `/v1/learners/{learnerId}/sat/answers/{sessionId}/{itemId}/cause` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/effort` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/goal` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/sat/goal` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/home` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/mistakes` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/plan` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/sat/plan` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/sat/plan/weeks/{week}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/sat/practice` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/practice/{sessionId}` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/sat/practice/{sessionId}/answers/{itemId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/sat/practice/{sessionId}/submit` | 🔒 session |
| POST | `/v1/learners/{learnerId}/sat/sessions` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/sessions/{sessionId}` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/sat/sessions/{sessionId}/answers/{itemId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/sessions/{sessionId}/report` | 🔒 session |
| POST | `/v1/learners/{learnerId}/sat/sessions/{sessionId}/submit` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/skills` | 🔒 session |
| GET | `/v1/learners/{learnerId}/sat/summary` | 🔒 session |

## `schoolCodes`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/school-codes` | 🔐 role `admin` |
| POST | `/v1/admin/school-codes` | 🔐 role `admin` |
| GET | `/v1/admin/school-codes/{code}/redemptions` | 🔐 role `admin` |
| POST | `/v1/admin/school-codes/{code}/revoke` | 🔐 role `admin` |
| GET | `/v1/learners/{learnerId}/school-code` | 🔒 session |
| POST | `/v1/learners/{learnerId}/school-code` | 🔒 session |
| GET | `/v1/public/school-codes/{code}` | 🌐 public |

## `showcase`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/media/{id}` | 🔐 role `mentor` |
| GET | `/v1/public/albums` | 🌐 public |
| GET | `/v1/public/albums/{slug}` | 🌐 public |
| GET | `/v1/public/chat-testimonials` | 🌐 public |
| GET | `/v1/public/membership-pricing` | 🌐 public |
| GET | `/v1/public/mentors` | 🌐 public |
| GET | `/v1/public/mentors/{slug}` | 🌐 public |
| GET | `/v1/public/photos` | 🌐 public |
| GET | `/v1/public/pricing` | 🌐 public |
| GET | `/v1/public/provinces` | 🌐 public |
| GET | `/v1/public/schools` | 🌐 public |
| GET | `/v1/public/schools/{slug}` | 🌐 public |
| GET | `/v1/public/schools/so-sanh` | 🌐 public |
| GET | `/v1/public/stories` | 🌐 public |
| GET | `/v1/public/stories/{slug}` | 🌐 public |
| GET | `/v1/public/testimonials` | 🌐 public |
| DELETE | `/v1/showcase/achievements/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/showcase/achievements/{id}` | 🔐 role `mentor` |
| GET | `/v1/showcase/albums` | 🔐 role `mentor` |
| POST | `/v1/showcase/albums` | 🔐 role `mentor` |
| DELETE | `/v1/showcase/albums/{id}` | 🔐 role `mentor` |
| GET | `/v1/showcase/albums/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/showcase/albums/{id}` | 🔐 role `mentor` |
| POST | `/v1/showcase/albums/{id}/items` | 🔐 role `mentor` |
| PUT | `/v1/showcase/albums/{id}/people` | 🔐 role `mentor` |
| GET | `/v1/showcase/chat-testimonials` | 🔒 session |
| POST | `/v1/showcase/chat-testimonials` | 🔒 session |
| DELETE | `/v1/showcase/chat-testimonials/{id}` | 🔒 session |
| PUT | `/v1/showcase/chat-testimonials/{id}` | 🔒 session |
| DELETE | `/v1/showcase/items/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/showcase/items/{id}` | 🔐 role `mentor` |
| POST | `/v1/showcase/media` | 🔐 role `mentor` |
| GET | `/v1/showcase/mentors` | 🔐 role `mentor` |
| POST | `/v1/showcase/mentors` | 🔐 role `mentor` |
| DELETE | `/v1/showcase/mentors/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/showcase/mentors/{id}` | 🔐 role `mentor` |
| DELETE | `/v1/showcase/programs/{id}` | 🔐 role `mentor` |
| GET | `/v1/showcase/schools` | 🔐 role `mentor` |
| POST | `/v1/showcase/schools` | 🔐 role `mentor` |
| GET | `/v1/showcase/schools/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/showcase/schools/{id}` | 🔐 role `mentor` |
| POST | `/v1/showcase/schools/{id}/achievements` | 🔐 role `mentor` |
| POST | `/v1/showcase/schools/{id}/programs` | 🔐 role `mentor` |
| PUT | `/v1/showcase/schools/{id}/stats` | 🔐 role `mentor` |
| POST | `/v1/showcase/schools/{id}/students` | 🔐 role `mentor` |
| DELETE | `/v1/showcase/students/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/showcase/students/{id}` | 🔐 role `mentor` |
| GET | `/v1/showcase/testimonials` | 🔐 role `mentor` |
| POST | `/v1/showcase/testimonials` | 🔐 role `mentor` |
| DELETE | `/v1/showcase/testimonials/{id}` | 🔐 role `mentor` |
| PATCH | `/v1/showcase/testimonials/{id}` | 🔐 role `mentor` |
| POST | `/v1/showcase/testimonials/from-note` | 🔐 role `mentor` |

## `slots`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/slot-bookings` | 🔒 session |
| POST | `/v1/learners/{learnerId}/slot-bookings` | 🔒 session |
| GET | `/v1/learners/{learnerId}/slot-preferences` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/slot-preferences` | 🔒 session |
| GET | `/v1/mentor/slot-preferences` | 🔒 session |
| GET | `/v1/mentor/slot-roster` | 🔒 session |
| GET | `/v1/mentor/slots` | 🔒 session |
| POST | `/v1/mentor/slots` | 🔒 session |
| PATCH | `/v1/mentor/slots/{slotId}` | 🔒 session |
| GET | `/v1/public/slots` | 🌐 public |
| DELETE | `/v1/slot-bookings/{bookingId}` | 🔒 session |
| GET | `/v1/slots` | 🔒 session |

## `speakAudio`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/speak-audio/{topic}/{turn}/{line}/{variant}/{voice}` | 🔒 session |

## `speakCourses`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/speak-orders` | 🔒 session |
| POST | `/v1/admin/speak-orders/{id}/paid` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-enroll` | 🔐 role `admin` |
| GET | `/v1/learners/{learnerId}/speak-orders` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-orders` | 🔒 session |

## `speakPair`

| Method | Path | Auth |
| --- | --- | --- |
| POST | `/v1/learners/{learnerId}/speak-pairs` | 🔒 session |
| GET | `/v1/learners/{learnerId}/speak-pairs/{sessionId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-pairs/{sessionId}/done` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-pairs/{sessionId}/leave` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-pairs/{sessionId}/ready` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-pairs/{sessionId}/step` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-pairs/join` | 🔒 session |
| GET | `/v1/learners/{learnerId}/speak-schedule` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/speak-schedule/{sessionId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/speak-schedule/{sessionId}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-schedule/{sessionId}` | 🔒 session |

## `speakRooms`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/learners/{learnerId}/speak-recordings` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/speak-recordings/{recordingId}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/speak-recordings/{recordingId}/audio` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-rooms` | 🔒 session |
| GET | `/v1/learners/{learnerId}/speak-rooms/{code}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-rooms/{code}/consent` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-rooms/{code}/host` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-rooms/{code}/leave` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-rooms/{code}/recording` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-rooms/{code}/token` | 🔒 session |
| POST | `/v1/learners/{learnerId}/speak-rooms/join` | 🔒 session |

## `tutors`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/flags/{key}` | 🔐 role `admin` |
| PUT | `/v1/admin/flags/{key}` | 🔐 role `admin` |
| GET | `/v1/admin/tutors/listings` | 🔐 role `admin` |
| POST | `/v1/admin/tutors/listings/{id}/status` | 🔐 role `admin` |
| GET | `/v1/admin/tutors/matches` | 🔐 role `admin` |
| POST | `/v1/admin/tutors/matches/{id}/connected` | 🔐 role `admin` |
| POST | `/v1/tutors/interests` | 🔒 session |
| POST | `/v1/tutors/interests/{id}/respond` | 🔒 session |
| GET | `/v1/tutors/listings` | 🔒 session |
| POST | `/v1/tutors/listings` | 🔒 session |
| DELETE | `/v1/tutors/listings/{id}` | 🔒 session |
| PUT | `/v1/tutors/listings/{id}` | 🔒 session |
| POST | `/v1/tutors/listings/{id}/close` | 🔒 session |
| POST | `/v1/tutors/listings/{id}/pause` | 🔒 session |
| POST | `/v1/tutors/listings/{id}/reopen` | 🔒 session |
| POST | `/v1/tutors/listings/{id}/resume` | 🔒 session |
| GET | `/v1/tutors/me` | 🔒 session |

## `videos`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/videos` | 🔐 role `admin` |
| PATCH | `/v1/admin/videos/{id}` | 🔐 role `admin` |
| GET | `/v1/owner/videos/{id}` | 🔒 session |
| GET | `/v1/owner/videos/{id}/subtitles/{lang}` | 🔒 session |
| GET | `/v1/public/videos/{id}` | 🌐 public |
| GET | `/v1/public/videos/{id}/poster` | 🌐 public |
| GET | `/v1/public/videos/{id}/subtitles/{lang}` | 🌐 public |

## `walks`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/admin/walk-entries` | 🔐 role `admin` |
| GET | `/v1/admin/walks` | 🔐 role `admin` |
| POST | `/v1/admin/walks/{date}/pairs` | 🔐 role `admin` |
| GET | `/v1/learners/{learnerId}/walk-entry` | 🔒 session |
| PUT | `/v1/learners/{learnerId}/walk-entry/profile` | 🔒 session |
| POST | `/v1/learners/{learnerId}/walk-entry/quiz` | 🔒 session |
| GET | `/v1/learners/{learnerId}/walks` | 🔒 session |
| DELETE | `/v1/learners/{learnerId}/walks/{date}` | 🔒 session |
| POST | `/v1/learners/{learnerId}/walks/{date}` | 🔒 session |
| GET | `/v1/learners/{learnerId}/walks/{date}/checkin` | 🔒 session |
| POST | `/v1/learners/{learnerId}/walks/{date}/checkin` | 🔒 session |

## `whale`

| Method | Path | Auth |
| --- | --- | --- |
| GET | `/v1/whale/countries` | 🌐 public |
| GET | `/v1/whale/countries/{code}` | 🌐 public |
| GET | `/v1/whale/opportunities` | 🌐 public |
| GET | `/v1/whale/preferences` | 🔒 session |
| PUT | `/v1/whale/preferences` | 🔒 session |
| GET | `/v1/whale/recommendations` | 🔒 session |
| GET | `/v1/whale/scholarships` | 🌐 public |
| GET | `/v1/whale/scholarships/{id}` | 🌐 public |
| GET | `/v1/whale/stories` | 🌐 public |
| GET | `/v1/whale/universities/{id}` | 🌐 public |
