REST API¶
The Fast Video Cataloger Server provides a comprehensive REST API for integration with external applications and custom clients. The API uses JSON for request and response bodies.
API Documentation¶
Interactive API documentation is available via Swagger UI at:
The OpenAPI 3.0 specification is available at:
Base URL¶
All API endpoints are prefixed with /api/v1/.
Authentication¶
Most endpoints require authentication. Include the session token in requests using either:
Authorization Header (recommended):
Query String:
To obtain a token, use the login endpoint (see Authentication section below).
Roles¶
The API supports three user roles:
| Role | Permissions |
|---|---|
| Viewer | Read-only access to all resources |
| Editor | Read and write access (create, update, delete) |
| Admin | Full access including user management |
Authentication Endpoints¶
Check if Authentication Required¶
Returns whether authentication is required for this server.
Response:
Login¶
Authenticate and obtain a session token.
Request Body:
Response:
{
"success": true,
"token": "session-token-string",
"expiresAt": "2024-01-15T12:00:00Z",
"role": "Editor"
}
Logout¶
Invalidate the current session token.
Get Session Info¶
Get information about the current session.
Response:
Videos¶
Search Videos¶
Search and list videos with optional filters.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
search |
string | Text search query |
keywords |
string | Comma-separated keyword filter |
title |
string | Filter by title |
genre |
int | Filter by genre ID |
minRating |
int | Minimum rating (0-5) |
maxRating |
int | Maximum rating (0-5) |
offset |
int | Pagination offset (default: 0) |
limit |
int | Max results |
Response:
Get Video¶
Get details for a specific video.
Get Video Preview Image¶
Returns the video preview image as JPEG binary data.
Stream Video¶
Stream video content. Supports HTTP Range headers for seeking.
Get Video Thumbnails¶
Get all scene thumbnails for a video.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
includeImageData |
bool | Include base64 image data (default: false) |
Get Video Actors¶
Get all actors appearing in a video.
Get Video Tags¶
Get all tags applied to a video.
Get Random Videos¶
Get random videos from the catalog.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
count |
int | Number of videos to return (default: 10) |
Get Videos Pending Indexing¶
Get videos that need indexing (no length or no thumbnails).
Batch Get Videos¶
Get multiple videos by ID in a single request. Efficient for avoiding N+1 query patterns.
Request Body:
Add Video (Editor)¶
Add a new video to the catalog.
Request Body:
{
"path": "/path/to/video.mp4",
"title": "Video Title",
"description": "Description",
"genre": 1,
"rating": 4,
"lengthSeconds": 3600,
"link": "https://example.com"
}
Update Video (Editor)¶
Update video properties.
Request Body:
{
"title": "New Title",
"description": "New Description",
"rating": 5,
"genre": 2,
"link": "https://example.com"
}
Delete Video (Editor)¶
Delete a video from the catalog.
Update Video Path (Editor)¶
Change the file path of a video.
Request Body:
Set Video Image (Editor)¶
Set the video preview image. Request body is raw JPEG bytes.
Set Video Genre (Editor)¶
Set the video genre by name.
Set Video Rating (Editor)¶
Request Body:
Tag Video (Editor)¶
Request Body:
Remove Tag from Video (Editor)¶
Add Actor to Video (Editor)¶
Remove Actor from Video (Editor)¶
Get Video Companion Images¶
Get companion images associated with a video.
Remove Video Companion Image (Editor)¶
Get Video Cover Images¶
Get front and back cover images for a video.
Set Video Cover Images (Editor)¶
Request Body:
Get Video Extended Properties¶
Get custom extended properties for a video.
Set Video Extended Property (Editor)¶
Request Body:
Get Video Archives¶
Get archive IDs containing this video.
Archive Video (Editor)¶
Request Body:
Actors¶
Search Actors¶
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
search |
string | Text search query |
firstName |
string | Filter by first name |
lastName |
string | Filter by last name |
tags |
string | Comma-separated tag filter |
skipImageData |
bool | Skip portrait data (default: true) |
limit |
int | Max results |
Get All Actors¶
Get Actor¶
Get Actor Portrait¶
Returns portrait image as JPEG binary data.
Get Actor Tags¶
Get Actor Companion Images¶
Create Actor (Editor)¶
Request Body:
Update Actor (Editor)¶
Delete Actor (Editor)¶
Tag Actor (Editor)¶
Request Body:
Remove Actor Tag (Editor)¶
Remove Actor Companion Image (Editor)¶
Get Actor Face Embedding¶
Get face recognition embedding data for an actor.
Save Actor Face Embedding (Editor)¶
Request Body:
Delete Actor Face Embedding (Editor)¶
Tags¶
Get Video Tags¶
Get all video tag definitions.
Get Thumbnail Tags¶
Get all scene/thumbnail tag definitions.
Get Actor Tags¶
Get all actor tag definitions.
Get Tag Groups¶
Get all tag groups.
Get Video Tags in Group¶
Get Thumbnail Tags in Group¶
Get Genres¶
Get all genre definitions.
Create Video Tag (Editor)¶
Request Body:
{
"name": "Action",
"parentId": null,
"color": 16711680,
"description": "Action scenes",
"link": ""
}
Update Video Tag (Editor)¶
Delete Video Tag (Editor)¶
Delete Thumbnail Tag (Editor)¶
Create Tag Group (Editor)¶
Request Body:
Rename Tag Group (Editor)¶
Request Body:
Delete Tag Group (Editor)¶
Add Tag to Group (Editor)¶
Remove Tag from Group (Editor)¶
Get Video Tag Usage¶
Get count of videos using this tag.
Get Thumbnail Tag Usage¶
Get Actor Tag Usage¶
Rename Genre (Editor)¶
Request Body:
Bins (Collections)¶
Get All Bins¶
Get Child Bins¶
Get bins nested within a bin.
Get Videos in Bin¶
Get Bin Query¶
Get the smart bin query (for dynamic bins).
Create Bin (Editor)¶
Request Body:
Update Bin (Editor)¶
Request Body:
Delete Bin (Editor)¶
Set Bin Query (Editor)¶
Set a VideoQuery to make this a smart/dynamic bin.
Add Video to Bin (Editor)¶
Request Body:
Remove Video from Bin (Editor)¶
Thumbnails (Scenes)¶
Search Thumbnails¶
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
keywords |
string | Comma-separated keyword filter |
search |
string | Text search query |
videoId |
long | Filter by video ID |
limit |
int | Max results |
Get Thumbnail¶
Get thumbnail entry metadata.
Get Thumbnail Image¶
Returns scene image as JPEG binary data.
Get Thumbnail Tags¶
Get Thumbnail Extended Properties¶
Add Thumbnail (Editor)¶
Request Body:
Delete Thumbnail (Editor)¶
Tag Thumbnail (Editor)¶
Request Body:
Remove Thumbnail Tag (Editor)¶
Set Thumbnail Extended Property (Editor)¶
Request Body:
Get Thumbnail Classifications¶
Get AI scene classifications for a thumbnail.
Save Thumbnail Classification (Editor)¶
Request Body:
Delete Thumbnail Classifications (Editor)¶
Clips¶
Create Clip (Editor)¶
Request Body:
Get Clip¶
Delete Clip (Editor)¶
Playlists¶
Get All Playlists¶
Create Playlist (Editor)¶
Request Body:
Delete Playlist (Editor)¶
Get Playlist Clip IDs¶
Get Playlist Clip at Index¶
Add Clip to Playlist (Editor)¶
Request Body:
Remove Clip from Playlist (Editor)¶
Subtitles¶
Get Video Subtitles¶
Get all subtitles for a video.
Create Subtitle (Editor)¶
Request Body:
Delete All Video Subtitles (Editor)¶
Get Subtitle¶
Delete Subtitle (Editor)¶
Search Subtitles¶
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
search |
string | Text to search for |
offset |
int | Pagination offset |
limit |
int | Max results |
Archives¶
Get All Archives¶
Get Archive¶
Create Archive (Editor)¶
Request Body:
Update Archive (Editor)¶
Delete Archive (Editor)¶
Scene Classifications¶
Get Distinct Labels¶
Get all unique scene classification labels in the catalog.
Search by Label¶
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
label |
string | Classification label to search |
minConfidence |
double | Minimum confidence score (0-1) |
offset |
int | Pagination offset |
limit |
int | Max results |
Get Video Classifications¶
Get all scene classifications for thumbnails in a video.
Properties (Metadata)¶
Get Property Metadata¶
Get metadata definitions for a custom property.
Set Property Metadata (Editor)¶
Request Body:
Delete Property Metadata (Editor)¶
Request Body:
Statistics¶
Get Combined Stats¶
Get combined catalog statistics.
Response:
{
"success": true,
"data": {
"videoCount": 1500,
"actorCount": 250,
"imageCount": 5000,
"thumbnailCount": 0
}
}
Get Video Count¶
Get Actor Count¶
Get Image Count¶
Get Thumbnail Count¶
Uploads¶
Upload Video (Editor)¶
Upload a video file using multipart/form-data.
Request:
- Content-Type: multipart/form-data
- Field: file - The video file
Response:
Complete Video Upload (Editor)¶
Finalize upload and add video to catalog.
Request Body:
Cancel Upload (Editor)¶
Cancel upload and delete temporary files.
Upload Image (Editor)¶
Upload an image file, optionally as a companion image for a video.
Form Fields:
- file - The image file
- videoId (optional) - Associate as companion image
Response Format¶
All API responses use a consistent wrapper format:
Success Response¶
Error Response¶
Simple Result Response¶
For operations that don't return data:
HTTP Status Codes¶
| Code | Description |
|---|---|
| 200 | Success |
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Authentication required |
| 403 | Forbidden - Insufficient permissions (requires Editor/Admin) |
| 404 | Not Found - Resource not found |
| 500 | Server Error - Internal error |
| 503 | Service Unavailable - Catalog not available |
CORS¶
The API supports Cross-Origin Resource Sharing (CORS) to allow web clients from any origin.
Rate Limiting¶
Currently, no rate limiting is enforced. Clients should implement reasonable request throttling to avoid overloading the server.
Version History¶
| Version | Date | Changes |
|---|---|---|
| 2.0 | 2024 | Full API implementation with 80+ endpoints covering all catalog functionality |
| 1.0 | 2023 | Initial REST API with basic read operations |