disdex
discord server index

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=3

Base 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. total may be null when an exact count would be expensive — always paginate off has_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 with q rather than paging — it's faster for both of us.

Endpoints

GET/api/v1/servers

List & 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
}
GET/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"
}
GET/api/v1/users

List & 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
}
GET/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"
}
GET/api/v1/stats

Index 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"
}
POST/api/v1/invites

Submit 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 }
  ]
}
GET/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.