OverlayThing Docs
Home
Login / Request Access
01 Get started
Introduction Quickstart Add to your stream
02 Overlays
Overlays The editor Overlay URLs Alert queue Share, export & import
02.1 Widgets
Widgets overview Alerts Variations Hype Train Text to speech Goals Countdown & subathon Chat box Data labels Counter Text, image & video
03 Chatbot
Chatbot overview Getting started Commands Variables Conditionals Recipes API commands Integrations Command API & Copy-URL Chat moderation Bot settings
03.1 Chatbot modules
Modules overview Timers Counters Quotes Chat alerts Welcome Giveaways Queue Song requests Loyalty
04 Remote Control
Overview Connect OBS Studio Connect Meld Studio Bindings & triggers Security & access
05 Monetize
Tip page Tip settings Merch with Fourthwall
06 Build your own
AI Magic Builder Custom widgets Widget SDK
07 Your data
Dashboard Stream data Chat log Moderation
08 Account
Settings & connections Export your data Import from StreamElements
09 Reference
Label tokens Keyboard shortcuts Troubleshooting
Chatbot/Variables
Chatbot

Variables.

Variables are $( … ) tokens you drop into a command response. They fill in with live data when the command runs: the viewer name, your uptime, a random number, a quote, a counter value, and much more.

How variables work

Write a token anywhere in a command response and the bot replaces it before posting. They combine freely with your own text.

responseexample
Welcome $(user)! $(channel) has been live for $(uptime).

If a token has no value (or names something that does not exist) it simply renders as nothing, so a small typo never breaks the reply.

command response variables Live
$(touser)@ninja just hit $(count.deaths)12 deaths on $(game)Elden Ring

Tokens that target a user

A few tokens describe a person and accept an optional @mention. With no mention they describe the viewer who ran the command; with one, they describe that user. These are $(followage), $(watchtime) and $(accountage).

arg-or-selfexample
!followage          → your own follow age
!followage @cohh    → @cohh's follow age

Other arg-taking tokens read what the viewer typed: $(touser) is the first word after the command, $(query) is everything after it, and $(random 1-6) / $(pick a;b;c) take their own inline options.

Use $(querystring) inside URLs

When you put viewer input into an API URL, use $(querystring) (URL-encoded), never the raw $(query). The encoded form keeps spaces and symbols from breaking the link.

Full reference

Every available variable, grouped by what it relates to. Tokens shown as $(count.<name>) or $(api.<field>) take a name or field you supply.

User

$(user)

The viewer who ran the command.

Example
$(user)→ninja
$(user.id)

The viewer's numeric Twitch user ID.

Example
$(user.id)→44322889
$(chatter)

The viewer who ran the command. Alias of $(user).

Example
$(chatter)→ninja
$(chatter.id)

The running viewer's numeric Twitch ID. Alias of $(user.id).

Example
$(chatter.id)→44322889
$(user.followers)

The running viewer's own channel follower count.

Example
$(user.followers)→1,530
$(user.status)

Whether the running viewer's own channel is live (with game) or offline.

Example
$(user.status)→live playing Fortnite
$(user.title)

The running viewer's own channel stream title.

Example
$(user.title)→ranked grind to Champion
$(user.viewers)

The running viewer's own channel viewer count (0 if offline).

Example
$(user.viewers)→212
$(user.url)

A link to the running viewer's own channel page.

Example
$(user.url)→https://twitch.tv/ninja
$(user.tags)

The running viewer's own channel stream tags.

Example
$(user.tags)→English, FPS
$(user.game)

The category the running viewer's own channel last streamed.

Example
$(user.game)→Fortnite
$(touser)

The first word after the command (an @-mention), or the viewer if none was given.

Example
$(touser)→cohhcarnage
$(random.chatter)

A random active chatter in your channel right now.

Example
$(random.chatter)→pokimane
$(userlevel)

The calling viewer’s level (everyone, subscriber, vip, moderator, broadcaster).

Example
$(userlevel)→moderator
$(touser.id)

The numeric Twitch ID of the @-mentioned user (or the viewer).

Example
$(touser.id)→26610234
$(touser.followers)

The @-mentioned channel’s follower count.

Example
$(touser.followers)→1,850,000
$(touser.status)

Whether the @-mentioned channel is live (with game) or offline.

Example
$(touser.status)→live playing Path of Exile 2
$(touser.title)

The @-mentioned channel’s current stream title.

