Skip to content

External API

The Vidori External API allows you to programmatically import video assets into your platform. You can import videos from URLs (which will be downloaded and transcoded) or link external CDN manifests (HLS/DASH) directly.

Base URL: https://app.vidori.co/api/v1

All import requests require an API key. API keys are managed from the Vidori admin panel.

  1. Log in to your Vidori admin panel
  2. Open the user menu (top-right corner) and click API Keys
  3. Click Create API Key and give it a name
  4. Copy the key immediately — it will not be shown again

Include your API key in the X-API-Key header with every request:

X-API-Key: vid_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6

Import one or more video assets.

Headers:

HeaderRequiredDescription
X-API-KeyYesYour API key
Content-TypeYesapplication/json

Body:

{
"assets": [
{
"url": "https://example.com/video.mp4",
"title": "My Video",
"description": "A great video",
"type": "MOVIE",
"genres": ["Action", "Drama"],
"tags": ["featured"],
"production_year": 2024,
"poster_url": "https://example.com/poster.jpg",
"content_groups": ["Featured", "New Releases"]
}
]
}
FieldTypeRequiredDescription
urlstringOne of url or external_urlVideo source URL. The video will be downloaded and transcoded to HLS/DASH. Supports direct video URLs and 1000+ platforms (YouTube, Vimeo, etc.).
external_urlstringOne of url or external_urlExternal CDN manifest URL (.m3u8 for HLS or .mpd for DASH). The manifest is linked directly — no download or transcoding occurs.
typestringNoAsset type. Default: MOVIE. See Asset Types.
titlestringNoAsset title. If not provided, title may be extracted from the video metadata.
descriptionstringNoAsset description.
genresstring[]NoList of genre names (e.g. ["Action", "Drama"]).
tagsstring[]NoList of tag names (e.g. ["featured", "new"]).
production_yearintegerNoProduction year (e.g. 2024).
poster_urlstringNoURL of a poster image. All poster variants (landscape, portrait, square, etc.) will be auto-generated from this single image.
content_groupsstring[]NoList of content group names (not IDs). Groups are matched by exact name (case-insensitive). Unmatched names are returned as warnings.
ValueDescription
MOVIEStandalone video (default)
EPISODEEpisode of a series
SERIESSeries container
SEASONSeason container
CHANNELLinear channel
EVENTOne-time event
NEWSNews clip
{
"results": [
{
"asset_id": "550e8400-e29b-41d4-a716-446655440000",
"job_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"status": "accepted",
"warnings": []
}
],
"accepted": 1,
"failed": 0
}
FieldDescription
asset_idUUID of the created asset. Use this to find the asset in the admin panel.
job_idUUID of the ingest job. The job processes asynchronously (download, transcode, etc.).
status"accepted" if the asset was submitted for processing, "failed" if an error occurred.
warningsList of non-fatal warnings (e.g. unresolved content group names).
errorError message if status is "failed".
  • Maximum 50 assets per request
  • Assets are processed asynchronously — the response confirms submission, not completion
Terminal window
curl -X POST https://app.vidori.co/api/v1/import \
-H "X-API-Key: vid_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \
-H "Content-Type: application/json" \
-d '{
"assets": [
{
"url": "https://example.com/video.mp4",
"title": "Getting Started",
"description": "An introduction to our platform",
"genres": ["Tutorial"],
"poster_url": "https://example.com/thumbnail.jpg"
}
]
}'
CodeDescription
200Success. Check individual results[].status for per-asset outcomes.
401Invalid, revoked, or missing API key.
422Validation error (e.g. missing url/external_url, batch too large).
500Internal server error.
{
"detail": [
{
"loc": ["body", "assets", 0],
"msg": "Either 'url' or 'external_url' must be provided",
"type": "value_error"
}
]
}

A batch request may partially succeed. Always check each results[].status:

{
"results": [
{"asset_id": "...", "job_id": "...", "status": "accepted"},
{"status": "failed", "error": "Invalid URL format"}
],
"accepted": 1,
"failed": 1
}

After import, assets are processed asynchronously. You can check the status of an asset in the Vidori admin panel under Catalog > On Demand. Asset statuses during processing:

StatusDescription
PROCESSINGVideo is being downloaded and/or transcoded
READYVideo is ready for playback
FAILEDProcessing failed (check admin panel for details)