disdex API
A free, open JSON API over the disdex index — every Discord server, user, and bot we've found. No key required.
Quickstart
No signup, no key. Just call it:
curl https://disdex.io/api/v1/servers?q=minecraft&limit=3Base URL: https://disdex.io/api/v1 · CORS is open (Access-Control-Allow-Origin: *) so you can call it from the browser.
Conventions
- IDs are strings. Discord snowflakes are 64-bit; we always serialise ids (and any id-typed field) as JSON strings so JavaScript doesn't silently corrupt them.
- Versioned + stable. Everything lives under
/api/v1. Within v1 we only ever add fields and endpoints — your client must ignore unknown keys. A breaking change would ship as/api/v2. - Lists are enveloped:
{ data, total, limit, offset, has_more }. Single resources return the object directly.totalmay benullwhen an exact count would be expensive — always paginate offhas_more(which is exact). - Errors are
{ "error": { "code", "message" } }with a matching HTTP status. - Timestamps are RFC-3339 UTC strings.
- Pagination caps:
limit≤ 100,offset≤ 10000. To reach deeper results, narrow withqrather than paging — it's faster for both of us.
Endpoints
/api/v1/serversList & search servers. Query: q, sort (members·online·boosts·newest·oldest), nsfw (include·exclude·only), vanity (any·has·no), limit, offset.
$ curl 'https://disdex.io/api/v1/servers?q=valorant&sort=members&limit=2'
{
"data": [
{
"id": "123456789012345678",
"name": "VALORANT",
"description": "Official VALORANT community",
"vanity_url_code": "valorant",
"nsfw": false,
"members": 871234,
"online": 41200,
"boosts": 64,
"features": ["COMMUNITY", "VANITY_URL", "BANNER"],
"icon_url": "https://cdn.discordapp.com/icons/123.../abc.png",
"banner_url": null,
"splash_url": null,
"invite_url": "https://discord.gg/valorant",
"first_seen_at": "2026-04-19T08:14:00Z",
"last_scraped_at": "2026-06-13T10:55:00Z",
"url": "https://disdex.io/server/123456789012345678"
}
],
"total": 37,
"limit": 2,
"offset": 0,
"has_more": true
}/api/v1/servers/{id}Fetch one server by its guild id (snowflake).
$ curl https://disdex.io/api/v1/servers/662267976984297473
{
"id": "662267976984297473",
"name": "Midjourney",
"description": "The official server for Midjourney, a text-to-image AI ...",
"vanity_url_code": "midjourney",
"nsfw": false,
"members": 18992312,
"online": 784881,
"boosts": 287,
"features": ["VERIFIED", "VANITY_URL", "ANIMATED_BANNER", "COMMUNITY"],
"icon_url": "https://cdn.discordapp.com/icons/662267976984297473/a4f1c2....png",
"banner_url": "https://cdn.discordapp.com/banners/662267976984297473/a_9b....gif",
"splash_url": null,
"invite_url": "https://discord.gg/midjourney",
"first_seen_at": "2026-04-19T08:14:00Z",
"last_scraped_at": "2026-06-13T18:25:00Z",
"url": "https://disdex.io/server/662267976984297473"
}/api/v1/usersList & search users (people seen inviting, and bots). Query: q (username prefix), type (user·bot), sort (invites·servers·username·newest·oldest), limit, offset.
$ curl 'https://disdex.io/api/v1/users?type=bot&sort=servers&limit=1'
{
"data": [
{
"id": "302050872383242240",
"username": "disboard",
"global_name": "DISBOARD",
"is_bot": true,
"avatar_url": "https://cdn.discordapp.com/avatars/302050872383242240/....png",
"banner_url": null,
"server_count": 4821,
"invite_count": 5102,
"first_seen_at": "2026-04-18T22:10:00Z",
"last_seen_at": "2026-06-13T18:20:00Z",
"url": "https://disdex.io/user/302050872383242240"
}
],
"total": 2037,
"limit": 1,
"offset": 0,
"has_more": true
}/api/v1/users/{id}Fetch one user (or bot) by its id.
$ curl https://disdex.io/api/v1/users/976920610124996670
{
"id": "976920610124996670",
"username": "bawar9",
"global_name": "Cr Bawar",
"is_bot": false,
"avatar_url": "https://cdn.discordapp.com/avatars/976920610124996670/a2ee6d....png",
"banner_url": null,
"server_count": 3,
"invite_count": 387,
"first_seen_at": "2026-04-25T07:47:20Z",
"last_seen_at": "2026-06-13T18:28:11Z",
"url": "https://disdex.io/user/976920610124996670"
}/api/v1/statsIndex totals.
$ curl https://disdex.io/api/v1/stats
{
"servers": 1872212,
"users": 1797856,
"bots": 2037,
"games": 3038,
"invites": 2743681,
"updated_at": "2026-06-13T18:16:08Z"
}/api/v1/invitesSubmit one or many invites for indexing. Body: {"invite": "<code|link>"} or {"invites": [...]} (max 100). New codes are queued and resolved by the crawler; poll GET /api/v1/invites/{code} for the result.
$ curl -X POST https://disdex.io/api/v1/invites \
-H 'Content-Type: application/json' \
-d '{"invite": "discord.gg/abcdef"}'
{
"data": [
{ "code": "abcdef", "status": "queued", "credited": false, "server": null }
]
}/api/v1/invites/{code}Resolve an invite code to its server. Returns the full server object if the code is indexed (status: indexed · pending · unknown). This is how you go from a discord.gg link to server data.
$ curl https://disdex.io/api/v1/invites/midjourney
{
"code": "midjourney",
"status": "indexed",
"server": {
"id": "662267976984297473",
"name": "Midjourney",
"members": 18992312,
"invite_url": "https://discord.gg/midjourney",
"url": "https://disdex.io/server/662267976984297473"
}
}API keys (optional)
The whole API works without a key. A key does one thing today: it credits the invites you submit to your disdex profile, so they count on the submitter leaderboard. (It's also where per-account reputation and future paid tiers — like bulk export — will hook in.)
Send it on POST /api/v1/invites:
curl -X POST https://disdex.io/api/v1/invites \
-H 'Authorization: Bearer dsdx_your_key_here' \
-H 'Content-Type: application/json' \
-d '{"invites": ["discord.gg/abc", "discord.gg/def"]}'Log in to create a key.