---
title: Get video-info job status | Vid Kraken API
description: Poll the status of a previously-submitted video-info job.
url: https://vidkraken.com/docs/endpoint/get-video-info-status
updated: '2026-10-24'
---

# Get video-info job status

For AI agents: docs index at https://vidkraken.com/docs/llms.txt; any page as Markdown by adding .md to its URL.

`GET https://vidkraken.com/api/v2/info/{jobId}`

Poll the status of a previously-submitted video-info job.

- `pending` — still fetching metadata

- `success` — `result` contains the resolved `VideoInfo`

- `failed` — `error` carries a human-readable message and, for recognised
  video conditions, `errorCode` identifies it (see `DownloadErrorCode`)

Job state expires from Redis 1 hour after submission; polling
after that returns `404`.

**Cost:** Free — polling is never charged.

```bash
curl -X GET "https://vidkraken.com/api/v2/info/6f9c1234-5e8a-4b2f-9c1e-0a7b69cfc45e" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Authorization

Bearer token. API key issued from the dashboard, sent as `Authorization: Bearer YOUR_API_KEY`. Get a key at https://vidkraken.com/login.

## Parameters

- `jobId` (path, string, required)

  The `jobId` returned from `POST /info`.

  Example: `6f9c1234-5e8a-4b2f-9c1e-0a7b69cfc45e`.

## Responses

### 200

Current job status.

One of:

- `VideoInfoJobPending`
- `VideoInfoJobSuccess`
- `VideoInfoJobFailed`

Still fetching:

```json
{
  "jobId": "6f9c1234-5e8a-4b2f-9c1e-0a7b69cfc45e",
  "status": "pending"
}
```

Metadata resolved:

```json
{
  "jobId": "6f9c1234-5e8a-4b2f-9c1e-0a7b69cfc45e",
  "status": "success",
  "result": {
    "title": "Rick Astley - Never Gonna Give You Up",
    "duration": 213,
    "url": "https://youtu.be/dQw4w9WgXcQ"
  }
}
```

Metadata resolved (submitted with `includeAudioTracks: true`):

```json
{
  "jobId": "6f9c1234-5e8a-4b2f-9c1e-0a7b69cfc45e",
  "status": "success",
  "result": {
    "title": "Rick Astley - Never Gonna Give You Up",
    "duration": 213,
    "url": "https://youtu.be/dQw4w9WgXcQ",
    "audio": [
      {
        "type": "original",
        "language": "en"
      },
      {
        "type": "dubbed",
        "language": "es"
      }
    ]
  }
}
```

Resolution failed:

```json
{
  "jobId": "6f9c1234-5e8a-4b2f-9c1e-0a7b69cfc45e",
  "status": "failed",
  "error": "Video unavailable"
}
```

### 401

Missing or invalid API key.

Body: `ApiError`.

missing:

```json
{
  "error": "Missing API key. Provide it as 'Bearer YOUR_API_KEY'",
  "code": "UNAUTHORIZED"
}
```

invalid:

```json
{
  "error": "Invalid API key",
  "code": "UNAUTHORIZED"
}
```

### 404

Job not found, expired, or belongs to another user.

Body: `ApiError`.

```json
{
  "error": "Download job not found",
  "code": "NOT_FOUND"
}
```

### 500

Unexpected server error.

Body: `ApiError`.

```json
{
  "error": "Failed to enqueue download job",
  "code": "INTERNAL_ERROR"
}
```

## Schemas

### `VideoInfoJobPending`

- `jobId` (string, required)

- `status` (string, required)

  One of: `pending`.

### `VideoInfoJobSuccess`

- `jobId` (string, required)

- `status` (string, required)

  One of: `success`.

- `result` (`VideoInfo`, required)

### `VideoInfoJobFailed`

- `jobId` (string, required)

- `status` (string, required)

  One of: `failed`.

- `error` (string, required)

  Human-readable failure reason.

- `errorCode` (`DownloadErrorCode`)

### `ApiError`

- `error` (string, required)

  Human-readable error message.

- `code` (string, required)

  Machine-readable error code; branch on this rather than on
  `error`. New codes may be added, so treat an unknown one by
  its HTTP status. See the table under Errors in the API
  description for what each one means.

  One of: `INVALID_REQUEST`, `UNAUTHORIZED`, `LIMIT_REACHED`, `NOT_FOUND`, `VIDEO_NOT_FOUND`, `IDEMPOTENCY_CONFLICT`, `IDEMPOTENCY_KEY_REUSED`, `TOO_MANY_PENDING`, `INTERNAL_ERROR`, `UNAVAILABLE`.

- `details` (string)

  Optional extra context — e.g. yt-dlp's error message on `500`s.

### `VideoInfo`

- `title` (string, required)

- `duration` (integer, required)

  Video duration in seconds.

- `url` (string, required)

- `audio` (array of `AudioTrack`)

  Available audio tracks — only present when the job was submitted with `includeAudioTracks: true`. The first entry with `type: original` is the original soundtrack; `dubbed` entries are language-overdubbed alternatives.

- `regionRestriction` (object)

  Where YouTube lets the video play, as ISO 3166-1 alpha-2 country codes. Absent when the video plays everywhere. `allowed` means only those countries; `blocked` means everywhere except those. A video limited to countries we cannot download from fails with `GEO_RESTRICTED`, so check this before submitting a download.

  - `allowed` (array of string)

  - `blocked` (array of string)

### `DownloadErrorCode`

Machine-readable failure reason. Except for `NETWORK_ERROR`, every
value below describes the video or our policy, not a fault on our
side — retrying will return the same result, so treat them as final.

Other values may appear for transient infra failures — retry after a
short backoff before treating them as fatal.

- `AGE_RESTRICTED` — sign-in required by YouTube for this video
- `MEMBERS_ONLY` — restricted to channel members
- `PAYMENT_REQUIRED` — purchase or rental required
- `PRIVATE_VIDEO` — the video is private
- `VIDEO_PREMIERE` — a scheduled premiere that has not aired yet; retry after the premiere starts
- `GEO_RESTRICTED` — not available in the server region
- `VIDEO_PROCESSING` — YouTube is still processing the video, usually a fresh upload or a live stream that ended recently; retry later
- `VIDEO_UNAVAILABLE` — unavailable for an unspecified reason
- `DRM_PROTECTED` — DRM protected
- `VIDEO_NOT_FOUND` — no such video, or it has been deleted
- `FORMAT_UNAVAILABLE` — the requested format/quality is not offered
- `LIVE_STREAM_IN_PROGRESS` — still live; retry once it has ended
- `COPYRIGHTED_MUSIC` — copyrighted music, not downloadable here
- `NO_DOWNLOAD_OPT_OUT` — the creator opted out via `#nodownload`
- `FILE_TOO_LARGE` — the file in this format is larger than we can deliver; try a lower-quality format or a shorter clip
- `NETWORK_ERROR` — transient network failure on our side; retry after a short backoff

Type: string.

One of: `AGE_RESTRICTED`, `MEMBERS_ONLY`, `PAYMENT_REQUIRED`, `PRIVATE_VIDEO`, `VIDEO_PREMIERE`, `GEO_RESTRICTED`, `VIDEO_PROCESSING`, `VIDEO_UNAVAILABLE`, `DRM_PROTECTED`, `VIDEO_NOT_FOUND`, `FORMAT_UNAVAILABLE`, `LIVE_STREAM_IN_PROGRESS`, `COPYRIGHTED_MUSIC`, `NO_DOWNLOAD_OPT_OUT`, `FILE_TOO_LARGE`, `NETWORK_ERROR`.

### `AudioTrack`

- `type` (string, required)

  One of: `original`, `dubbed`.

- `language` (string or null, required)

  ISO language code, or `null` if unknown.

Full API reference, including the download.finished webhook: https://vidkraken.com/docs.md · OpenAPI: https://vidkraken.com/openapi.json
