- Added 11 GET INFO endpoints to OpenAPI spec - Created detailed documentation with code examples - Includes Python, PHP, and JavaScript examples - Added best practices and common use cases
17 KiB
GET INFO / Query Actions
Complete documentation for all data retrieval endpoints in the XUI.ONE Admin API.
📋 Overview
GET INFO endpoints allow you to retrieve information about your XUI.ONE panel resources without making modifications. These are read-only operations that return data in JSON format.
Available Endpoints
| Endpoint | Description | Returns |
|---|---|---|
get_lines |
Get all subscription lines | Array of line objects |
get_users |
Get all user accounts | Array of user objects |
get_streams |
Get all live streams | Array of stream objects |
get_channels |
Get all channels | Array of channel objects |
get_movies |
Get all VOD movies | Array of movie objects |
get_series_list |
Get all TV series | Array of series objects |
get_episodes |
Get all episodes | Array of episode objects |
get_mags |
Get all MAG devices | Array of MAG objects |
get_enigmas |
Get all Enigma2 devices | Array of Enigma2 objects |
get_stations |
Get all radio stations | Array of station objects |
get_packages |
Get all subscription packages | Array of package objects |
🔍 Common Usage Patterns
Basic Query
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=ACTION_NAME"
With Pagination (where supported)
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=ACTION_NAME&limit=100&offset=0"
With Filtering (where supported)
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_episodes&series_id=123"
📝 Detailed Endpoint Documentation
1. Get All Subscription Lines
Action: get_lines
Description: Retrieves all subscription lines (M3U/Xtream Codes accounts) in your panel.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_lines"
Response Example:
{
"status": "STATUS_SUCCESS",
"data": [
{
"id": "123",
"username": "testuser",
"password": "testpass123",
"exp_date": "1735689600",
"max_connections": "1",
"is_trial": "0",
"enabled": "1",
"is_restreamer": "0",
"bouquet": "[1,2,3]",
"notes": "Premium customer",
"created_at": "1609459200"
}
]
}
Use Cases:
- Monitor active subscriptions
- Check expiration dates
- Export customer list
- View connection limits
- Audit trial accounts
2. Get All Users
Action: get_users
Description: Retrieves all user accounts (admins, resellers, users) in your panel.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_users"
Response Example:
{
"status": "STATUS_SUCCESS",
"data": [
{
"id": "1",
"username": "admin",
"member_group_id": "1",
"email": "admin@example.com",
"date_registered": "1609459200",
"status": "1"
}
]
}
Use Cases:
- List all panel users
- Audit user permissions
- View reseller accounts
- Export user data
3. Get All Live Streams
Action: get_streams
Description: Retrieves all live TV streams configured in your panel.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_streams"
Response Example:
{
"status": "STATUS_SUCCESS",
"data": [
{
"id": "456",
"stream_display_name": "CNN HD",
"stream_source": "http://source.example.com/stream.m3u8",
"category_id": "1",
"stream_icon": "http://example.com/icon.png",
"enabled": "1"
}
]
}
Use Cases:
- List all streams
- Check stream status
- Monitor stream sources
- Export stream configurations
- View stream categories
4. Get All Channels
Action: get_channels
Description: Retrieves all channel configurations.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_channels"
Use Cases:
- List channel catalog
- View EPG mappings
- Export channel list
- Check channel categories
5. Get All Movies
Action: get_movies
Description: Retrieves all VOD movies in your panel.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_movies"
Response Example:
{
"status": "STATUS_SUCCESS",
"data": [
{
"id": "789",
"name": "The Matrix",
"stream_type": "movie",
"added": "1609459200",
"category_id": "5",
"cover": "http://example.com/poster.jpg",
"plot": "A computer hacker learns..."
}
]
}
Use Cases:
- List movie catalog
- View movie metadata
- Monitor storage usage
- Export movie list
- Check categories
6. Get All Series
Action: get_series_list
Description: Retrieves all TV series in your panel.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_series_list"
Response Example:
{
"status": "STATUS_SUCCESS",
"data": [
{
"id": "101",
"name": "Breaking Bad",
"category_id": "3",
"cover": "http://example.com/cover.jpg",
"plot": "A high school chemistry teacher...",
"num_seasons": "5"
}
]
}
Use Cases:
- List series catalog
- View series metadata
- Check episode counts
- Export series list
7. Get All Episodes
Action: get_episodes
Description: Retrieves all episodes. Can be filtered by series.
Request (All Episodes):
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_episodes"
Request (Specific Series):
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_episodes&series_id=101"
Parameters:
series_id(optional) - Filter by series ID
Use Cases:
- List all episodes
- View episode metadata
- Filter by series
- Check availability
8. Get All MAG Devices
Action: get_mags
Description: Retrieves all MAG set-top box subscriptions.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_mags"
Response Example:
{
"status": "STATUS_SUCCESS",
"data": [
{
"id": "202",
"mac": "00:1A:79:XX:XX:XX",
"exp_date": "1735689600",
"enabled": "1",
"bouquet": "[1,2,3]"
}
]
}
Use Cases:
- List MAG devices
- View MAC addresses
- Check expiration dates
- Monitor device status
9. Get All Enigma2 Devices
Action: get_enigmas
Description: Retrieves all Enigma2 STB subscriptions.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_enigmas"
Use Cases:
- List Enigma2 devices
- View device status
- Check expiration dates
- Monitor connections
10. Get All Radio Stations
Action: get_stations
Description: Retrieves all radio streaming channels.
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_stations"
Use Cases:
- List radio stations
- View station metadata
- Check stream sources
- Export station list
11. Get All Packages
Action: get_packages
Description: Retrieves all subscription packages (bouquets).
Request:
curl "http://your-server.com/cSbuFLhp/?api_key=8D3135D30437F86EAE2FA4A2A8345000&action=get_packages"
Response Example:
{
"status": "STATUS_SUCCESS",
"data": [
{
"id": "1",
"package_name": "Premium Package",
"streams": "[1,2,3,4,5]",
"bouquet_channels": "100"
}
]
}
Use Cases:
- List all packages
- View package configurations
- Check channel assignments
- Export package data
💻 Code Examples
Python
import requests
# Configuration
BASE_URL = "http://your-server.com/cSbuFLhp/"
API_KEY = "8D3135D30437F86EAE2FA4A2A8345000"
def get_lines():
"""Get all subscription lines"""
response = requests.get(
BASE_URL,
params={
"api_key": API_KEY,
"action": "get_lines"
}
)
data = response.json()
if data["status"] == "STATUS_SUCCESS":
return data["data"]
else:
raise Exception(f"API Error: {data.get('error', 'Unknown error')}")
# Usage
try:
lines = get_lines()
print(f"Found {len(lines)} subscription lines")
for line in lines:
print(f"- {line['username']} (ID: {line['id']})")
except Exception as e:
print(f"Error: {e}")
PHP
<?php
// Configuration
$baseUrl = "http://your-server.com/cSbuFLhp/";
$apiKey = "8D3135D30437F86EAE2FA4A2A8345000";
function getLines($baseUrl, $apiKey) {
$url = $baseUrl . "?api_key=" . $apiKey . "&action=get_lines";
$response = file_get_contents($url);
$data = json_decode($response, true);
if ($data['status'] === 'STATUS_SUCCESS') {
return $data['data'];
} else {
throw new Exception("API Error: " . ($data['error'] ?? 'Unknown error'));
}
}
// Usage
try {
$lines = getLines($baseUrl, $apiKey);
echo "Found " . count($lines) . " subscription lines\n";
foreach ($lines as $line) {
echo "- {$line['username']} (ID: {$line['id']})\n";
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . "\n";
}
?>
JavaScript (Node.js)
const fetch = require('node-fetch');
// Configuration
const BASE_URL = 'http://your-server.com/cSbuFLhp/';
const API_KEY = '8D3135D30437F86EAE2FA4A2A8345000';
async function getLines() {
const url = `${BASE_URL}?api_key=${API_KEY}&action=get_lines`;
const response = await fetch(url);
const data = await response.json();
if (data.status === 'STATUS_SUCCESS') {
return data.data;
} else {
throw new Error(`API Error: ${data.error || 'Unknown error'}`);
}
}
// Usage
(async () => {
try {
const lines = await getLines();
console.log(`Found ${lines.length} subscription lines`);
lines.forEach(line => {
console.log(`- ${line.username} (ID: ${line.id})`);
});
} catch (error) {
console.error('Error:', error.message);
}
})();
JavaScript (Browser/React)
// React Hook Example
import { useState, useEffect } from 'react';
const API_CONFIG = {
baseUrl: 'http://your-server.com/cSbuFLhp/',
apiKey: '8D3135D30437F86EAE2FA4A2A8345000'
};
function useLines() {
const [lines, setLines] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchLines() {
try {
const url = `${API_CONFIG.baseUrl}?api_key=${API_CONFIG.apiKey}&action=get_lines`;
const response = await fetch(url);
const data = await response.json();
if (data.status === 'STATUS_SUCCESS') {
setLines(data.data);
} else {
setError(data.error || 'Unknown error');
}
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
}
fetchLines();
}, []);
return { lines, loading, error };
}
// Component usage
function LinesList() {
const { lines, loading, error } = useLines();
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;
return (
<div>
<h2>Subscription Lines ({lines.length})</h2>
<ul>
{lines.map(line => (
<li key={line.id}>
{line.username} - Expires: {new Date(line.exp_date * 1000).toLocaleDateString()}
</li>
))}
</ul>
</div>
);
}
🔍 Response Structure
Success Response
{
"status": "STATUS_SUCCESS",
"data": [
// Array of objects
]
}
Error Response
{
"status": "STATUS_FAILURE",
"error": "Error message"
}
💡 Best Practices
1. Handle Large Datasets
For endpoints that may return large amounts of data:
# Process data in chunks
def process_lines_in_batches(lines, batch_size=100):
for i in range(0, len(lines), batch_size):
batch = lines[i:i + batch_size]
# Process batch
yield batch
2. Cache Results
Cache frequently accessed data to reduce API calls:
from functools import lru_cache
from datetime import datetime, timedelta
@lru_cache(maxsize=128)
def get_cached_lines(cache_key):
return get_lines()
# Use with time-based cache key
cache_key = datetime.now().replace(minute=0, second=0, microsecond=0)
lines = get_cached_lines(cache_key)
3. Error Handling
Always handle errors gracefully:
def safe_api_call(action):
try:
response = requests.get(
BASE_URL,
params={"api_key": API_KEY, "action": action},
timeout=10
)
response.raise_for_status()
data = response.json()
if data["status"] != "STATUS_SUCCESS":
logger.error(f"API returned error: {data.get('error')}")
return None
return data["data"]
except requests.exceptions.Timeout:
logger.error("API request timed out")
return None
except requests.exceptions.RequestException as e:
logger.error(f"API request failed: {e}")
return None
except ValueError as e:
logger.error(f"Invalid JSON response: {e}")
return None
4. Rate Limiting
Implement rate limiting to avoid overloading the server:
import time
from functools import wraps
def rate_limit(calls_per_minute=60):
min_interval = 60.0 / calls_per_minute
last_called = [0.0]
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
elapsed = time.time() - last_called[0]
left_to_wait = min_interval - elapsed
if left_to_wait > 0:
time.sleep(left_to_wait)
result = func(*args, **kwargs)
last_called[0] = time.time()
return result
return wrapper
return decorator
@rate_limit(calls_per_minute=30)
def api_call(action):
return requests.get(BASE_URL, params={"api_key": API_KEY, "action": action})
🎯 Common Use Cases
Export All Data
def export_all_data():
"""Export all panel data to JSON files"""
endpoints = [
'get_lines',
'get_users',
'get_streams',
'get_movies',
'get_series_list'
]
for endpoint in endpoints:
try:
data = api_call(endpoint)
with open(f"{endpoint}.json", 'w') as f:
json.dump(data, f, indent=2)
print(f"✓ Exported {endpoint}")
except Exception as e:
print(f"✗ Failed to export {endpoint}: {e}")
Generate Report
def generate_subscription_report():
"""Generate subscription statistics report"""
lines = get_lines()
total = len(lines)
active = sum(1 for line in lines if line['enabled'] == '1')
trial = sum(1 for line in lines if line['is_trial'] == '1')
print(f"Subscription Report")
print(f"==================")
print(f"Total Lines: {total}")
print(f"Active: {active}")
print(f"Trial: {trial}")
print(f"Inactive: {total - active}")
Monitor Expirations
from datetime import datetime, timedelta
def check_expiring_soon(days=7):
"""Find lines expiring in the next N days"""
lines = get_lines()
threshold = datetime.now() + timedelta(days=days)
expiring = []
for line in lines:
exp_date = datetime.fromtimestamp(int(line['exp_date']))
if exp_date <= threshold:
expiring.append({
'username': line['username'],
'expires': exp_date.strftime('%Y-%m-%d'),
'days_left': (exp_date - datetime.now()).days
})
return expiring
📚 Related Documentation
🆘 Need Help?
- GitHub Issues: Report problems
- Community: World of IPTV Forums
- Documentation: Getting Started Guide