action=get_movie

Fetches a single VOD entry by its numeric id. Returns the exact shape of one item in the action=get_movies list. Use this when you already have a VOD id and want a fresh read without paginating the full catalog.

Both admin and reseller keys can call this endpoint. VOD entries are not filtered by reseller; any valid id is visible to any caller with vods:read.

Endpoint

GET https://<your-panel-domain>/panel-api/xc/{accesscode}/admin/index.php?action=get_movie&id=<vod-id>

Also accepted: POST with action=get_movie and id in the body, and the /reseller/index.php sub-path.

Authentication

Send the API key as ?api_key=<token>, as an api_key=<token> POST field, or as Authorization: Bearer <token>.

Required scope

vods:read. A key without the scope gets STATUS_NO_PERMISSIONS with error: "insufficient_scope".

Query parameters

Name Type Required Default Description
action string Yes Must be get_movie.
api_key string Yes (if not using Bearer) The API key.
id int Yes Numeric id of the VOD entry.

Response

data is a single VOD object (not wrapped in items).

{
  "status": "STATUS_SUCCESS",
  "data": {
    "id": 83287,
    "name": "Movie 83287",
    "icon": "",
    "year": 2019,
    "rating": 7.1,
    "is_serie": true,
    "categories": []
  }
}

Field-by-field.

Field Type Description
id int VOD id.
name string Title. For series episodes typically Show - SxxEyy - Episode title.
icon string Absolute URL of the poster or cover image, or empty string if none.
year int Release year, 0 if unknown.
rating float Rating (0-10 scale), 0 if not rated.
is_serie bool true if series episode, false if standalone movie.
categories array Zero or more category objects (id, name). May be empty.

Examples

cURL

curl "https://<your-panel-domain>/panel-api/xc/panel_api/admin/index.php?api_key=<your-api-key>&action=get_movie&id=83287"

PHP raw

$url = 'https://<your-panel-domain>/panel-api/xc/panel_api/admin/index.php'
     . '?' . http_build_query([
         'api_key' => '<your-api-key>',
         'action'  => 'get_movie',
         'id'      => 83287,
       ]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($body['status'] ?? '') !== 'STATUS_SUCCESS') {
    $slug = $body['data']['error'] ?? 'unknown';
    throw new RuntimeException("get_movie failed: {$slug}");
}
$vod = $body['data'];
echo $vod['id'], "\t", $vod['name'], "\t", $vod['is_serie'] ? 'series' : 'movie', "\n";

Python raw

import requests

r = requests.get(
    "https://<your-panel-domain>/panel-api/xc/panel_api/admin/index.php",
    params={"api_key": "<your-api-key>", "action": "get_movie", "id": 83287},
    timeout=30,
)
r.raise_for_status()
body = r.json()
if body["status"] != "STATUS_SUCCESS":
    raise RuntimeError(f"get_movie failed: {body['data'].get('error')}")
vod = body["data"]
print(vod["id"], vod["name"], "series" if vod["is_serie"] else "movie")

Errors

status error slug When it happens How to fix
STATUS_INVALID_DATA validation_error id parameter is missing or empty. Response includes data.details.field = "id". Include id=<numeric>.
STATUS_INVALID_DATA validation_error action parameter is missing. Include action=get_movie.
STATUS_NO_PERMISSIONS insufficient_scope Key does not carry vods:read. Issue a new key with the scope.
STATUS_FAILURE not_found No VOD entry exists with that id. Response message: VOD not found. Verify the id against action=get_movies.
STATUS_FAILURE invalid_key Key not sent or not recognized. Check the key value.
STATUS_FAILURE rate_limited Per-minute request budget exceeded. Slow down. See Rate limits & Idempotency.

See also