Example
$(touser.title)→Chill Tuesday | PoE2
$(touser.viewers)

The @-mentioned channel’s current viewer count (0 if offline).

Example
$(touser.viewers)→4,120
$(touser.url)

A link to the @-mentioned channel’s page.

Example
$(touser.url)→https://twitch.tv/cohhcarnage
$(touser.tags)

The @-mentioned channel’s stream tags.

Example
$(touser.tags)→English, RPG

Channel & Stream

$(channel)

Your channel / broadcaster display name.

Example
$(channel)→doxmia
$(streamer)

Your channel / broadcaster display name. Alias of $(channel).

Example
$(streamer)→doxmia
$(game)

The category / game you are currently streaming.

Example
$(game)→Just Chatting
$(title)

Your current stream title.

Example
$(title)→building the overlay platform
$(viewers)

Your current live viewer count.

Example
$(viewers)→342
$(uptime)

How long you have been live this stream.

Example
$(uptime)→2h 14m
$(followers)

Your channel’s total follower count.

Example
$(followers)→12,480
$(pluspoints)

Estimated Twitch Plus Points earned so far this calendar month (paid subs only; Prime and gifted subs excluded). Resets monthly, like Twitch’s tracker.

Example
$(pluspoints)→39
$(status)

Whether you’re live (with the game) or offline.

Example
$(status)→live playing Just Chatting
$(tags)

Your current stream tags, comma-separated.

Example
$(tags)→English, Software & Game Dev
$(channel.url)

A link to your channel page.

Example
$(channel.url)→https://twitch.tv/doxmia
$(channel.id)

Your channel’s numeric Twitch ID.

Example
$(channel.id)→99288217
$(livesince)

The date your current stream went live.

Example
$(livesince)→Jun 9, 2026
$(touser.game)

The category another user (an @-mention, or the viewer) last streamed. Great for shoutouts.

Example
$(touser.game)→Path of Exile 2
$(query)

Everything the viewer typed after the command.

Example
$(query)→best loadout?
$(querystring)

Everything typed after the command, URL-encoded (for use inside API URLs).

Example
$(querystring)→best%20loadout%3F
$(1)

A single word the viewer typed, by position. $(1) is the first word after the command, $(2) the second, and so on (no limit). Blank past the last word.

Example
$(1)→best

Date & Time

$(time)

The current local time in your configured timezone.

Example
$(time)→9:42 PM
$(date)

Today's date in your configured format and timezone.

Example
$(date)→Jun 9, 2026
$(random)

A random whole number. Defaults to 1-100, or pass your own range.

Example
$(random 1-6)→4
$(pick)

Randomly pick one of several options separated by semicolons.

Example
$(pick heads;tails)→tails

Loyalty

$(followage)

How long a user (an @-mention, or the viewer) has followed your channel.

Example
$(followage @cohhcarnage)→2 years, 3 months
$(watchtime)

Total tracked watch time for a user (an @-mention, or the viewer). Needs Loyalty enabled.

Example
$(watchtime @cohhcarnage)→38h 12m
$(accountage)

How long ago a user (an @-mention, or the viewer) created their Twitch account.

Example
$(accountage @cohhcarnage)→11 years
$(accountdate)

The date a user (an @-mention, or the viewer) created their Twitch account.

Example
$(accountdate)→Mar 14, 2015
$(subscribers)

Your channel’s total subscriber count. Aliases: $(subscriber), $(subcount).

Example
$(subscribers)→486
$(subscriber)

Alias of $(subscribers) | your channel’s total subscriber count.

Example
$(subscriber)→486
$(subcount)

Alias of $(subscribers) | your channel’s total subscriber count.

Example
$(subcount)→486

Quotes

$(quote)

A random saved quote (its text). Same pick as $(quote.text) in the same response.

Example
$(quote)→dont feed the trolls
$(quote.text)

The text of a random saved quote.

Example
$(quote.text)→dont feed the trolls
$(quote.author)

The author of the random quote.

Example
$(quote.author)→doxmia
$(quote.id)

The per-channel number of the random quote.

Example
$(quote.id)→42

Counters

$(count)

This command's lifetime run count (or, inside a counter's own response, that counter's value).

Example
$(count)→128
$(count.<name>)

The current value of a named counter. Counters only change when a command or dashboard action explicitly increments them | they do NOT measure how often a word or phrase appears in chat messages.

Example
$(count.deaths)→7

Queue

