Discord API · error code

Discord error 30010: Maximum number of reactions reached (20)

Permanent - do not retryHTTP 400Maximum reached (30xxx)

Last verified against Discord Developer Docs - Opcodes and status codes

What Discord returns
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

  1. 1Count reactions on the message (GET /channels/{id}/messages/{id}) before adding more
  2. 2Split the options across multiple messages, 20 or fewer per message
  3. 3Replace emoji reactions with buttons or a select menu (up to 25 options, 5 action rows) which are not subject to this cap
  4. 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.