Developer API
Changelog
The Developer API is versioned in its URL. Within /api/v1, changes are only ever additive: new endpoints, new event types and new fields. Nothing is renamed or removed, and no meaning changes. Your tool should ignore fields and event types it does not know.
Stream Manager redemptions
PATCH /api/v1/stream/{platform}/redemptions/{id}withstatusfulfilledorcanceled: fulfil or refund a channel point redemption of a reward Gleem created. See Redemptions.activity.redemptiongainscan_manage, true when the reward was created by Gleem and so can be fulfilled or refunded. Cards from before this change do not have it.activity.redemption'sstatusnow follows the redemption: fulfilled or refunded by Gleem, by your tool or on Twitch.- New event
activity.redemption.updated(redemption_id,reward_id,status) on the Stream Manager channel. capabilities.redemptionsinGET /api/v1/stream.- New error codes
reward_not_manageable(403),redemption_not_found(404) andredemption_already_processed(409).
Stream Manager chatters
GET /api/v1/stream/{platform}/chatters: who is in chat right now, a page of up to 1,000 at a time withtotalandcursor. See Chatters.capabilities.chattersinGET /api/v1/stream. It needs the Twitch scopemoderator:read:chatters, which the Stream Manager reconnect now asks for; earlier connections list it inmissing_scopesuntil they reconnect.- New error code
platform_unsupported(422), for a platform that does not offer something the Stream Manager does elsewhere.
Browser-source audio on the IRL Sidekick
POST /api/v1/irl/devices/{uuid}/commandstakes theaudio.*andbluetooth.*commands with apayload: set, update and remove browser sources with their routes and gains, choose where their sound plays, and pair a Bluetooth speaker. See Browser-source audio and Bluetooth.- New command
audio.test: a short test chime on the IRL Sidekick's speaker and/or into its stream. - IRL devices gain
audio, the same object, inGET /api/v1/irl/devicesandGET /api/v1/irl/devices/{uuid};nullwhile the device is offline or reports none. - The
telemetryevents on an IRL Sidekick's telemetry channel gainaudio: its browser sources (without URLs), outputs and Bluetooth devices. Likeinterfacesandupdate, it is left out of an event that would otherwise be too large.
Network addresses behind irl:network
An IRL device's IP addresses locate the streamer's modems, and stream tools need bitrate and link health, not addresses. They now need their own scope. This is the one change in /api/v1 that takes something away: a security fix, not a precedent. See Network addresses.
- New scope:
irl:network, sensitive, on top ofirl:read. The consent screen and the token form flag it. - The IRL device telemetry channel
private-irl-device.<uuid>.telemetryno longer carries addresses:interfaces[].addressesis gone fromtelemetryevents, andremotefrom the links iningest.stats. Everything else stays. - New channel
private-irl-device.<uuid>.network(telemetry_socket.network_channel): the same events in full, for tokens withirl:readandirl:network. See the WebSocket docs. - IRL devices gain
interfaces(name,kind,state,addresses);addressesisnullwithoutirl:network. - Tokens Gleem hands to a rented OBS machine can now sign the telemetry channel, since it carries no addresses. They still cannot sign the network channel or see
addresses, whatever their scopes.
Stream Manager
The backend of the Gleem IRL app's Stream Manager, open to any tool with the new scopes on an account in the Gleem IRL beta (otherwise 403 feature_unavailable). gleem.gg calls Twitch with your own Twitch sign-in, so the tool never holds a Twitch token; the Stream Manager's Twitch permissions are granted once through reconnect_url, not at sign-in. See Stream Manager and the Stream Manager channel.
- New scopes:
stream:readandstream:write. GET /api/v1/stream: live, viewers, title and category on each platform, what the connection allows, and which Twitch scopes it still lacks.PATCH /api/v1/stream/{platform}andGET …/categories: change the title and category.POST /api/v1/stream/{platform}/chat/messages,DELETE …/chat/messages/{id},POST …/bansandDELETE …/bans/{user_id}: chat and moderate as the streamer.GET /api/v1/stream/chatandGET /api/v1/stream/activity: the last day's chat and activity.GETandPUT /api/v1/stream/quick-actions: the Gleem IRL app's Quick Actions layout, per account.POST /api/v1/socket/authsignsprivate-creator.{id}.streamfor tokens withstream:read: chat, moderation, follows, subs, gifts, raids, redemptions and Gems, in one platform-neutral shape.
More for the Gleem IRL app
GET /api/v1/irl/pair/{code}shows the IRL Sidekick waiting under a pairing code (its hardware, version and when the code expires) so the Gleem IRL app can show it before the creator approves. See Pairing an IRL Sidekick.- IRL devices gain
versionandbitrate(the window the device is set to stream with), andingest.current_bps: what ingest measured in its latest report, whereaverage_bpsis the mean over the whole session. - A command sent to a device that goes offline at that very moment answers
409device_offlineinstead of a bare503; a bitrate window is then saved for its next heartbeat.
The Gleem IRL app
Endpoints for the Gleem IRL app, open to any tool with the new scopes. See The Gleem IRL app and OBS rentals.
- New scopes:
irl:write,hosting:read, andhosting:write, which is reserved for starting and ending rentals. POST /api/v1/irl/devicesregisters a phone as an IRL device and returns itsgid_credential once.POST /api/v1/irl/pair/approveand/declineanswer an IRL Sidekick's pairing by the code it shows.POST /api/v1/irl/devices/{uuid}/commands,PUT …/bitrate,PATCHandDELETE /api/v1/irl/devices/{uuid}: remote control, the same as the dashboard.GET /api/v1/hosting/rentalsandGET /api/v1/hosting/rentals/{uuid}: the creator's OBS rentals, with their obs-websocket while they run.POST /api/v1/socket/authsigns an IRL device's telemetry channel for tokens withirl:read.- IRL devices gain
board,hardware,phoneandtelemetry_socket. - Public OAuth apps can register a private-use URI scheme such as
gg.gleem.irl:/oauth/callbackas a redirect URI (RFC 8252 § 7.1).
General availability
The Developer API is out of preview and open to every creator: the Developer page, personal access tokens, webhooks, OAuth app registration and the consent screen no longer need an invitation. Nothing in /api/v1 changed; tokens and integrations from the preview keep working.
OAuth apps
Third-party tools can now be registered as OAuth apps, so creators connect them with a click instead of pasting a token. See OAuth apps.
- The authorization code flow with PKCE, the device flow (
/activate) and client credentials, at/oauth/authorize,/oauth/token,/oauth/device_authorizationand/oauth/revoke, with discovery at/.well-known/oauth-authorization-server. - OAuth access tokens (
gleem_oat_…) work with every endpoint and the WebSocket, with the same scopes. GET /api/v1/megains anappobject when called with an OAuth token.- A
401for an expired or revoked OAuth token says so inWWW-Authenticate. - App webhooks:
GET,POSTandDELETE /api/v1/webhookswith the newwebhooks:writescope. - Personal access tokens are unchanged.
Preview
The first version of the Developer API, built together with the Streamer.bot integration.
- Personal access tokens with scopes, created on the dashboard's Developer page.
GET /api/v1/meandPOST /api/v1/socket/auth.- REST endpoints for the queue, Treats, Gem messages, the leaderboard, memberships and Trigger Tickets, described by an OpenAPI 3.1 spec.
- Real-time events over the WebSocket: Gem messages, Treat redemptions, queue changes, memberships, post unlocks, follows, Bits exchanges, Trigger Tickets and going live or offline.
- Signed webhooks with retries, a delivery log and redelivery.
login(the Twitch handle) on every viewer object, andtotal_slotsoptional when opening a queue.- A per-creator message filter for Gem messages and Treat inputs, marked with
message_filteredandinput_filtered. - Test events and a live event log on the Developer page.
GET /api/v1/irl/devicesandGET /api/v1/irl/devices/{uuid}with the newirl:readscope: Gleem IRL devices and their stream health, for tools such as the OBS IRL Control plugin.