Announcing API endpoints for Twitch emotes

Not sure which UserNotices you mean as I don’t recall them showing up with set IDs, but if it’s a caching thing for emote IDs that have been seen, then that makes sense.

I’ve tried this with a few, but I can’t seem to query (for instance) the set of hype train emotes (477339272), so I’m probably doing somethign wrong.

Sorry I meant GLOBALUSERSTATE having rechecked the docs.
And the tag emote-sets

lets chat clients know what “emote sets” by “emote set ID” that the chat user has access to.

@badge-info=subscriber/8;badges=subscriber/6;color=#0D4200;display-name=dallas;emote-sets=0,33,50,237,793,2126,3517,4578,5569,9400,10337,12239;turbo=0;user-id=1337;user-type=admin GLOBALUSERSTATE

Entirly possible that the HypeTrain moved on to the next set of Emotes since they change periodically and it’s no longer valid.

Thanks. An issue I noticed is that when I unlock an emote using Channel Points, a new emoteset appears in the emote-sets tag of the USERSTATE command in IRC, however requesting that emoteset using<emoteset> returns {"data":[]}.

Not sure how emotesets work in these cases, it seemed like unlocking more emotes with Channel Points didn’t add more emotesets. The emote-sets tag also used to be unreliable for some types of “special” emotes (seeminly randomly alternating between different emote sets), but that doesn’t seem to happen anymore (although I haven’t checked if it contains all emotes I have access to, besides the Channel Points issue).

Either way, if a “get all emotes a user has access to” endpoint would exist, I would prefer to use that anyway, since that would be simpler than potentially doing several requests based on the emote-sets tag (if a user has more than 25 sets). Currently I’m using the Kraken endpoint.

Or since

  • hypetrain
  • channel points emotes

Don’t work setID’s reported as “not working”

Looks like “get by emote set ID” only does

G ets all custom emotes for a specific Twitch channel including subscriber emotes, Bits tier emotes, and follower emotes.

I anticipate “Get by Emote Set ID” (currently) only does the same groups as " Get Channel Emotes"

Ah yep, that one. Thanks. I had a different way of seeing some set IDs, but it’s clearly the same IDs, so it’s all good.

Definitely possible, but I think your comment in the next post is more accurate: this API is limited to channel emotes. Would be nice to have access to ALL emote sets this way.

@zneix @tduva
We do not plan to offer an endpoint to retrieve the emotes that a user has access to as this exposes subscription information that should be considered private.

Barry mentioned emote set IDs in IRC, but just to add to that, they are also included in the data returned for Get Channel Emotes and Get Global Emotes, so you can use these values to make further calls to Get Emote Sets. The API does not provide a resource that lists all existing emote set IDs if that’s the use case you are asking for though.

And I’ll ask the API team about Hype Train emotes. Can you provide an example request and response where you are seeing the emote set ID for Hype Train emotes is 477339272? If you do not want to post here, please feel free to DM the information. Thanks.

1 Like

Yes, that would be an excellent tool - a way to list emote set IDs for Twitch unlockable emote sets (the hype train sets, “2020 Hindsight”, the 2FA ones, Turbo, etc). The emotes in them are public; whether or not someone has them might be private.

It’s pretty straight-forward. returns {"data": []} . I was using a generic login token that I use for “non-authenticated” API calls, which is associated with my Twitch account named Rosuav; if it’d make a difference to use a different token or an app token, I would be very surprised.

There may be a wrinkle with some of these emote sets in that they are not unlocked as a single block. Hype train emotes are a great example of this - they’re logically a single block, but you unlock them one by one. I’m not sure whether that means they’re a single emote_set_id or thirty individual ones. TBH I’d be okay with either, but if they’re thirty separate ones, then it would be incredibly helpful to have an emote set grouping indicator that says “hey, these thirty should logically be shown together” (think about how the on-platform emote picker groups them all).

That would need to be an authenticated endpoint, which shouldn’t be a problem. There’s currently a v5 endpoint that gives this, and it needs the user_subscriptions scope. A Helix version of the same endpoint (requiring whatever the Helix equivalent of that scope is) could provide the equivalent information, with the addition of all the v2 emotes.


