Skip to content
Docs

Organize API

Groups, folders, notes, favorites and other ways to keep overlays tidy.

View as Markdown
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.

OperationMethod and pathScope
List spotsGET /overlays/{overlayId}/spotsoverlays:read
Create spotPOST /overlays/{overlayId}/spotsoverlays:write
Update spotPATCH /overlays/{overlayId}/spots/{spotId}overlays:write
Move a layer into a spotPOST /overlays/{overlayId}/spots/{spotId}/applyoverlays:write
Delete spotDELETE /overlays/{overlayId}/spots/{spotId}overlays:write
Set saved positions of a layerPUT /overlays/{overlayId}/members/{memberId}/position-presetsoverlays:write
Move a layer to a saved positionPOST /overlays/{overlayId}/members/{memberId}/position-presets/applyoverlays:write
Create deck buttonPOST /overlays/{overlayId}/deck-macrosoverlays:write
Update deck buttonPATCH /overlays/{overlayId}/deck-macros/{macroId}overlays:write
Reorder deck buttonsPUT /overlays/{overlayId}/deck-macros/orderoverlays:write
Delete deck buttonDELETE /overlays/{overlayId}/deck-macros/{macroId}overlays:write
Get starred deck buttonsGET /overlays/{overlayId}/deck-favoritesoverlays:read
Set starred deck buttonsPUT /overlays/{overlayId}/deck-favoritesoverlays:write
List notesGET /overlays/{overlayId}/notesoverlays:read
Create notePOST /overlays/{overlayId}/notesoverlays:write
Update notePATCH /overlays/{overlayId}/notes/{noteId}overlays:write
Delete noteDELETE /overlays/{overlayId}/notes/{noteId}overlays:write
Comment on a notePOST /overlays/{overlayId}/notes/{noteId}/commentsoverlays:write
Delete note commentDELETE /overlays/{overlayId}/notes/{noteId}/comments/{commentId}overlays:write
React to a notePUT /overlays/{overlayId}/notes/{noteId}/reactionsoverlays:write
Restore look scenesPOST /overlays/{overlayId}/look-scenes/restorescenes:write
List templatesGET /templatesoverlays:read
Add a linked layerPOST /overlays/{overlayId}/members/linkedmembers:write
List OBS scene mappingsGET /overlays/{overlayId}/obs-mappingsoverlays:read
Map an OBS scenePOST /overlays/{overlayId}/obs-mappingsoverlays:write
Delete OBS scene mappingDELETE /overlays/{overlayId}/obs-mappings/{mappingId}overlays:write

Operations

List spots

GET/api/v1/overlays/{overlayId}/spots

Lists the saved spots (named places on the canvas in design pixels: x, y from the top left, w, h) of an overlay. Spots are used by apply_spot and the member-to-spot automation.

Scope: overlays:read (Read overlays) · MCP tool: list_spots · Notes: read only

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/spots" \
  -H "Authorization: Bearer $PX_TOKEN"

Create spot

POST/api/v1/overlays/{overlayId}/spots

Saves a named spot (up to 12 per overlay). Send fromMemberId to save where that layer is now (like "Save as spot" in the editor; x, y, w, h are then ignored), or x, y, w, h in design pixels from the top left. Nothing changes on air.

Scope: overlays:write (Design overlays) · MCP tool: create_spot

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
namebodystringrequiredUp to 40 characters
fromMemberIdbodyintegeroptionalSave the current box of this layer. At least 1
xbodynumberoptional-10000 to 10000
ybodynumberoptional-10000 to 10000
wbodynumberoptional1 to 10000
hbodynumberoptional1 to 10000
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/spots" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "..." }'

Update spot

PATCH/api/v1/overlays/{overlayId}/spots/{spotId}

Renames a spot or changes its box (send only what changes). Layers already in the spot do not move. Nothing changes on air.

Scope: overlays:write (Design overlays) · MCP tool: update_spot

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
spotIdpathstringrequiredSpot id (from list_spots). Up to 64 characters
namebodystringoptionalUp to 40 characters
xbodynumberoptional-10000 to 10000
ybodynumberoptional-10000 to 10000
wbodynumberoptional1 to 10000
hbodynumberoptional1 to 10000
Terminal
curl -X PATCH "https://pxstudio.cloud/api/v1/overlays/<overlayId>/spots/<spotId>" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "...", "x": 1 }'

