Packs API
Overlay packs and presets.
On this page
Authenticate with a personal token as Authorization: Bearer pxp_...; the operations are also MCP tools unless noted. The full machine-readable definition is in the OpenAPI specification.
| Operation | Method and path | Scope |
|---|---|---|
| List packs | GET /packs | overlays:read |
| Get pack | GET /packs/{packId} | overlays:read |
| Change pack look | PUT /packs/{packId}/theme | overlays:write |
| List marketplace | GET /marketplace | overlays:read |
Operations
List packs
/api/v1/packsLists the overlay packs you own (id, name, accent color, when you got it).
Scope: overlays:read (Read overlays) · MCP tool: list_packs · Notes: read only
curl -X GET "https://pxstudio.cloud/api/v1/packs" \
-H "Authorization: Bearer $PX_TOKEN"const res = await fetch('https://pxstudio.cloud/api/v1/packs', {
headers: {
Authorization: `Bearer ${process.env.PX_TOKEN}`,
},
});
if (!res.ok) throw new Error(`PX Studio API: ${res.status}`);
const data = await res.json();Get pack
/api/v1/packs/{packId}Returns one pack: its scenes (names only; the OBS links stay on the pack page) and its current look (identity, colors, texts, countdown, switches) to change with set_pack_theme. Values that could be secret show as "[hidden]".
Scope: overlays:read (Read overlays) · MCP tool: get_pack · Notes: read only
| Name | In | Type | Required | Description |
|---|---|---|---|---|
packId | path | string | required | Pack id (from list_packs). Up to 80 characters |
curl -X GET "https://pxstudio.cloud/api/v1/packs/<packId>" \
-H "Authorization: Bearer $PX_TOKEN"const packId = '<packId>';
const res = await fetch(`https://pxstudio.cloud/api/v1/packs/${packId}`, {
headers: {
Authorization: `Bearer ${process.env.PX_TOKEN}`,
},
});
if (!res.ok) throw new Error(`PX Studio API: ${res.status}`);
const data = await res.json();Change pack look
/api/v1/packs/{packId}/themeChanges the look of a pack (keys from get_pack theme): the values you send are deep-merged into the current look, null removes a key, lists replace the whole list. Values shown as "[hidden]" cannot be changed here. Pack scenes in OBS show the new look on their next reload.
Scope: overlays:write (Design overlays) · MCP tool: set_pack_theme
| Name | In | Type | Required | Description |
|---|---|---|---|---|
packId | path | string | required | Pack id (from list_packs). Up to 80 characters |
theme | body | object | required | Only the values to change, at the same path as in get_pack, e.g. {"look": {"accent": "#ff5c39"}} or {"identity": {"name": "YourName"}} |
curl -X PUT "https://pxstudio.cloud/api/v1/packs/<packId>/theme" \
-H "Authorization: Bearer $PX_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "theme": {} }'const packId = '<packId>';
const res = await fetch(`https://pxstudio.cloud/api/v1/packs/${packId}/theme`, {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.PX_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ theme: {} }),
});
if (!res.ok) throw new Error(`PX Studio API: ${res.status}`);
const data = await res.json();List marketplace
/api/v1/marketplaceLists the marketplace catalog: widgets (free or premium, price, whether you have them), bundles, style packs and overlay packs. Buying happens on the billing page. Descriptions are marketplace content.
Scope: overlays:read (Read overlays) · MCP tool: list_marketplace · Notes: read only
| Name | In | Type | Required | Description |
|---|---|---|---|---|
kind | query | all, widgets, bundles, stylePacks, overlayPacks | optional |
curl -X GET "https://pxstudio.cloud/api/v1/marketplace" \
-H "Authorization: Bearer $PX_TOKEN"const res = await fetch('https://pxstudio.cloud/api/v1/marketplace', {
headers: {
Authorization: `Bearer ${process.env.PX_TOKEN}`,
},
});
if (!res.ok) throw new Error(`PX Studio API: ${res.status}`);
const data = await res.json();Was this page helpful?