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:
{
"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<ListVideoDto> format as /client/v1/videos/vod.
{
"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:
{
"title": "My Short Video",
"type": 2,
"isShort": true,
"scheduledAt": "2026-03-20T00:00:00Z",
"visibility": 0,
"downloadUrl": "https://...",
"description": { "blocks": [] }
}
typeis still2(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 (checkisShortin response)PUT /studio/v1/videos/{id}— updateDELETE /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
isShortis a boolean, not a new video type —typeremains2(Vod)- Existing videos all have
isShort: falseby 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