# Shorts (Short-Form Videos) - Frontend Integration Guide ## Overview Short-form videos (Shorts) are regular videos with `isShort: true`. They use the existing video infrastructure for creation, editing, and interactions (reactions, comments, subscriptions, reports). Two new feed endpoints return only short videos. ## What Changed ### New field on all video responses Every video DTO (`VideoDto`, `ListVideoDto`) now includes: ```json { "isShort": true | false } ``` This field is present on all existing video endpoints — no changes needed to parse it. ### New endpoints | Method | Path | Description | |--------|------|-------------| | GET | `/client/v1/shorts` | Paginated shorts feed | | GET | `/mobile/v1/shorts` | Paginated shorts feed (mobile) | **Query parameters:** | Param | Type | Default | Description | |-------|------|---------|-------------| | `page` | int | required | Page number | | `pageSize` | int | 10 | Items per page | | `channelId` | string? | null | Filter by channel | **Response:** Same `Pagination` format as `/client/v1/videos/vod`. ```json { "items": [ { "id": "abc123", "handle": "my-short-video", "name": "Quick Tutorial", "isShort": true, "type": 2, "status": 3, "duration": "00:00:45", "thumbnail": "https://...", "channel": { "id": "...", "name": "...", "handle": "...", "image": "..." }, "metrics": { "likes": 0, "views": 0, ... } } ], "totalCount": 1 } ``` ## Studio (Creating/Managing Shorts) Use the **existing video endpoints** — no separate studio routes for shorts. ### Creating a short `POST /studio/v1/videos/` with `isShort: true`: ```json { "title": "My Short Video", "type": 2, "isShort": true, "scheduledAt": "2026-03-20T00:00:00Z", "visibility": 0, "downloadUrl": "https://...", "description": { "blocks": [] } } ``` - `type` is still `2` (Vod) — shorts are uploaded videos, not livestreams - The upload pipeline (multipart upload, encoding) works exactly the same ### Editing/Deleting a short Use the same endpoints as regular videos: - `GET /studio/v1/videos/{id}` — get short details (check `isShort` in response) - `PUT /studio/v1/videos/{id}` — update - `DELETE /studio/v1/videos/{id}` — delete ### Listing shorts in studio Use `GET /studio/v1/videos/vod` — the response now includes `isShort` on each item. Filter client-side, or use `GET /studio/v1/videos/search?q=...&type=2` and filter by `isShort`. ## Interactions All interactions work through existing video endpoints — a short is just a video: | Action | Endpoint | |--------|----------| | Get/create/delete reactions | `/client/v1/videos/{id}/reactions` | | Get/create/delete comments | `/client/v1/videos/{id}/comments` | | Get/create/delete subscriptions | `/client/v1/videos/{id}/subscriptions` | | Report | `POST /client/v1/videos/{id}/reports` | | Watch single short | `GET /client/v1/videos/{id}` | | Short details | `GET /client/v1/videos/{id}/details` | ## Key Points - `isShort` is a boolean, not a new video type — `type` remains `2` (Vod) - Existing videos all have `isShort: false` by default - The shorts feed only returns videos where `isShort: true`, visibility is public, and status is complete - Cache is separate from VOD cache, so short feed updates independently