Move a layer into a spot

POST/api/v1/overlays/{overlayId}/spots/{spotId}/apply

Fits a layer (memberId) or a whole group (groupId) into a saved spot. In the live scene the layers move on air. Locked layers do not move.

Scope: overlays:write (Design overlays) · MCP tool: apply_spot

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
spotIdpathstringrequiredSpot id (from list_spots). Up to 64 characters
memberIdbodyintegeroptionalLayer (member) id (from get_overlay or list_members). At least 1
groupIdbodystringoptionalLayer group id (from get_overlay groups). Up to 64 characters
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/spots/<spotId>/apply" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "memberId": 1, "groupId": "..." }'

Delete spot

DELETE/api/v1/overlays/{overlayId}/spots/{spotId}

DESTRUCTIVE: deletes a saved spot. Automations that move layers to it stop working. Cannot be undone.

Scope: overlays:write (Design overlays) · MCP tool: delete_spot · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
spotIdpathstringrequiredSpot id (from list_spots). Up to 64 characters
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/spots/<spotId>" \
  -H "Authorization: Bearer $PX_TOKEN"

Set saved positions of a layer

PUT/api/v1/overlays/{overlayId}/members/{memberId}/position-presets

Replaces the saved positions of one layer (up to 8, unique names up to 24 characters, layout in design pixels like update_member). Send the full list: read the current list first (get_overlay members[].positionPresets) to add one. Nothing changes on air.

Scope: overlays:write (Design overlays) · MCP tool: set_position_presets

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredLayer (member) id (from get_overlay or list_members). At least 1
presetsbodyarray of objectrequiredUp to 8 items
Terminal
curl -X PUT "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/position-presets" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "presets": [] }'

Move a layer to a saved position

POST/api/v1/overlays/{overlayId}/members/{memberId}/position-presets/apply

Moves a layer to one of its saved positions (by name). In the live scene the layer moves on air.

Scope: overlays:write (Design overlays) · MCP tool: apply_position_preset

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredLayer (member) id (from get_overlay or list_members). At least 1
namebodystringrequiredUp to 24 characters
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/position-presets/apply" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "..." }'

Create deck button

POST/api/v1/overlays/{overlayId}/deck-macros

Creates a deck button (macro) with up to 20 steps that run in order when it is pressed (scene switch, widget command, media favorite, saved position, layout, YouTube video, delay). Creating it changes nothing on air; pressing it does (fire_deck_macro).

Scope: overlays:write (Design overlays) · MCP tool: create_deck_macro

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
namebodystringrequiredUp to 40 characters
colorbodystring or nulloptionalButton color as #rrggbb (null removes it)
iconbodystring or nulloptionalIcon name from the deck icon set, e.g. "star" (null removes it)
stepsbodyarray of objectrequiredUp to 20 items
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/deck-macros" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "...", "steps": [] }'

Update deck button

PATCH/api/v1/overlays/{overlayId}/deck-macros/{macroId}

Changes a deck button: name, color, icon and/or the full list of steps (send only what changes). Nothing changes on air.

Scope: overlays:write (Design overlays) · MCP tool: update_deck_macro

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
macroIdpathintegerrequiredDeck button id (from list_deck_macros). At least 1
namebodystringoptionalUp to 40 characters
colorbodystring or nulloptionalButton color as #rrggbb (null removes it)
iconbodystring or nulloptionalIcon name from the deck icon set, e.g. "star" (null removes it)
stepsbodyarray of objectoptionalUp to 20 items
Terminal
curl -X PATCH "https://pxstudio.cloud/api/v1/overlays/<overlayId>/deck-macros/<macroId>" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "...", "color": "..." }'

Reorder deck buttons

PUT/api/v1/overlays/{overlayId}/deck-macros/order

Sets the order of the deck buttons. order must contain every deck button id of the overlay exactly once. Nothing changes on air.

Scope: overlays:write (Design overlays) · MCP tool: reorder_deck_macros

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
orderbodyarray of integerrequiredUp to 30 items
Terminal
curl -X PUT "https://pxstudio.cloud/api/v1/overlays/<overlayId>/deck-macros/order" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "order": [] }'

