⚠️ Educational Purposes Only
This project is meant to document how the Discord client interacts with its API.
It is not intended for abuse, automation, alt generation, or anything against Discord’s Terms of Service.
Do not self-bot. Do not use this data maliciously.
This is just for learning, exploration, and testing.
Whenever I’m bored (which… is a lot), I open DevTools and poke around the Discord API to see what happens. This repo documents some of what I’ve discovered — especially request bodies (JSON) that aren’t easily found anywhere else.
ALSO I recommend you go to the discord api docs instead, although i did notice that this api like doc(s) has some stuff the one made by discord doesn’t.
Most endpoints were tested using Discord Canary, since I’m fancy like that.
Also if u want, check out the Discord APP Finder.
I couldn’t find a simple and up-to-date resource with actual API request payloads — not even Discord’s official docs include this kind of stuff clearly.
So I made my own, in a way that’s easy enough for even a monkey to understand.
{
"name": "<name>",
"parent_id": "<category_id>",
"type": <types below>,
"topic": "",
"icon_emoji": {
"id": null,
"name": "👋"
},
"bitrate": 64000,
"user_limit": <1-99>,
"nsfw": false,
"flags": 4295063878,
"rate_limit_per_user": <0-21600>
}
📢 FYI: If im not mistaken, the user limit is for voice chat channels, i have no idea what the rate limit per user is for.
Types:
Endpoint:
POST https://canary.discord.com/api/v9/guilds/<GUILD_ID>/channels
{
"id": "<channel_id>",
"type": <list above>,
"last_message_id": "<optional>",
"flags": 0,
"guild_id": "<guild_id>",
"name": "<name>",
"parent_id": "<category_id>",
"rate_limit_per_user": 0,
"topic": "",
"position": 0,
"permission_overwrites": [],
"nsfw": false,
"icon_emoji": {
"id": null,
"name": "👋"
},
"theme_color": null
}
❌ Editing doesn’t always work — may require proper headers or permissions.
Endpoint:
PATCH https://canary.discord.com/api/v9/channels/<CHANNEL_ID>
{
"name": "<your server name>",
"icon": "data:image/png;base64,<image>", // or null
"guild_template_code": "2TffvPucqHkN", // default template
"channels": [],
"system_channel_id": null
}
Endpoint:
POST https://canary.discord.com/api/v9/guilds
Bonus Endpoint:
DELETE https://canary.discord.com/api/v9/guilds/<GUILD_ID>
{
"username": "<desired_username>"
}
Endpoint:
POST https://discord.com/api/v9/unique-username/username-attempt-unauthed
{
"fingerprint": "",
"email": "<email>",
"username": "<username>",
"global_name": "<display_name>",
"password": "<password>",
"invite": null,
"consent": true,
"date_of_birth": "yyyy-mm-dd",
"gift_code_sku_id": null,
"promotional_email_opt_in": false
}
🔐 Fingerprint might come from captcha or session — not always needed in test scenarios.
Endpoint:
POST https://discord.com/api/v9/auth/register
{
"token": "<verification_token>"
}
Endpoint:
POST https://discord.com/api/v9/auth/verify
{
"login": "<email>",
"password": "<password>",
"undelete": false,
"login_source": null,
"gift_code_sku_id": null
}
Endpoint:
POST https://canary.discord.com/api/v9/auth/login
{
"login": "<email>"
}
Endpoint:
POST https://canary.discord.com/api/v9/auth/forgot
{
"house_id": 1
}
Endpoint:
POST https://canary.discord.com/api/v9/hypesquad/online
{
"timestamp": 999
}
Endpoint:
POST https://canary.discord.com/api/v9/quests/<quest_id>/video-progress
{
"recipients": []
}
You can leave
recipients
empty to make a group DM with just yourself.
Endpoint:
POST https://canary.discord.com/api/v9/users/@me/channels
{
"max_age": 0,
"max_uses": 0,
"target_type": null,
"temporary": true,
"flags": 0
"validate": "<invite code>" //run the first time, the second, flags are added and validate is removed
}
Endpoint:
POST https://canary.discord.com/api/v9/channels/<channel_id>/invites
Yes, channel, not guild, im assuming in that way u can invite someone to a dm?? but idk
This is a learning project only.
It is not affiliated with or endorsed by Discord.
You are responsible for how you use this data. Use it wisely and ethically.
Found a new payload or experimental feature?
Feel free to submit a PR or open an issue to contribute.