Create a timer
A new timer posts for the first time one interval from creation, not immediately. Messages can’t start with / or !, and support the same template variables as custom commands minus the argument ones ({channel}, {pick:a|b|c}, {random:1-100}, {list:name}, {uptime}, {ai:...}, … - see https://docs.tippage.com/chat-bot/variables). Max 20 timers. Requires timers:manage.
POST
/timersAuthorization
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/jsonnamestringrequiredmax length 64
messagestringrequiredThe template. Can't start with `/` or `!`; the rendered chat line is cut to 500.
max length 2500
interval_minutesintegerrequiredmin 1 · max 1440
interval_max_minutesinteger | nullOmit or `null` for a fixed cadence.
min 1 · max 1440
min_chat_linesintegermin 0 · max 1000 · default: 0
live_onlybooleandefault: true
platformsstring[]Which chat(s) the timer posts in. At least one.
default: ["twitch","kick"]
enabledbooleandefault: true
Responses
201Created.
timerChatTimerShow propertiesHide properties
idstringnamestringLabel shown in the dashboard - viewers never see it.
messagestringWhat the bot posts. Same template variables as custom commands minus the argument ones.
interval_minutesintegermin 1 · max 1440
interval_max_minutesinteger | null`null` = fixed cadence. Set = a fresh random interval in [`interval_minutes`, `interval_max_minutes`] is rolled after every post.
min 1 · max 1440
min_chat_linesintegerThe timer waits until this many chat messages have been sent since its last post. 0 = no requirement. A due timer that hasn't met the bar posts as soon as chat catches up - it never skips a cycle.
min 0 · max 1000
live_onlybooleanOnly post while the streamer is live - the Twitch channel's status when one is connected, else the Kick channel's. `min_chat_lines` counts Twitch chat only.
platformsstring[]Which chat(s) the timer posts in. Default both. One schedule - when it fires, it posts once per connected platform in the set.
enabledbooleancreated_atstring<date-time>updated_atstring<date-time>400Invalid fields (`invalid_timer`) or timer limit reached (`limit_reached`).
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_scopestring429Rate limit exceeded - check the `RateLimit-*` headers.
errorstringRequest
curl -X POST "https://api.tippage.com/v1/timers" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"message": "string",
"interval_minutes": 1,
"interval_max_minutes": 1,
"min_chat_lines": 0,
"live_only": true,
"platforms": [
"twitch",
"kick"
],
"enabled": true
}'const response = await fetch("https://api.tippage.com/v1/timers", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"name": "string",
"message": "string",
"interval_minutes": 1,
"interval_max_minutes": 1,
"min_chat_lines": 0,
"live_only": true,
"platforms": [
"twitch",
"kick"
],
"enabled": true
})
});import requests
response = requests.post(
"https://api.tippage.com/v1/timers",
headers={
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
json={
"name": "string",
"message": "string",
"interval_minutes": 1,
"interval_max_minutes": 1,
"min_chat_lines": 0,
"live_only": True,
"platforms": [
"twitch",
"kick"
],
"enabled": True
},
)Response
{
"timer": {
"id": "tmr_1a2b3c4d5e6f7a8b",
"name": "string",
"message": "string",
"interval_minutes": 1,
"interval_max_minutes": 1,
"min_chat_lines": 1000,
"live_only": true,
"platforms": [
"twitch"
],
"enabled": true,
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z"
}
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string"
}{
"error": "string",
"code": "string",
"required_scope": "string"
}{
"error": "string"
}