GET /ext/bouquets
/ext/bouquets returns every bouquet the calling key can attach to a line. A bouquet is a named grouping of live channels and VOD items that the panel administrator (or a reseller with the right permissions) curates. Bouquets are the granularity at which line entitlements are assigned: when you create or update a line, you send a bouquets array of numeric ids, and this endpoint is where you look those ids up.
The response is the OneStream shape: a plain JSON array of bouquet objects. There is no envelope. The list is scoped by caller type in the same way as packages: an admin key sees every bouquet on the panel, and a reseller key sees only the bouquets its member group has been granted access to. An empty result set is returned as [], not as an error.
Endpoint
GET https://<your-panel-domain>/panel-api/onestream/ext/bouquets
Authentication
Send the API key in X-Api-Key, X-Auth-User, or Authorization: Bearer. See the OneStream overview.
Required scope
bouquets:read.
Query parameters
None. The full list of visible bouquets is returned in one call. There is typically a small enough number of bouquets per panel that pagination is not applied.
Response
A plain JSON array. Each element has the following fields.
| Field | Type | Description |
|---|---|---|
id |
int | Numeric bouquet id. Stable across the panel's lifetime. Pass this in the bouquets array when creating a line. |
name |
string | Human-readable bouquet name shown in the panel UI. |
order |
int | Display order the panel uses when rendering this bouquet next to others. 0 means "unordered" and lists rendered alphabetically. |
Example response:
[
{"id": 1, "name": "World Restream", "order": 0},
{"id": 5, "name": "Sports", "order": 0},
{"id": 6, "name": "Movies", "order": 0},
{"id": 118, "name": "Europe Movies", "order": 0}
]
Examples
cURL
curl -H "X-Api-Key: <your-api-key>" \
https://<your-panel-domain>/panel-api/onestream/ext/bouquets
PHP raw
$ch = curl_init('https://<your-panel-domain>/panel-api/onestream/ext/bouquets');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Api-Key: <your-api-key>']);
$bouquets = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach ($bouquets as $b) {
echo $b['id'] . ' ' . $b['name'] . "\n";
}
Python raw
import requests
bouquets = requests.get(
"https://<your-panel-domain>/panel-api/onestream/ext/bouquets",
headers={"X-Api-Key": "<your-api-key>"},
timeout=30,
).json()
for b in bouquets:
print(b["id"], b["name"])
Errors
| HTTP | Error slug | When it happens | How to fix |
|---|---|---|---|
| 401 | invalid_key |
Header is missing, the token is unknown, the key was disabled, expired, deleted, or the caller IP is not on the key's IP allow-list. | Check the header. If the key was rotated, mint a new one from the panel. |
| 403 | insufficient_scope |
The key does not carry bouquets:read. |
Regenerate the key with bouquets:read, or use a key that has it. |
| 429 | rate_limited |
The per-key or per-IP rate limit was hit. Response carries Retry-After and X-RateLimit-* headers. |
Back off for the number of seconds in Retry-After. |
| 403 | api_disabled |
An admin has turned the Panel API off for this panel. | Ask the admin to re-enable it. |