TipPage Developer API
Read your tips, drive the TTS and media queues, run the chat bot, and get events the moment they happen.
| API base | https://api.tippage.com/v1 |
| Auth | Authorization: Bearer tp_live_... - see Authentication |
| Realtime stream | wss://ws.tippage.com - see Realtime |
| Spec | openapi.yaml - import into Postman, Insomnia or Bruno, or generate a client |
Guides: OAuth 2.0 for apps other streamers connect, Webhooks for signed events, Claim and finish to play tips from your own code.
Rate limits: 240 requests/min per IP and 120/min per key (or OAuth
authorization), in RateLimit-* headers; over the limit is 429.
POST /chat/messages also has its own budget: 20 messages per 30 seconds
per streamer, across all keys.
Errors are JSON: { "error": "<human message>", "code": "<machine_code>" }.
https://api.tippage.com/v1Identity
Key introspection and API discovery.
Realtime
The webhook event stream, live over a WebSocket at wss://ws.tippage.com - same events, same payloads, same event ids as the webhooks, delivered while you’re connected. No SDK needed: open a plain WebSocket, send one JSON line - {"data": {"apiKey": "tp_live_..."}} for connections you control, or {"data": {"token": "..."}} with a short-lived token from POST /realtime/token to let clients that shouldn’t hold your key (browsers, third parties) connect. The server streams the events your key’s scopes allow. Full guide, wire format, channel table, and lifecycle: https://docs.tippage.com/api/realtime
TTS queue
The pending TTS queue and its played history. Reads need tts:read; controls need tts:control. The start/finish pair is the same protocol the stream overlay speaks - an external consumer can claim a TTS, play it its own way, and finish it into history. Full pattern: claim, do your thing, finish.
- GETPending TTS queue
/tts/queue - GETPlayed TTS history
/tts/history - GETWhat's playing right now
/tts/now - GETStandard voices, and the main alert box's settings
/tts/voices - GETAudio for a queued tip
/tts/{orderId}/audio - POSTPause the TTS queue
/tts/pause - POSTResume the TTS queue
/tts/resume - POSTSkip the currently-playing TTS
/tts/skip - POSTClear the whole TTS queue
/tts/clear - DELETERemove one queued TTS
/tts/{orderId} - POSTReplay a TTS from history
/tts/{orderId}/replay - POSTClaim a TTS as now playing
/tts/{orderId}/start - POSTFinish a TTS
/tts/{orderId}/finish - POSTRelease a claimed TTS back to the queue
/tts/{orderId}/release
Media queue
The media (video request) queue, its played history, live playback status, and direct video queueing. Reads need media:read; controls and queueing need media:control.
- GETPending media queue
/media/queue - GETPlayed media history
/media/history - GETWhat's playing right now
/media/now - POSTQueue a video
/media - POSTPause the media queue
/media/pause - POSTResume the media queue
/media/resume - POSTSkip the currently-playing media
/media/skip - DELETERemove one queued media item
/media/{orderId} - POSTReplay a media item from history
/media/{orderId}/replay - POSTClaim a media item as now playing
/media/{orderId}/start - POSTFinish a media item
/media/{orderId}/finish - POSTRelease a claimed media item back to the queue
/media/{orderId}/release - POSTShow the media player
/media/show - POSTHide the media player
/media/hide
Tipping
Tips themselves: create manual tips (tips:create), the accept-new-tips switch (status readable by any valid key, opening/closing via tipping:control), and the supporter leaderboard (any valid key).
- POSTCreate a tip
/tips - GETIs tipping open
/tipping - POSTOpen tipping
/tipping/open - POSTClose tipping
/tipping/close - GETTop supporters
/leaderboard
Alerts
Platform alerts - subs, gift subs, resubs, cheers, raids, Kicks and channel point redemptions - as the overlay’s alert box plays them: what is on screen now, what played, skip and replay. Reads need tts:read, controls tts:control (the same pair the dashboard’s TTS page uses for the same panel). The live events themselves ride the twitch and kick realtime groups.
- GETAlert history
/alerts/history - GETThe alert on screen right now
/alerts/now - POSTSkip the alert on screen
/alerts/skip - POSTReplay an alert from the history
/alerts/{id}/replay
AI voices
AI voice TTS (TipPage+): the curated voice catalog with per-voice enabled flags, this month’s character usage, and toggles for the whole feature or individual voices. Needs ai_voices:manage. Every endpoint answers 404 unless AI voices are available to your account.
- GETList AI voices
/ai-voices - POSTEnable AI voices
/ai-voices/enable - POSTDisable AI voices
/ai-voices/disable - POSTEnable one voice
/ai-voices/{voiceId}/enable - POSTDisable one voice
/ai-voices/{voiceId}/disable
Viewers
Viewer management for the sub-rewards system. A viewer is someone who has signed in to the tip page - with Twitch or Kick - and every viewer object names that account as platform + platform_user_id, with the person’s other linked account(s) in linked_accounts. List them with their first sign-in dates and credit balances (viewers:read), read one viewer’s grant ledger and sub-reward usage, and grant or revoke credits (viewers:manage). Balances, grants and reward history are read across a person’s linked accounts; a grant or revoke lands on the exact account you name. Everywhere a {user} appears in a path you can pass <platform>:<id> (kick:123), a bare numeric id, or the viewer’s name (login or display name, case-insensitive, on either platform). Someone who has never signed in can’t be looked up or granted credits - those requests answer 404 viewer_not_signed_in.
- GETList signed-in viewers
/viewers - GETLook up any viewer
/viewers/{user} - GETA viewer's sub-reward history
/viewers/{user}/rewards - POSTGrant credits
/viewers/{user}/credits/grant - POSTRevoke credits
/viewers/{user}/credits/revoke
Channel points
Create channel point rewards and resolve their redemptions on Twitch. Needs channel_points:manage. Twitch only lets the app that created a reward resolve its redemptions, so resolving works for rewards TipPage created - through POST /channel-points/rewards, or the dashboard’s Channel points page. Pair with the twitch.channel_point_redemption webhook, whose is_managed flag says whether a redemption is resolvable.
- GETList TipPage-created rewards
/channel-points/rewards - POSTCreate a reward
/channel-points/rewards - DELETEDelete a reward
/channel-points/rewards/{rewardId} - POSTMark a redemption fulfilled
/channel-points/redemptions/{redemptionId}/fulfill - POSTCancel a redemption (refund the points)
/channel-points/redemptions/{redemptionId}/cancel
Webhook endpoints
Manage where events get delivered. Needs webhooks:manage. Endpoints can also be managed in the dashboard.
- GETList endpoints
/webhook-endpoints - POSTAdd an endpoint
/webhook-endpoints - GETGet one endpoint
/webhook-endpoints/{endpointId} - DELETEDelete an endpoint
/webhook-endpoints/{endpointId} - PATCHUpdate an endpoint
/webhook-endpoints/{endpointId} - POSTRotate the signing secret
/webhook-endpoints/{endpointId}/rotate-secret - POSTSend a test event
/webhook-endpoints/{endpointId}/ping - GETRecent deliveries
/webhook-endpoints/{endpointId}/deliveries - POSTRedeliver a delivery
/webhook-deliveries/{deliveryId}/redeliver
Chat timers
Scheduled chat-bot messages - the bot posts them on a fixed or randomized interval, optionally only while the streamer is live or after enough chat activity. Needs timers:manage. The same timers as the dashboard’s Chat bot page; max 20 per streamer. Editing a timer’s interval restarts its schedule from now.
- GETList timers
/timers - POSTCreate a timer
/timers - GETGet one timer
/timers/{timerId} - DELETEDelete a timer
/timers/{timerId} - PATCHUpdate a timer
/timers/{timerId}
Counters
Named per-streamer numbers the chat bot bumps with {count} / {count:name} command tokens and overlay Data labels can display live. Addressed by name - a lowercase slug (a-z 0-9 _ -, max 64 chars) is the key on every surface. Needs counters:manage. Every change made here behaves exactly like a chat bump: overlays update live and the counter.updated webhook fires. Max 100 per streamer.
- GETList counters
/counters - GETRead a counter
/counters/{name} - PUTSet a counter
/counters/{name} - DELETEDelete a counter
/counters/{name} - POSTIncrement a counter
/counters/{name}/increment
Chat bot
The streamer’s chat bot: its status and send identity (any valid key), speaking in chat as the bot (chat:write), and the custom !commands it answers (commands:manage, addressed by command name - the trigger without the !). Pair with the chat.command webhook event to react when a custom command runs.
- GETBot status
/bot - POSTSend a chat message
/chat/messages - GETList custom commands
/commands - POSTCreate a command
/commands - GETGet one command
/commands/{commandName} - DELETEDelete a command
/commands/{commandName} - PATCHUpdate a command
/commands/{commandName}
Overlays
The account’s overlays: list them, inspect one (name, resolution, widget types - never overlay keys), delete one, reload a connected one, fire the Event celebration widget on demand (all of them or one specific instance), and read, update, or add to each overlay’s tip goal. All of it needs overlays:manage.
- GETIs an overlay connected?
/overlays/connected - GETList overlays
/overlays - POSTFire a celebration everywhere
/overlays/celebrate - GETGet one overlay
/overlays/{overlayId} - DELETEDelete an overlay
/overlays/{overlayId} - POSTReload an overlay
/overlays/{overlayId}/reload - POSTFire a celebration on one overlay
/overlays/{overlayId}/celebrate - GETGet an overlay's tip goal
/overlays/{overlayId}/tip-goal - PATCHUpdate an overlay's tip goal
/overlays/{overlayId}/tip-goal - POSTAdd to an overlay's tip goal
/overlays/{overlayId}/tip-goal/add