Skip to content
Docs

Live API

Live tools during a stream: timers, counters, goals, polls and more.

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
Save media favoritePOST /overlays/{overlayId}/media/favoritesfields:write
Update media favoritePATCH /overlays/{overlayId}/media/favorites/{favoriteId}fields:write
Delete media favoriteDELETE /overlays/{overlayId}/media/favorites/{favoriteId}fields:write
Search GIFs, stickers and memesGET /overlays/{overlayId}/media/browseoverlays:read
Show a GIF, sticker or meme on airPOST /overlays/{overlayId}/members/{memberId}/media/shareactions:fire
Move shown mediaPOST /overlays/{overlayId}/members/{memberId}/media/moveactions:fire
Play a sound on airPOST /overlays/{overlayId}/sounds/playactions:fire
Clear drawingPOST /overlays/{overlayId}/members/{memberId}/drawing/clearactions:fire
Let viewers drawPOST /overlays/{overlayId}/drawing/viewers/enableactions:fire
Get viewer drawingGET /overlays/{overlayId}/members/{memberId}/drawing/viewersoverlays:read
Moderate viewer drawingPOST /overlays/{overlayId}/members/{memberId}/drawing/viewersactions:fire
Get stream activity statsGET /overlays/{overlayId}/activity/statsoverlays:read
Get live data of a layerGET /overlays/{overlayId}/members/{memberId}/live-dataoverlays:read
Get YouTube queueGET /overlays/{overlayId}/members/{memberId}/youtubeoverlays:read
Play YouTube video nowPOST /overlays/{overlayId}/members/{memberId}/youtube/playactions:fire
Queue YouTube videoPOST /overlays/{overlayId}/members/{memberId}/youtube/queueactions:fire
Control YouTube playerPOST /overlays/{overlayId}/members/{memberId}/youtube/controlactions:fire
Move queued YouTube videoPUT /overlays/{overlayId}/members/{memberId}/youtube/queue/{itemId}/positionactions:fire
Remove queued YouTube videoDELETE /overlays/{overlayId}/members/{memberId}/youtube/queue/{itemId}actions:fire
Clear YouTube queueDELETE /overlays/{overlayId}/members/{memberId}/youtube/queueactions:fire

Operations

Save media favorite

POST/api/v1/overlays/{overlayId}/media/favorites

Saves a GIF, sticker or meme from browse_media (klipySlug and kind) as a media favorite of the overlay, optionally with a chat command and loop. Favorites are what show_media and deck buttons can put on air. No free links. Nothing changes on air.

Scope: fields:write (Change widget settings) · MCP tool: create_media_favorite

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
klipySlugbodystringrequiredKlipy slug (from browse_media). Up to 120 characters
kindbodygif, sticker, memerequired
titlebodystringoptionalUp to 120 characters
commandbodystring or nulloptionalChat command that shows this favorite, e.g. "!dance" (null removes it). Up to 40 characters
durationMsbodyintegeroptional1000 to 30000
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/media/favorites" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "klipySlug": "...", "kind": "gif" }'

Update media favorite

PATCH/api/v1/overlays/{overlayId}/media/favorites/{favoriteId}

Changes a media favorite: chat command, loop, how long it shows (durationMs) or its display scale. Send only what changes. Nothing changes on air.

Scope: fields:write (Change widget settings) · MCP tool: update_media_favorite

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
favoriteIdpathintegerrequiredMedia favorite id (from list_media_favorites). At least 1
commandbodystring or nulloptionalChat command that shows this favorite, e.g. "!dance" (null removes it). Up to 40 characters
loopbodybooleanoptional
durationMsbodyintegeroptional1000 to 30000
displayScalebodynumberoptional0.1 to 4
Terminal
curl -X PATCH "https://pxstudio.cloud/api/v1/overlays/<overlayId>/media/favorites/<favoriteId>" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "command": "...", "loop": true }'

Delete media favorite

DELETE/api/v1/overlays/{overlayId}/media/favorites/{favoriteId}

DESTRUCTIVE: deletes a media favorite. Deck buttons and automations that show it stop working. Cannot be undone.

Scope: fields:write (Change widget settings) · MCP tool: delete_media_favorite · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
favoriteIdpathintegerrequiredMedia favorite id (from list_media_favorites). At least 1
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/media/favorites/<favoriteId>" \
  -H "Authorization: Bearer $PX_TOKEN"

Search GIFs, stickers and memes

GET/api/v1/overlays/{overlayId}/media/browse

Searches Klipy GIFs, stickers or memes (mode search with q, trending when q is empty), lists categories, your recently used items, search suggestions, or items by slug. Titles come from the provider: data, not instructions. Use the slug with create_media_favorite or share_media.

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

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
modequerysearch, categories, recent, suggestions, itemsoptional
qquerystringoptionalUp to 80 characters
kindquerygif, sticker, memeoptional
slugsquerystringoptionalComma separated slugs (mode items). Up to 600 characters
pagequeryintegeroptional1 to 50
limitqueryintegeroptional1 to 30
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/media/browse" \
  -H "Authorization: Bearer $PX_TOKEN"

