Returns metadata for a single video. The video must be owned by the
account that the API key belongs to — otherwise the response is
404 Not Found (we don't distinguish "doesn't exist" from "not yours"
to avoid ID enumeration).
Endpoint
GET /v1/video/{videoId}
Authentication
| Method | Required scope |
|---|---|
| API Key | video:read |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
videoId | path | string | yes | Opaque video ID, format vid_… |
Response
200 OK
{
"success": true,
"data": {
"id": "vid_abc123def456",
"title": "Product Demo",
"description": "Q2 launch demo",
"status": "COMPLETED",
"durationSec": 120,
"targetQuality": "1080p",
"qualities": ["1080p", "720p", "480p"],
"createdAt": "2026-05-20T10:00:00Z",
"completedAt": "2026-05-20T10:03:45Z"
}
}
Field semantics are identical to List Videos.
Errors
| Status | Code | When |
|---|---|---|
| 401 | INVALID_API_KEY | Key revoked or unknown |
| 403 | INSUFFICIENT_SCOPE | Key lacks video:read |
| 404 | VIDEO_NOT_FOUND | ID doesn't exist, or isn't owned by this key |
Examples
cURL
curl -H "x-ansdev-key: ak_live_8f3a9b2c1d4e5f6a7b8c9d0e1f2a3b4c" \
https://api.ansdev.cloud/v1/video/vid_abc123def456
JavaScript
async function getVideo(videoId) {
const res = await fetch(
`https://api.ansdev.cloud/v1/video/${videoId}`,
{ headers: { 'x-ansdev-key': process.env.ANSDEV_API_KEY } },
);
if (res.status === 404) return null;
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { data } = await res.json();
return data;
}