Discord error 30010: Maximum number of reactions reached (20)
Last verified against Discord Developer Docs - Opcodes and status codes
Maximum number of reactions reached (20)What error 30010 means
A message can carry at most 20 distinct emoji as reactions. Each distinct emoji can have many reactors, but the 21st unique emoji is refused. Your bot tried to add a reaction with an emoji that is not yet present on a message that already has 20 different ones.
This is a classic reaction-role and poll failure. A poll bot that offers 26 lettered options, or a reaction-role message that grew as the server added roles, stops working at the 21st emoji with no error shown to end users; the bot just silently fails to add the remaining reactions, and users cannot select those options.
The limit is per message, so the fix is usually structural: split across messages or move to components.
What it looks like
{
"message": "Maximum number of reactions reached (20)",
"code": 30010
}Why it happens
- Poll or reaction-role message with more than 20 options
- Users have added unrelated reactions, consuming slots before the bot's own
- Bot adds reactions on every restart with slightly different emoji (unicode variants count separately)
How to fix Discord error 30010
- 1Count reactions on the message (GET /channels/{id}/messages/{id}) before adding more
- 2Split the options across multiple messages, 20 or fewer per message
- 3Replace emoji reactions with buttons or a select menu (up to 25 options, 5 action rows) which are not subject to this cap
- 4Remove stray reactions added by users if the bot has Manage Messages (DELETE /channels/{id}/messages/{id}/reactions/{emoji})
How to stop it recurring
For any new selection UI, use message components instead of reactions. They scale further, deliver a proper interaction with user identity attached, and do not compete with user-added reactions. Reserve reactions for small, fixed sets.
Reactions were never designed as an input widget, and the 20-emoji ceiling is the API telling you so. Components carry identity, pagination and 25 options per select; the full component budgets are on the Discord limits page. If the reaction itself fails to resolve rather than exceeding the count, that is 10014.
Official reference: Discord Developer Docs - Opcodes and status codes. See all Discord error codes or the Discord limits and quotas.
Related codes
Error 30010 - quick answers
What does Discord error 30010 mean?
A message can carry at most 20 distinct emoji as reactions. Each distinct emoji can have many reactors, but the 21st unique emoji is refused. Your bot tried to add a reaction with an emoji that is not yet present on a message that already has 20 different ones. This is a classic reaction-role and poll failure.
How do I fix Discord error 30010?
1. Count reactions on the message (GET /channels/{id}/messages/{id}) before adding more 2. Split the options across multiple messages, 20 or fewer per message 3. Replace emoji reactions with buttons or a select menu (up to 25 options, 5 action rows) which are not subject to this cap 4. Remove stray reactions added by users if the bot has Manage Messages (DELETE /channels/{id}/messages/{id}/reactions/{emoji})
Should I retry after error 30010?
No. Retrying the same request produces the same error; the condition has to be fixed first. Treat it as a permanent failure for that message and surface it, rather than looping.
Stop debugging Discord by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.