I couldn’t find a UserVoice for this (I thought one existed, but maybe I was thinking of a similar one), so I added one: Get the authenticated user's emotes (equivalent to existing Kraken endpoint) – Twitch UserVoice

Using the GET endpoint, bitstier type emotes seem to not return a tier, only a blank string. Is this intentional or is this supposed to return the amount of bits required to unlock said bit emote?

Example from the response of the following request GET

The docs state

If the emote_type is "subscriptions" , this indicates the subscriber tier at which the emote is unlocked. Set to an empty string otherwise.

So no.

Why would that be a problem though? The Kraken endpoint only works for the currently authenticated user and requires the scope for viewing subscription for said user. That’s all developers want from that endpoint, just the same functionality we have in Kraken, but now in Helix.

Being able to get information for an arbitrary set of emotes is useful, but knowing specifically what the currently authenticated has access to is useful for providing a better UI experience for things like emote intellisense, as we only want to show the emotes that user can actually use in chat. Otherwise all you could show to the user was the global emotes and the emotes for their channel.

The only other way I can think of to get this same effect would be to query for all the channels that user is subscribed, then make batch calls for all the emote sets for those channels.


GLOBALUSERSTATE provides the required information on server connect, as does USERSTATE on channel join

emote-sets A comma-separated list of emotes, belonging to one or more emote sets. This always contains at least 0. Get Chat Emoticons by Set gets a subset of emoticons.

Don’t need a “higher scoped above chat” token from the user to call the API when you can use emote-sets provided by TwitchChat itself to you.

I was stoked to read this update in the Twitch Developers Forum summary email just now. Thanks to everyone involved for your work on this, and pretty cool announcement re: Followers emotes!

Given the commitment to eventually migrate everything to EventSub, does that include enhancing it with additional EventSub event types when new API endpoints like these are released? It is great to be able to get the channel emotes from a given Twitch broadcaster, but that information could stale-date within hours of receipt.

To that end, are there plans to add additional EventSub event types to supplement these new API endpoints such as “Channel Emote Add” and “Channel Emote Remove”? Or given the new Library functionality rolling out, perhaps “Channel Emote Enable” and “Channel Emote Disable” might be more à propos?

We are actively adding subscription types to EventSub; we’ve added 14 so far this year for features like Raids, Polls, and Predictions. As we bring features to Helix we also look at whether it makes sense to bring them to EventSub, too.

We do not have immediate plans to add EventSub subscription types for Emotes. It is possible that these subscription types could happen in the future. If you have a cool use case, we’d love to hear about it in UserVoice!

1 Like

Thanks @ecressey ! Yes I have been tracking with the subscription types the team has been adding to EventSub, and while some of them (Polls, Predictions) are less relevant to me personally, I appreciate all of the effort that has gone into extending EventSub!

I do believe I have a worthwhile use case for this; I will add it in UserVoice sometime before the end of the month. Cheers!

Hey, just wondering why emote objects returned from Get Emote Sets do not include tier of the emote, while Get Channel Emotes endpoint does. In my usecase I’d need to get the tier information for each emoteset I’m requesting, but that’s not possible. Could that tier field be added to the response of Get Emote Sets?

I’m speculating for the team, but I would assume there isn’t a particular reason that tier was excluded from Get Emote Sets. Feel free to create a UserVoice entry if you haven’t already to request tier in Get Emote Sets if the emote is a subscription type.

1 Like

@jbulava Maybe this will be useful - I wanted to post it here that, so far, these are the IDs of emotesets I’ve encountered so far that have the same issue as described by @Rosuav: 472873131 477339272 488737509 537206155 564265402 592920959 610186276. Trying to lookup those in Helix returns empty arrays as I believe that whether a user has emotes from those sets or not is tied to user’s account.
The only alternative would be to use Kraken’s Get (Authenticated) User’s Emotes, but given today’s announcement we’d need a way to query those in Helix. Many third-party chat clients use this functionality and it’s very important to us.

1 Like

Thanks for the details, I’ll make sure to mention this to the team early next week to look into.

1 Like