$(queue.current)

The viewer currently up (now playing) in the queue.

Example
$(queue.current)→ninja
$(queue.next)

The next viewer waiting in the queue.

Example
$(queue.next)→shroud
$(queue.count)

How many viewers are waiting in the queue.

Example
$(queue.count)→5
$(queue.list)

Up to the next 5 waiting viewers, comma-separated.

Example
$(queue.list)→shroud, pokimane, tfue, myth, sykkuno
$(queue.position)

The calling viewer's position in the queue.

Example
$(queue.position)→3

Media Requests

$(media.current)

The now-playing song, with who requested it.

Example
$(media.current)→Darude - Sandstorm (requested by ninja)
$(media.current.title)

The title of the now-playing song.

Example
$(media.current.title)→Darude - Sandstorm
$(media.current.artist)

The channel / artist of the now-playing song.

Example
$(media.current.artist)→Darude
$(media.current.url)

A YouTube link to the now-playing song.

Example
$(media.current.url)→https://youtu.be/y6120QOlsfU
$(media.requester)

Who requested the now-playing song.

Example
$(media.requester)→ninja
$(media.next)

The title of the next song in the request queue.

Example
$(media.next)→Never Gonna Give You Up
$(media.queue)

Up to the next 5 requested song titles, comma-separated.

Example
$(media.queue)→Never Gonna Give You Up, Megalovania, Sandstorm
$(media.count)

How many songs are waiting in the request queue.

Example
$(media.count)→3

League of Legends

$(lol.rank)

A League player's ranked solo/duo tier, LP and win/loss. Needs the Riot integration enabled.

