Send a chat message
The bot says your message in the streamer’s chat - every connected chat by default, or just Twitch or Kick with platform - spoken by the same identity as every other bot line (TipPageBot or the linked custom bot on Twitch; the TipPage account on Kick). Sent verbatim - no template variables - and it can’t start with / or !, so the bot never runs slash commands or triggers other bots. Own rate limit on top of the global ones: 20 messages per 30 seconds per streamer, shared across all keys. Requires chat:write.
POST
/chat/messagesAuthorization
AuthorizationBearer token (tp_live_... or tpat_...) · headerrequiredA TipPage API key (`tp_live_...`, created in Dashboard → Settings → Developer) or an OAuth 2.0 access token (`tpat_...`, see the OAuth guide). Both carry the same scopes and are accepted on every endpoint.
Request body
requiredapplication/jsonmessagestringrequiredWhat the bot says. Can't start with `/` or `!`.
max length 500
platformstringWhich chat to speak in. `all` = every chat the streamer has connected.
default: "all"
Allowed:
twitchkickallResponses
200Done.
successboolean400Missing message (`bad_request`), over 500 characters (`message_too_long`), or disallowed content (`message_disallowed`).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
401Missing or invalid credential (`missing_api_key` / `invalid_api_key`, or `invalid_token` for an expired/revoked OAuth access token).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
403The key lacks the required scope (`missing_scope`).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
required_scopestring409The bot can't speak right now: switched off in the dashboard (`bot_disabled`), no connected channel on the requested platform, or not connected to the channel yet (`bot_unavailable` - transient when the channel exists, retry shortly).
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
429Rate limit exceeded - check the `RateLimit-*` headers.
errorstring502The chat gateway is unreachable (`gateway_unavailable`) - retry shortly.
errorstringrequiredHuman-readable message.
codestringMachine-readable code (e.g. `missing_scope`, `not_in_queue`).
Request
curl -X POST "https://api.tippage.com/v1/chat/messages" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "string",
"platform": "twitch"
}'const response = await fetch("https://api.tippage.com/v1/chat/messages", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"message": "string",
"platform": "twitch"
})
});import requests
response = requests.post(
"https://api.tippage.com/v1/chat/messages",
headers={
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
json={
"message": "string",
"platform": "twitch"
},
)Response
{
"success": true
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string",
"required_scope": "string"
}{
"error": "string",
"code": "string"
}{
"error": "string"
}{
"error": "string",
"code": "string"
}