Delete deck button

DELETE/api/v1/overlays/{overlayId}/deck-macros/{macroId}

DESTRUCTIVE: deletes a deck button. Cannot be undone.

Scope: overlays:write (Design overlays) · MCP tool: delete_deck_macro · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
macroIdpathintegerrequiredDeck button id (from list_deck_macros). At least 1
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/deck-macros/<macroId>" \
  -H "Authorization: Bearer $PX_TOKEN"

Get starred deck buttons

GET/api/v1/overlays/{overlayId}/deck-favorites

Returns the starred deck buttons of an overlay as button ids: "scene:<sceneId>", "macro:<macroId>", "<memberId>:<action>" for a widget action, "effect:<slug>:<action>", "pixbot:<op>".

Scope: overlays:read (Read overlays) · MCP tool: get_deck_favorites · Notes: read only

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/deck-favorites" \
  -H "Authorization: Bearer $PX_TOKEN"

Set starred deck buttons

PUT/api/v1/overlays/{overlayId}/deck-favorites

Replaces the starred deck buttons of an overlay (full list, same id format as get_deck_favorites, e.g. "scene:12" or "macro:3"). Nothing changes on air.

Scope: overlays:write (Design overlays) · MCP tool: set_deck_favorites

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
buttonIdsbodyarray of stringrequiredUp to 200 items
Terminal
curl -X PUT "https://pxstudio.cloud/api/v1/overlays/<overlayId>/deck-favorites" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "buttonIds": [] }'

List notes

GET/api/v1/overlays/{overlayId}/notes

Lists the editor notes of an overlay with comments and reactions (up, down, your own).

Scope: overlays:read (Read overlays) · MCP tool: list_notes · Notes: read only

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/notes" \
  -H "Authorization: Bearer $PX_TOKEN"

Create note

POST/api/v1/overlays/{overlayId}/notes

Adds an editor note for the team (up to 500 characters), optionally pinned at x, y on the canvas and linked to a scene or layer. Never visible on air.

Scope: overlays:write (Design overlays) · MCP tool: create_note

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
textbodystringrequiredUp to 500 characters
xbodynumberoptional0 to 10000
ybodynumberoptional0 to 10000
sceneIdbodyintegeroptionalScene id (from list_scenes). At least 1
memberIdbodyintegeroptionalLayer (member) id (from get_overlay or list_members). At least 1
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/notes" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "text": "..." }'

Update note

PATCH/api/v1/overlays/{overlayId}/notes/{noteId}

Changes a note: text (author or owner), resolved (done or open again), locked (pin cannot move) or the pin position x, y. Send only what changes.

Scope: overlays:write (Design overlays) · MCP tool: update_note

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
noteIdpathintegerrequiredNote id (from list_notes). At least 1
textbodystringoptionalUp to 500 characters
resolvedbodybooleanoptional
lockedbodybooleanoptional
xbodynumberoptional0 to 10000
ybodynumberoptional0 to 10000
Terminal
curl -X PATCH "https://pxstudio.cloud/api/v1/overlays/<overlayId>/notes/<noteId>" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "text": "...", "resolved": true }'

Delete note

DELETE/api/v1/overlays/{overlayId}/notes/{noteId}

DESTRUCTIVE: deletes a note with all its comments (author or owner). Cannot be undone.

Scope: overlays:write (Design overlays) · MCP tool: delete_note · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
noteIdpathintegerrequiredNote id (from list_notes). At least 1
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/notes/<noteId>" \
  -H "Authorization: Bearer $PX_TOKEN"

Comment on a note

POST/api/v1/overlays/{overlayId}/notes/{noteId}/comments

Adds a comment (up to 1000 characters) to a note thread. Never visible on air.

Scope: overlays:write (Design overlays) · MCP tool: add_note_comment

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
noteIdpathintegerrequiredNote id (from list_notes). At least 1
textbodystringrequiredUp to 1000 characters
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/notes/<noteId>/comments" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "text": "..." }'

Delete note comment

DELETE/api/v1/overlays/{overlayId}/notes/{noteId}/comments/{commentId}