Example
$(lol.rank Faker#KR1 kr)→Challenger 1,487 LP (412W / 388L)
$(lol.recent)

A League player's last 5 ranked-solo results plus today's win/loss record.

Example
$(lol.recent Faker#KR1 kr)→WWLWW · today 3-1
$(lol.champs)

A League player's top 3 most-played ranked-solo champions with win rates.

Example
$(lol.champs Faker#KR1 kr)→Azir 62%, Ahri 58%, Orianna 55%

API & Advanced

$(api)

The raw response body of this command’s configured API call.

Example
$(api)→{"temp":21,"humidity":72}
$(api.<field>)

A single field pulled from this command’s JSON API response.

Example
$(api.main.temp)→21
$(url.commands)

A public link to your channel’s command list.

Example
$(url.commands)→https://overlaything.com/c/doxmia

Conditionals

$(if)

Show text only when a condition is true. Pair with $(endif).

Example
$(if subscribed)thanks for subbing!$(endif)→thanks for subbing!
$(else)

The text to show when the $(if) condition is false.

Example
$(if mod)hi boss$(else)hi$(endif)→hi boss
$(endif)

Closes an $(if) block.

Example
$(if vip)VIP$(endif)→VIP
$(subscribed)

True when the viewer is subscribed. Aliases: sub, subscriber.

Example
$(if subscribed)thanks for the support!$(endif)→thanks for the support!
$(founder)

True when the viewer is a founder (one of the channel’s earliest subscribers).

Example
$(if founder)OG sub!$(endif)→OG sub!
$(mod)

True when the viewer is a moderator (the broadcaster counts too). Alias: moderator.

Example
$(if mod)mod tools ready$(endif)→mod tools ready
$(vip)

True when the viewer has the VIP badge.

Example
$(if vip)VIP in the house$(endif)→VIP in the house
$(broadcaster)

True only when the channel owner runs the command. Alias: streamer.

Example
$(if broadcaster)hey boss$(endif)→hey boss
$(bits)

How many bits the viewer cheered in this message (0 if none).

Example
$(if bits >= 100)big cheer!$(endif)→big cheer!
$(is_cheer)

True when this message included a bit cheer.

Example
$(if is_cheer)thanks for the bits!$(endif)→thanks for the bits!
$(emote_count)

How many emotes the viewer used in this message.

Example
$(if emote_count >= 3)so many emotes$(endif)→so many emotes
$(first_time)

True when this is the viewer’s first-ever chat message in your channel.

Example
$(if first_time)welcome!$(endif)→welcome!
$(returning)

True when the viewer has chatted before (a returning chatter).

Example
$(if returning)welcome back!$(endif)→welcome back!
$(streams_seen)

How many of your streams this viewer has been seen in.

Example
$(if streams_seen >= 10)regular!$(endif)→regular!
$(hour)

The current hour (0–23) in your timezone.

Example
$(if hour >= 22)late-night crew$(endif)→late-night crew
$(day)

The current day name (e.g. monday) in your timezone.

Example
$(if day == "friday")happy Friday!$(endif)→happy Friday!
$(tier)

The viewer's sub tier as a number (0=not subbed, 1/2/3). Prime counts as 1.

Example
$(if tier >= 2)Tier 2+ perk unlocked$(endif)→Tier 2+ perk unlocked
$(follower)

True when the viewer follows your channel. Alias: following.

Example
$(if follower)thanks for following!$(endif)→thanks for following!
$(followage_days)

How many days the viewer has followed your channel.

Example
$(if followage_days >= 30)1+ month follower$(endif)→1+ month follower
$(followage_months)

How many months the viewer has followed your channel.

Example
$(if followage_months >= 12)1-year follower!$(endif)→1-year follower!
$(watchtime_minutes)

The viewer’s total watch time in minutes.

Example
$(if watchtime_minutes >= 60)1+ hour watched$(endif)→1+ hour watched
$(watchtime_hours)

The viewer’s total watch time in hours.

Example
$(if watchtime_hours >= 100)100-hour club!$(endif)→100-hour club!
$(live)

True when your channel is currently live. Alias: is_live.

Example
$(if live)we’re live!$(endif)→we’re live!
$(uptime_minutes)

How many minutes the current stream has been live.

Example
$(if uptime_minutes >= 120)2+ hours in$(endif)→2+ hours in

Hype Train

$(hypetrain.active)

yes while a Hype Train is running, otherwise no.

Example
$(if $(hypetrain.active) == "yes")train is live!$(endif)→train is live!
$(hypetrain.level)

Current Hype Train level (empty when none).

Example
$(hypetrain.level)→5
$(hypetrain.progress)

Points earned toward the next level (empty when no train or at the end).

Example
$(hypetrain.progress)→9500
$(hypetrain.goal)

Points needed for the next level (empty when no train or at the end).

Example
$(hypetrain.goal)→15000
$(hypetrain.total)

Total points contributed to the current/last train.

Example
$(hypetrain.total)→14250
$(hypetrain.conductor)

Display name of the top contributor (the conductor).

Example
$(hypetrain.conductor)→PixelPaladin
$(hypetrain.type)

Train type: regular, treasure or golden_kappa (empty when no train).

Example
$(hypetrain.type)→golden_kappa
Module tokens need their module on

Tokens like $(quote), $(count.deaths), $(queue.next), $(media.current) and $(watchtime) only return a value when the matching module is enabled. The League tokens need the Riot integration turned on for the platform.

Previous Commands Next Conditionals
On this page
Ask the docs
Have a question?
Thinking it through...
Answer
Get an answer instantly; our model is trained on every feature of our streaming suite.
ESC
Get started
More than overlaysOverlayThing is an all-in-one toolkit for your Twitch channel: a visual overlay … Get started From zero to liveThe fastest path to a working overlay on your stream. Sign in, build something, … Get started Add to your streamOne overlay, one URL, one browser source. OverlayThing works with any streaming … Get started
Overlays
OverlaysYour overlays live on the Overlays page, a gallery of every canvas you have buil… Overlays The editorWhere overlays are built. A canvas in the middle, your layer stack on the left, … Overlays Overlay URLsEach overlay has its own private URL. Add it to your streaming software once and… Overlays Alert queueWhen events pile up (a gifted-sub train, a hype raid), you usually want alerts t… Overlays Share, export & importMove overlays and individual widgets between your own overlays, back them up as … Overlays
Widgets
Widgets overviewWidgets are the building blocks of an overlay. Some fire on an event and leave (… Widgets AlertsThe moment something happens, an alert fires on screen with motion, sound and yo… Widgets VariationsOne event, different reactions. Variations let a single alert play a bigger vers… Widgets Hype TrainWhen a Hype Train rolls on your channel, OverlayThing can fire an on-screen aler… Widgets Text to speechHave alerts read messages aloud: a tip note, a resub message, a redemption. Text… Widgets GoalsA progress bar with a target. It fills itself as events come in, and you can cel… Widgets Countdown & subathonTwo timer widgets. A countdown runs down to a time or for a set duration. A suba… Widgets Chat boxPut your Twitch chat on stream, great for handheld, IRL or face-cam layouts wher… Widgets Data labelsSmall live readouts that keep your channel numbers on screen: latest follower, l… Widgets CounterPut a live number on your overlay: deaths, wins, fails, anything you keep a runn… Widgets Text, image & videoThe plain building blocks. Use them for backgrounds, frames, logos, panels and l… Widgets
Chatbot
The chatbotA Twitch chat bot built into OverlayThing: custom commands, timers, counters, qu… Chatbot Getting startedTurn the bot on, make it a moderator, and pick your command prefix. Three small … Chatbot CommandsCommands are the heart of the bot. A viewer types a trigger, the bot replies wit… Chatbot VariablesVariables are $( … ) tokens you drop into a command response. They fill in with … Chatbot ConditionalsConditionals let one command react differently to different viewers and situatio… Chatbot RecipesCopy-ready command responses for the trickier variables: shoutouts, weather, dic… Chatbot API commandsPower-user territory. Wire a command to an external API and pull a live value in… Chatbot IntegrationsBuilt-in connections to outside services that add ready-made variables. Today th… Chatbot Command API & Copy-URLFire bot commands and module actions from outside chat: a Stream Deck button, a … Chatbot Chat moderationWhen the bot is a moderator it can keep chat clean automatically: tunable spam f… Chatbot Bot settingsThe channel-wide behavior of the bot: your prefix, how it replies, how cooldowns… Chatbot
Chatbot modules
ModulesThe bot is built from modules you switch on one at a time. Turn on only what you… Chatbot modules TimersPost recurring messages on a schedule: rules, your socials, a sponsor plug. Time… Chatbot modules CountersTrack a number from chat: deaths, wins, fails, anything you want to tally live.… Chatbot modules QuotesA searchable quote book your chat builds with you, one memorable line at a time.… Chatbot modules Chat alertsPost a chat message when someone follows, subscribes, resubs, gifts, cheers or r… Chatbot modules WelcomeGreet people automatically: first-time chatters, returning regulars, and incomin… Chatbot modules GiveawaysRun a giveaway and draw a winner from chat, by keyword entry or passive presence… Chatbot modules QueueLet viewers line up to play with you. They join, you pull people up in order.… Chatbot modules Song requestsViewers request YouTube songs by name or link and the bot builds a play queue, w… Chatbot modules LoyaltyTrack how long your viewers watch, so you can spot and reward your most loyal re… Chatbot modules
Remote Control
Remote ControlDrive your local OBS Studio or Meld Studio straight from OverlayThing. Switch sc… Remote Control Connect OBS StudioAdd the Remote Control URL as a dock or browser source, enable the OBS WebSocket… Remote Control Connect Meld StudioAdd the blank Remote Control source to every Meld scene. There is no password to… Remote Control Bindings & triggersA binding is one or more actions plus the trigger that fires them. Build them on… Remote Control Security & accessThe Remote Control URL is a key to your streaming software, and your OBS passwor… Remote Control
Monetize
Your tip pageA branded donation page viewers can reach from a single link in your panels or c… Monetize Tip settingsEverything behind your tip page: the payment connection, your branding, the amou… Monetize Merch with FourthwallConnect your Fourthwall shop and merch sales fire alerts on stream, the same way… Monetize
Build your own
AI Magic BuilderDescribe the widget you want in plain language and OverlayThing builds a styled,… Build your own Custom widgetsFor when you want to break the mold. Write your own HTML, CSS and JavaScript, re… Build your own Widget SDKThe API your custom widgets use to receive live events and persist state. It is … Build your own
Your data
DashboardYour home base. The numbers that matter at a glance, a chart to spot trends, and… Your data Stream dataThe numbers behind your overlay. Labels, goals and leaderboards all read from he… Your data Chat logA searchable archive of your chat, events and moderation actions. Look up what a… Your data ModerationEvery chat message, tip note and alert message runs through a moderation pipelin… Your data
Account
Settings & connectionsYour account, your connected services, and the controls that protect your access… Account Export your dataYour data is yours. From Settings, under Data and privacy, you can take it with … Account Import from StreamElementsAlready set up elsewhere? Bring your overlays, alert settings, goals and history… Account
Reference
Label tokensTokens are {placeholders} you drop into alert text, label templates and goal lab… Reference Keyboard shortcutsThe editor is built for the keyboard. These are the ones worth learning.… Reference TroubleshootingQuick fixes for the things that trip people up most.… Reference
↑↓ navigate ⏎ open esc close