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
- action=get_movies. List endpoint with pagination.
- action=get_stream. Same shape for a single live stream.
- Panel API Catalog. Native v1 detail endpoint.