Build bots and tools for Xive creators
Chat bots, moderation tools and stream alerts. Create an app, let creators add it to their channel in one click, and get their chat and events on a single realtime connection.
- Free to build
- No public server needed
- Creators choose every permission
Everything a channel needs, made by you
-
Chat bots
Answer commands, run games and greet viewers — posting as your bot, with its own name, icon and a BOT badge.
chat:read chat:write -
Moderation
Delete messages, time out and ban in the channels that grant it, logged in the creator’s moderation log as your app.
chat:moderate -
Alerts & overlays
React to follows, gifts, subs, raids, Sparks and channel-point redemptions the moment they happen.
events:read -
Live stream tools
Know when a channel goes live, offline or changes its title, and build dashboards and integrations around it.
events:read
From zero to a working bot in three steps
# Your secret, from the Console export XIVE_APP_SECRET="xive_sa_…" # Check it works curl https://api.thexive.com/api/apps/@me \ -H "Authorization: Bearer $XIVE_APP_SECRET" # → { "success": true, "application": { "name": "HypeBot", … } }
# Send creators here. They sign in, review, and add your app. https://thexive.com/developers/authorize ?client_id=YOUR_CLIENT_ID &scope=chat:read+chat:write+events:read &redirect_uri=https://yourapp.example/xive/callback &state=random-value # Afterwards they land on your redirect URL with: # ?channel_id=…&scope=…&state=random-value
import { Centrifuge } from "centrifuge"; const API = "https://api.thexive.com"; const auth = { Authorization: `Bearer ${process.env.XIVE_APP_SECRET}` }; const gateway = async () => (await fetch(`${API}/api/apps/@me/gateway`, { method: "POST", headers: auth })).json(); const { url, token } = await gateway(); const ws = new Centrifuge(url, { token, getToken: async () => (await gateway()).token }); ws.on("publication", async ({ data: { metadata, payload: { event } } }) => { // Twitch EventSub shape: channel.chat.message, channel.follow, … if (metadata.subscription_type === "channel.chat.message" && event.message.text === "!hello") { await fetch(`${API}/api/apps/channels/${event.broadcaster_user_id}/chat`, { method: "POST", headers: { ...auth, "Content-Type": "application/json" }, body: JSON.stringify({ content: `Hi ${event.chatter_user_name} 👋` }), }); } }); ws.connect();
Everything in the docs
-
API referenceEvery endpoint, its scope and what it does.
-
JavaScript SDKTyped client for the API and EventSub.
-
AuthenticationSecrets, client types and rotating without downtime.
-
Adding to channelsThe consent link, scopes and redirect URLs.
-
Chat APISend, reply, read history and moderate.
-
Stream & raidsSet the title and category, and start raids.
-
Channel pointsRewards, the redemption queue and chests.
-
Chat commandsCreate, edit and retire !commands.
-
Users & channelsUsers, live channels, categories, goals, replays, schedules.
-
EventSubTwitch-style events on one WebSocket, for every channel.
-
WebhooksCreator webhooks for alerts and automations.
-
Limits & errorsRate limits, status codes and retries.
Ready to build?
Create your first app in under a minute. By creating one you agree to the Developer Agreement and Developer Policy.