API: Curation
Controller: admin-curation.controllers.ts. Mount various curation resources.
Collections
Section titled “Collections”Mount admin/collections.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/collections | curation:read |
| GET | /admin/collections/:id | curation:read |
| POST | /admin/collections | curation:write |
| PUT | /admin/collections/:id | curation:write |
| DELETE | /admin/collections/:id | curation:write |
| PUT | /admin/collections/:id/items | curation:write |
Create request
Section titled “Create request”{ "slug": "top-romance-ph", "titleI18n": { "en": "Top Romance in the Philippines", "ar": "أفضل الرومانسية في الفلبين", "id": "Romantis Teratas di Filipina" }, "explanation": "Popular romance titles in the Philippines this week", "type": "rule", "rule": { "genre": "romance", "market": "PH", "sort": "top_this_week", "limit": 20, "window_days": 7 }}For manual collections, set type: "manual" and omit rule; then use PUT /admin/collections/:id/items with { items: [{seriesId, sort}, ...] }.
Mount admin/rails.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/rails | curation:read |
| POST | /admin/rails | curation:write |
| PUT | /admin/rails/reorder | curation:write |
| PUT | /admin/rails/:id | curation:write |
| DELETE | /admin/rails/:id | curation:write |
Rail shape
Section titled “Rail shape”{ "id": "0197...", "surface": "for_you", "collectionId": "0198...", "sort": 3, "status": "active"}Reorder
Section titled “Reorder”{ "surface": "for_you", "order": ["railId1", "railId2", "railId3"]}Preview reel
Section titled “Preview reel”Mount admin/preview-reel.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/preview-reel | curation:read |
| PUT | /admin/preview-reel | curation:write |
PUT is a full-replace on the ordering. Body:
{ "entries": [ { "seriesId": "0193a...", "editorialHeroScore": 95 }, { "seriesId": "0193b...", "editorialHeroScore": 80 }, { "seriesId": "0193c...", "editorialHeroScore": 65 } ]}Free-today rotation
Section titled “Free-today rotation”Mount admin/free-series.
| Method | Path | Perm |
|---|---|---|
| GET | /admin/free-series | curation:read |
| PUT | /admin/free-series | curation:write |
| DELETE | /admin/free-series/:date | curation:write |
| POST | /admin/free-series/generate-auto | curation:write |
Set / update a date
Section titled “Set / update a date”{ "date": "2026-08-01", "seriesId": "0193...", "marketCode": "PH", "notes": "Filipino romance launch push"}date is UTC ISO-date. marketCode optional (null = all markets).
Auto-generate
Section titled “Auto-generate”{ "days": 30, "market": "PH"}Fills empty dates in the next N days using the heuristic. Non-empty dates are skipped.