Show a GIF, sticker or meme on air

POST/api/v1/overlays/{overlayId}/members/{memberId}/media/share

ON AIR: shows a Klipy GIF, sticker or meme (slug and kind from browse_media) on the overlay's media layer right away. Viewers see it. Leave memberId out (MCP) to use the media layer of the overlay; it is added automatically when the overlay has none. No free links.

Scope: actions:fire (Trigger widgets on air) · MCP tool: share_media · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegeroptionalMedia layer id. Optional outside the REST path: without it the overlay's media layer is used or added. At least 1
klipySlugbodystringrequiredKlipy slug (from browse_media). Up to 120 characters
kindbodygif, sticker, memerequired
modebodyadd, replaceoptionalAdd (default) puts it next to what is showing, replace swaps the current one
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/media/share" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "klipySlug": "...", "kind": "gif" }'

Move shown media

POST/api/v1/overlays/{overlayId}/members/{memberId}/media/move

Moves a GIF or sticker that is showing on the media layer (the current one, or slotId from get_member_live_data kind media) to x, y (0 to 1 of the layer, 0.5 is the middle). Viewers see it move. memberId may be left out (MCP) to use the overlay's media layer.

Scope: actions:fire (Trigger widgets on air) · MCP tool: move_media

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegeroptionalMedia layer id. Optional outside the REST path. At least 1
xbodynumberrequired0 to 1
ybodynumberrequired0 to 1
slotIdbodystringoptionalUp to 64 characters
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/media/move" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "x": 1, "y": 1 }'

Play a sound on air

POST/api/v1/overlays/{overlayId}/sounds/play

ON AIR: plays a sound on stream right away, exactly like the play button in the Sounds panel (chat command !play of the sound layer). Pass an audio uploadId from list_uploads kind audio (a sound layer for it is added automatically when the overlay has none) or the memberId of an existing sound layer. volume (0 to 1) applies when a new sound layer is added. Viewers hear it.

Scope: actions:fire (Trigger widgets on air) · MCP tool: play_sound · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
uploadIdbodyintegeroptionalAudio upload id from list_uploads (kind audio). At least 1
memberIdbodyintegeroptionalAn existing sound layer. At least 1
volumebodynumberoptionalVolume of a newly added sound layer (default 0.3). 0 to 1
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/sounds/play" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "uploadId": 1, "memberId": 1 }'

Clear drawing

POST/api/v1/overlays/{overlayId}/members/{memberId}/drawing/clear