DESTRUCTIVE: deletes a comment of a note (author or owner). Cannot be undone.

Scope: overlays:write (Design overlays) · MCP tool: delete_note_comment · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
noteIdpathintegerrequiredNote id (from list_notes). At least 1
commentIdpathintegerrequiredComment id (from list_notes). At least 1
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/notes/<noteId>/comments/<commentId>" \
  -H "Authorization: Bearer $PX_TOKEN"

React to a note

PUT/api/v1/overlays/{overlayId}/notes/{noteId}/reactions

Sets your reaction to a note: 1 (thumbs up), -1 (thumbs down) or 0 (remove).

Scope: overlays:write (Design overlays) · MCP tool: react_to_note

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
noteIdpathintegerrequiredNote id (from list_notes). At least 1
valuebody1, 0, -1required
Terminal
curl -X PUT "https://pxstudio.cloud/api/v1/overlays/<overlayId>/notes/<noteId>/reactions" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "value": 1 }'

Restore look scenes

POST/api/v1/overlays/{overlayId}/look-scenes/restore

Resets which layers are visible in each scene of a look preset overlay (Starting Soon, Live, BRB, Ending) to the look default. Changes the live scene on air if its visibility differs.

Scope: scenes:write (Edit scenes) · MCP tool: restore_look_scenes

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/look-scenes/restore" \
  -H "Authorization: Bearer $PX_TOKEN"

List templates

GET/api/v1/templates

Lists the quick-start overlay templates (use the id as template in create_overlay).

Scope: overlays:read (Read overlays) · MCP tool: list_templates · Notes: read only

Terminal
curl -X GET "https://pxstudio.cloud/api/v1/templates" \
  -H "Authorization: Bearer $PX_TOKEN"

Add a linked layer

POST/api/v1/overlays/{overlayId}/members/linked

Adds an existing widget setup from another overlay of the same owner as a linked layer: both layers share the same settings and state (e.g. one chat box on two overlays). Owner only. In the live scene the new layer shows up on air.

Scope: members:write (Add and remove layers) · MCP tool: add_linked_member

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
sourceOverlayIdbodystringrequiredOverlay id (from list_overlays). Up to 64 characters
sourceMemberIdbodyintegerrequiredLayer (member) id (from get_overlay or list_members). At least 1
layoutbodyobjectoptionalPlacement in design-space pixels (canvas 1920 wide): x/y move the layer from the canvas center, scale 0.05-4, rot in degrees, opacity 0-1, optional crop (cropL/cropT/cropR/cropB in native px)
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/linked" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "sourceOverlayId": "...", "sourceMemberId": 1 }'

List OBS scene mappings

GET/api/v1/overlays/{overlayId}/obs-mappings

Lists which OBS scene switches the overlay to which scene (OBS sync), and the OBS scene name OBS reported last. Owner only.

Scope: overlays:read (Read overlays) · MCP tool: list_obs_scene_mappings · Notes: read only

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/obs-mappings" \
  -H "Authorization: Bearer $PX_TOKEN"

Map an OBS scene

POST/api/v1/overlays/{overlayId}/obs-mappings

ON AIR: from now on, when OBS switches to the OBS scene with this exact name, the overlay switches its live scene to sceneId by itself (OBS sync, up to 20 mappings). An existing mapping with the same name is replaced. Owner only.

Scope: overlays:write (Design overlays) · MCP tool: set_obs_scene_mapping · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
obsSceneNamebodystringrequiredUp to 100 characters
sceneIdbodyintegerrequiredScene id (from list_scenes). At least 1
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/obs-mappings" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "obsSceneName": "...", "sceneId": 1 }'

Delete OBS scene mapping

DELETE/api/v1/overlays/{overlayId}/obs-mappings/{mappingId}

DESTRUCTIVE: removes an OBS scene mapping; OBS switching to that scene no longer switches the overlay. Owner only. Cannot be undone.

Scope: overlays:write (Design overlays) · MCP tool: delete_obs_scene_mapping · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
mappingIdpathintegerrequiredMapping id (from list_obs_scene_mappings). At least 1
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/obs-mappings/<mappingId>" \
  -H "Authorization: Bearer $PX_TOKEN"

Was this page helpful?