Discord error 10014: Unknown emoji
Last verified against Discord Developer Docs - Opcodes and status codes
Unknown emojiWhat error 10014 means
The emoji you referenced cannot be found by your bot. This code shows up in two places: reaction endpoints (adding or removing a reaction) and guild emoji management (fetching, editing or deleting a custom emoji).
For reactions, the cause is usually formatting. Custom emoji must be sent as name:id (URL-encoded, so the colon becomes %3A), not as the full <:name:id> mention string and not just the ID. Unicode emoji must be URL-encoded too. Get either wrong and Discord cannot resolve it.
For custom emoji specifically, the bot must be able to see the emoji. Bots can use emoji from any guild they are a member of, but if the emoji was deleted, or came from a server the bot is not in, you get 10014. Emoji from a Nitro user's personal collection are not available to bots at all.
What it looks like
{
"message": "Unknown Emoji",
"code": 10014
}Why it happens
- Reaction sent as <:name:id> instead of name:id, or not URL-encoded
- Custom emoji was deleted from its guild
- Emoji belongs to a guild the bot is not a member of
- Animated emoji sent without the correct name (a:name:id is for mentions; reactions still use name:id)
- Unicode emoji with a variation selector mismatch (for example a trailing U+FE0F)
How to fix Discord error 10014
- 1For custom emoji reactions, build the string as name:id and encodeURIComponent it: PUT /channels/{id}/messages/{id}/reactions/name%3A123456/@me
- 2For unicode, encodeURIComponent the raw character
- 3Confirm the emoji still exists: GET /guilds/{guild.id}/emojis/{emoji.id}
- 4Make sure the bot is in the guild that owns the emoji, or upload it to your own application via the application emoji endpoints
- 5Use your library's resolved emoji object rather than a hand-typed string
How to stop it recurring
Upload the emoji your bot depends on as application emoji (owned by the app, not a guild) so they cannot be deleted by server admins. Store emoji as a name and ID pair rather than a display string, and render the reaction format and the mention format from that pair.
Emoji-heavy features should also watch the per-message reaction ceiling, 30010, since the two errors bracket the same feature: 10014 when the emoji cannot be resolved, 30010 when the message cannot take more. Emoji file-size and format rules are on the Discord limits page.
Official reference: Discord Developer Docs - Opcodes and status codes. See all Discord error codes or the Discord limits and quotas.
Related codes
Error 10014 - quick answers
What does Discord error 10014 mean?
The emoji you referenced cannot be found by your bot. This code shows up in two places: reaction endpoints (adding or removing a reaction) and guild emoji management (fetching, editing or deleting a custom emoji). For reactions, the cause is usually formatting. Custom emoji must be sent as name:id (URL-encoded, so the colon becomes %3A ), not as the full <:name:id> mention string and not just the ID.
How do I fix Discord error 10014?
1. For custom emoji reactions, build the string as name:id and encodeURIComponent it: PUT /channels/{id}/messages/{id}/reactions/name%3A123456/@me 2. For unicode, encodeURIComponent the raw character 3. Confirm the emoji still exists: GET /guilds/{guild.id}/emojis/{emoji.id} 4. Make sure the bot is in the guild that owns the emoji, or upload it to your own application via the application emoji endpoints 5. Use your library's resolved emoji object rather than a hand-typed…
Should I retry after error 10014?
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.