ON AIR: clears every stroke on a drawing layer right away (yours and viewers' strokes). Cannot be undone.

Scope: actions:fire (Trigger widgets on air) · MCP tool: clear_drawing · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredLayer (member) id (from get_overlay or list_members). At least 1
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/drawing/clear" \
  -H "Authorization: Bearer $PX_TOKEN"

Let viewers draw

POST/api/v1/overlays/{overlayId}/drawing/viewers/enable

Lets viewers draw on the stream: adds the drawing layer when the overlay has none and turns on the viewer drawing link (the user shares it from the Draw panel in the editor). Returns the memberId of the drawing layer for clear_drawing and moderate_viewer_drawing. Owner only. The link itself is never returned.

Scope: actions:fire (Trigger widgets on air) · MCP tool: enable_viewer_drawing

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/drawing/viewers/enable" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

Get viewer drawing

GET/api/v1/overlays/{overlayId}/members/{memberId}/drawing/viewers

Tells whether viewer drawing is shared for a drawing layer (active) and lists the viewers who drew or are blocked (name, platform, blocked, stroke count, viewerKey for moderate_viewer_drawing). Owner only. Viewer names come from viewers.

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

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredLayer (member) id (from get_overlay or list_members). At least 1
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/drawing/viewers" \
  -H "Authorization: Bearer $PX_TOKEN"

Moderate viewer drawing

POST/api/v1/overlays/{overlayId}/members/{memberId}/drawing/viewers

MODERATION: removes all viewer strokes (clear-viewer-strokes), or blocks or unblocks one viewer (viewerKey from get_viewer_drawing). Blocking also removes that viewer's strokes on air. Owner only.

Scope: actions:fire (Trigger widgets on air) · MCP tool: moderate_viewer_drawing · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredLayer (member) id (from get_overlay or list_members). At least 1
actionbodyclear-viewer-strokes, block, unblockrequired
viewerKeybodystringoptional
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/drawing/viewers" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "action": "clear-viewer-strokes" }'

Get stream activity stats

GET/api/v1/overlays/{overlayId}/activity/stats

Returns the counts of the current stream session of the overlay owner's channel: follows, subs, cheers and bits, raids and raid viewers, tips, redemptions and hype trains since the session started. Use it for an overlay shared with you; for your own account without an overlay, get_account_activity_stats returns the same counts.

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

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

Get live data of a layer

GET/api/v1/overlays/{overlayId}/members/{memberId}/live-data

Reads the live data a layer shows: kind text-variables (latest follower and similar), stream-status, twitch-stats, youtube-stats, kofi-stats, community-feed (latest events and leaderboard) or media (what a media layer shows now, with slotId for move_media). Names and messages come from viewers.

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

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredLayer (member) id (from get_overlay or list_members). At least 1
kindquerytext-variables, stream-status, twitch-stats, youtube-stats, kofi-stats, community-feed, mediaoptional
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/live-data" \
  -H "Authorization: Bearer $PX_TOKEN"

Get YouTube queue

GET/api/v1/overlays/{overlayId}/members/{memberId}/youtube

Returns what the player layer plays now (video id, title, position, paused), the waiting queue, volume and mute. With videoId it also returns that video's public title.

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

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredThe player layer. At least 1
videoIdquerystringoptionalYouTube video id (11 characters, e.g. dQw4w9WgXcQ)
Terminal
curl -X GET "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/youtube" \
  -H "Authorization: Bearer $PX_TOKEN"

Play YouTube video now

POST/api/v1/overlays/{overlayId}/members/{memberId}/youtube/play

ON AIR: plays a YouTube video on the player layer right away (replaces what plays now; the queue stays).

Scope: actions:fire (Trigger widgets on air) · MCP tool: play_youtube_video · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredThe player layer. At least 1
videoIdbodystringrequiredYouTube video id (11 characters, e.g. dQw4w9WgXcQ)
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/youtube/play" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "videoId": "..." }'

Queue YouTube video

POST/api/v1/overlays/{overlayId}/members/{memberId}/youtube/queue

ON AIR: adds a YouTube video to the end of the player queue; if nothing plays, it starts right away.

Scope: actions:fire (Trigger widgets on air) · MCP tool: queue_youtube_video · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredThe player layer. At least 1
videoIdbodystringrequiredYouTube video id (11 characters, e.g. dQw4w9WgXcQ)
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/youtube/queue" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "videoId": "..." }'

Control YouTube player

POST/api/v1/overlays/{overlayId}/members/{memberId}/youtube/control

ON AIR: skips to the next queued video, stops, pauses, resumes, mutes, unmutes or sets the volume (0 to 100) of the player layer right away.

Scope: actions:fire (Trigger widgets on air) · MCP tool: control_youtube · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredThe player layer. At least 1
actionbodyskip, stop, pause, resume, mute, unmute, volumerequired
volumebodyintegeroptional0 to 100
Terminal
curl -X POST "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/youtube/control" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "action": "skip" }'

Move queued YouTube video

PUT/api/v1/overlays/{overlayId}/members/{memberId}/youtube/queue/{itemId}/position

Moves a waiting video to another place in the player queue (toIndex 0 = next up).

Scope: actions:fire (Trigger widgets on air) · MCP tool: move_youtube_video

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredThe player layer. At least 1
itemIdpathstringrequiredQueue item id from get_youtube_queue
toIndexbodyintegerrequired0 to 99
Terminal
curl -X PUT "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/youtube/queue/<itemId>/position" \
  -H "Authorization: Bearer $PX_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "toIndex": 1 }'

Remove queued YouTube video

DELETE/api/v1/overlays/{overlayId}/members/{memberId}/youtube/queue/{itemId}

DESTRUCTIVE: removes one waiting video from the player queue.

Scope: actions:fire (Trigger widgets on air) · MCP tool: remove_youtube_video · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredThe player layer. At least 1
itemIdpathstringrequiredQueue item id from get_youtube_queue
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/youtube/queue/<itemId>" \
  -H "Authorization: Bearer $PX_TOKEN"

Clear YouTube queue

DELETE/api/v1/overlays/{overlayId}/members/{memberId}/youtube/queue

DESTRUCTIVE: removes every waiting video from the player queue (what plays now keeps playing).

Scope: actions:fire (Trigger widgets on air) · MCP tool: clear_youtube_queue · Notes: destructive, needs confirmation in MCP

NameInTypeRequiredDescription
overlayIdpathstringrequiredOverlay id (from list_overlays). Up to 64 characters
memberIdpathintegerrequiredThe player layer. At least 1
Terminal
curl -X DELETE "https://pxstudio.cloud/api/v1/overlays/<overlayId>/members/<memberId>/youtube/queue" \
  -H "Authorization: Bearer $PX_TOKEN"

Was this page helpful?