Recommended
API key
API key from the in-app Developers page. Keys use the vd_live_ prefix.
Authorization: Bearer vd_live_…
Base URL: https://app.videco.io
Who can use it: Pro and Business (and AppSumo LTD with API access). Free cannot generate API keys.
projectId: Query or body projectId is an optional UUID. If omitted, Videco uses the user’s current project. API keys have no email; current project still resolves from membership.
In-app OpenAPI also lives at https://app.videco.io/openapi.yaml. Prefer this page when they differ (for example around projectId).
Recommended
API key from the in-app Developers page. Keys use the vd_live_ prefix.
Authorization: Bearer vd_live_…
Alternative
Session cookie works for logged-in browser / same-origin app requests.
| Status | Body | When |
|---|---|---|
| 401 | { "error": "Unauthorized" } | Missing or invalid auth. |
| 400 | { "error": "…" } | Bad request (validation, empty folder delete, and similar). |
| 404 | { "error": "Not found" } | Missing or not accessible. Responses do not leak existence. |
| 402 | { "error": "…", "code": "storage" | "duration" | "feature" } | Upload or plan feature blocked by limits. |
| 409 | Folder name collision | Conflicting folder name in the same parent. |
Used by GET /api/videos.
{ videos, pagination: { limit, offset, total, hasMore } }Public API only. Create keys in the app on Pro or Business.
/api/videosList videos in a project library.
Response: { videos, pagination }
/api/videosCreate a video record and receive TUS upload credentials.
Body
{
"title": "Product demo",
"fileSizeBytes": 10485760,
"description": "Optional",
"folderId": null,
"projectId": null
}Response: { video, upload: { libraryId, videoId, expirationTime, signature, endpoint: "https://video.bunnycdn.com/tusupload" } }
/api/videos/{id}Get a single video by id.
/api/videos/{id}Update video metadata or player options.
Body
{
"title": "Updated title",
"visibility": "unlisted"
}/api/videos/{id}Delete a video.
Response: { "ok": true }
/api/foldersCreate a folder.
Body
{
"name": "Demos",
"parentId": null
}/api/folders/{id}Rename or move a folder.
Body
{
"name": "Launch demos"
}/api/folders/{id}Delete an empty folder.
durationSeconds / storageBytes may be numeric strings.
id, userId, projectId, folderId, bunnyVideoId, title, description, status, visibility, shareSlug, durationSeconds, storageBytes, thumbnailUrl, playerResponsive, playerAutoplay, playerPreload, playerLoop, playerMuted, createdAt, updatedAt
id, userId, projectId, parentId, name, createdAt, updatedAt
Session-only or internal routes are not documented here:
/api/projects* · /api/invites/* · /api/videos/{id}/comments* · /api/videos/{id}/captions* · /api/videos/{id}/transcribe · /api/branding* · /api/billing* · /api/api-keys* · /api/webhooks/* · /api/cron/* · /api/appsumo* · /api/support/*
Create a folder
curl -H "Authorization: Bearer vd_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Demos"}' \
https://app.videco.io/api/foldersList videos
curl -H "Authorization: Bearer vd_live_YOUR_KEY" \
"https://app.videco.io/api/videos?limit=20"Need plan limits for API access? See pricing.