Skip to content

Developers

Developer API

Build on a server you manage with an API key: members, stats, economy, levels, shop, moderation cases, tickets, giveaways, invites, embeds and game servers.

The developer API lets your own code act on a server you manage: pay out coins and XP from a game, read member profiles and activity, sync the shop, keep custom commands in a repo, pull the moderation log, tickets, giveaways and invites into your tools, post embeds from the builder, and keep a game server listing live. 37 endpoints, every one of them below.

No key needed: the public API

Before you get a key at all: a listed server's levels, bumps, economy, shop, custom commands, active giveaways and 90 days of join/leave history are readable by anyone, for any server in the directory, with no key and no account. So are the platform and per-server leaderboards, and a community's own website feed once its owner turns it on by talking to the bot. See Wire your website for the site feed walkthrough, and /widgets for copy-paste embeds built on this same API, with step-by-step setup in Game servers and widgets.

A listed server's public data

No key. Any server that is listed in the directory, approved, and not NSFW. An unlisted, unapproved or NSFW server answers 404, the same 404 as a guild id that does not exist, so this surface never confirms a server exists by its error shape alone. Rate limited per IP.

GET/api/espresso/servers/{server}/levelsno key

The server's level board, highest XP first.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server": { "id", "name", "icon", "slug" }, "items": [{ "rank", "id", "name", "avatar_url", "level", "xp" }], "page", "limit", "total" }
GET/api/espresso/servers/{server}/bumpsno key

Who bumped the server the most.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server", "items": [{ "rank", "id", "name", "avatar_url", "bumps" }], "page", "limit", "total" }
GET/api/espresso/servers/{server}/economyno key

The server's coin leaderboard.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server", "items": [{ "rank", "id", "name", "avatar_url", "coins" }], "page", "limit", "total" }
GET/api/espresso/servers/{server}/shopno key

The shop's catalogue: what is for sale, never who bought it. No purchaser or inventory row is ever read to answer this.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server", "items": [{ "id", "name", "description", "price", "role_reward", "stock" }], "page", "limit", "total" }
GET/api/espresso/servers/{server}/commandsno key

The server's custom commands: the trigger and a 200 character preview of the response.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server", "items": [{ "name", "trigger", "response_preview" }], "page", "limit", "total" }
GET/api/espresso/servers/{server}/giveawaysno key

Active giveaways with an entry count, never the entrant list. Looking-for-group posts are deliberately not published anywhere on this API: an open LFG post is a member's activity right now, not a standing fact about the server, and nobody who posted one agreed to that.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server", "items": [{ "id", "prize", "ends_at", "entry_count" }], "page", "limit", "total" }
GET/api/espresso/servers/{server}/members/historyno key

Joins and leaves per day for the last 90 days, aggregated. No per-member row is ever returned.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server", "items": [{ "day", "joins", "leaves" }], "page", "limit", "total" }
GET/api/espresso/servers/{server}/eventsno key

The server's upcoming Discord scheduled events, soonest first. Discord already shows these to anyone in the server, so this publishes nothing new: never a creator id or an interested-member list, only the public count.

Query: limit (1 to 100, default 25), page (0-indexed, default 0)

Returns

{ "server", "items": [{ "id", "name", "description", "starts_at", "ends_at", "location", "cover", "interested", "url" }], "page", "limit", "total" }

Leaderboards

No key. The same boards the site's /leaderboards pages and the bot's own leaderboard cards read, platform-wide or scoped to one listed server. Base URL is https://api.dispresso.co/v1 for this group, not /api/espresso. 18+ servers are never on these boards for a keyless caller. include_nsfw=1 only asks for them and is honoured just for the signed-in adult who turned adult content on, through the site itself, so adding it to a request from your own code changes nothing.

GET/v1/public/leaderboardsno key

One platform-wide board: messages, voice, invites, bumps, levels, coins, or any of the global_* boards (the zoo included).

Query: kind, page, viewer_id, per_page (10 or 50), q, include_nsfw

Returns

{ "guild", "kind", "kinds", "page", "per_page", "query", "total_pages", "total_rows", "rows": [{ "rank", "user_id", "name", "avatar_url", "value" }], "viewer" }
GET/v1/public/servers/{server}/leaderboardsno key

The same board, scoped to one listed server, plus that server's own placement on the six server-wide boards.

Query: kind, page, viewer_id, per_page, q, include_nsfw

Returns

{ "guild", "kind", "kinds", "page", "per_page", "query", "total_pages", "total_rows", "rows", "placements", "viewer" }
GET/v1/public/leaderboards/serversno key

Every server whose board is public, so a caller can list or search across them.

Query: q, limit, include_nsfw

Returns

{ "servers": [{ "id", "name", "slug", "icon_url", "member_count" }] }
GET/v1/public/leaderboards/servers/boardno key

One server-scoped board (most active, largest, most shots, most bumped, largest economy, growing), full and paginated.

Query: kind, page, per_page, q, include_nsfw

Returns

{ "kind", "kinds", "page", "per_page", "query", "total_pages", "total_rows", "rows": [{ "rank", "guild_id", "slug", "name", "icon_url", "member_count", "nsfw", "listed", "value" }] }
GET/v1/public/leaderboards/overviewno key

The top 5 of every platform-wide board and every server board, in one call.

Query: viewer_id, guild_id, include_nsfw

Returns

{ "userBoards": [{ "kind", "label", "rows", "viewer" }], "serverBoards": [{ "kind", "label", "rows", "viewer" }] }

Community site feed

No key. What a community's own website can pull for its Discord: the message of the day, the latest announcements, upcoming scheduled events, and who is on staff. A server turns this on by talking to the bot; see /docs/wire-your-website. Answers 404 for an unlisted server or one that has turned its feed off, and is cached about a minute so a busy website never turns into a gateway poll.

GET/api/espresso/servers/{server}/site-feedno key

MOTD, announcements, scheduled events and staff for one server's website.

Returns

{ "guild": { "id", "name", "icon", "banner", "member_count" }, "announcements_channel", "motd", "announcements", "events", "staff": { "roles", "members" }, "fetched_at" }

Game servers

No key. The catalog of games Dispresso tracks game servers for, and any game server listing that is listed and approved. An unlisted or pending one answers 404. Player counts and status come from each server's own query protocol (A2S, Epic Online Services, the Minecraft/FiveM/Roblox status APIs), not from Discord.

GET/api/espresso/game-servers/gamesno key

The games this catalog covers, for building a picker.

Returns

{ "games": [{ "id", "name", "platform", "blurb", "query", "safe" }] }
GET/api/espresso/game-serversno key

Listed, approved servers for one game, highest rank first by default.

Query: game_id (required), q, status, sort, region, limit (1 to 200, default 40), offset

Returns

{ "game_id", "total", "limit", "offset", "sort", "region", "servers": [{ "id", "platform", "game_id", "address", "port", "name", "map", "players", "max_players", "rank_score", "last_query_at", "status", "metadata", "claimed_guild_id", "listing_status", ... }] }
GET/api/espresso/game-servers/{id}no key

One listed, approved server by its id.

Returns

{ "server": { same shape as the servers array above } }
GET/api/espresso/game-servers/{id}/seeding-boardno key

Top seeders and whether the server is asking for players right now. Only for a server with the seeding suite on and its public board enabled; anything else answers 404. Players are shown by name, never by Steam ID.

Query: days (7, 30 or 90, default 30)

Returns

{ "server": { "id", "game_id", "name", "map", "players", "max_players" }, "seeding": { "open", "need", "low", "high" }, "reward": { "kind", "after_minutes", "hours" } | null, "days", "top": [{ "rank", "name", "seconds", "time", "windows" }] }

Get a key

Everything from here needs a key: it reaches a server your account manages, and can write as well as read.

Keys are made on the developer dashboard. Pick the scopes the key needs and a rate limit per minute. A key acts as its owner and can only reach servers that owner manages on the dashboard, so a leaked key is worth exactly what the owner's own login is worth and nothing more. Revoke it there the moment you no longer need it.

curl https://api.dispresso.co/v1/dev/key \
  -H "Authorization: Bearer esp_your_key_here"

Scopes

A call without the scope it needs answers 403 and names the scope.

  • guilds:read the servers the key can reach, a server's summary, roles, channels and emojis
  • stats:read daily message, voice, join and leave counts
  • members:read member search, profiles and per member activity
  • economy:read balances, leaderboards, the coin ledger, purchases and inventories
  • economy:write credit and debit server wallets (metered)
  • levels:write grant server XP through the leveling ladder (metered)
  • shop:read read shop items
  • shop:write add, replace and remove shop items
  • commands:read read custom commands
  • commands:write replace custom commands
  • moderation:read warns, timeouts, kicks, bans and the rest of the case log
  • tickets:read open and closed tickets
  • giveaways:read giveaways, their entries and drawn winners
  • invites:read who invited whom and the invites leaderboard
  • lfg:read looking for group posts made from the server
  • forms:read the forms a server keeps and every submission sent through their buttons
  • embeds:read saved embeds and webhooks from the embed builder
  • embeds:write post an embed to a channel or webhook (metered)
  • game_servers:read read your game server listings
  • game_servers:report register listings and report live status (metered)

Limits and pricing

Every key has its own rate limit per minute (120 by default, up to 5,000); over it you get 429. Reads are free. Metered calls (wallet adjustments, XP grants, embed sends and game server reports) come with 10,000 free calls a month per account, then one cent per 100 calls from your developer wallet. A call the wallet cannot cover answers 402 and does nothing.

Ids are strings

Every Discord id crosses as a string, in and out. A JSON number past 2^53 rounds, and the first live wallet call reached the bot with a guild id off by 104 because a client sent it as a number. Send "user_id": "651502739653656586", never "user_id": 651502739653656586.

Endpoints

All paths are under https://api.dispresso.co/v1. Timestamps are ISO 8601 in UTC; days are YYYY-MM-DD. Roles, channels, emojis and member counts come from the bot's latest snapshot of the server; refreshed_at says how old it is. Lists take limit and, where noted, offset; nothing returns more than 200 rows per call.

Keys and servers

Check a key, then find the servers it can reach and what each one looks like right now.

GET/dev/key

Check a key: who owns it and which scopes it carries.

Scope any

Returns

{ "owner_user_id", "key_id", "scopes": [...] }
GET/dev/guilds

Every server the key's owner manages on the dashboard.

Scope guilds:read

Returns

{ "guilds": [{ "id", "name", "owner" }] }
GET/dev/guilds/{guild_id}

One server's summary: name, icon, owner, member and online counts from the bot's latest snapshot, lifetime totals from the members the bot tracks, and the last 7 and 30 days of activity.

Scope guilds:read

Returns

{ "name", "owner_id", "icon_url", "member_count", "human_member_count", "online_count", "snapshot_refreshed_at", "totals": { "tracked_members", "messages", "voice_seconds", "xp", "wallet_coins" }, "last_7_days": { "messages", "voice_seconds", "joins", "leaves" }, "last_30_days": { ... } }
GET/dev/guilds/{guild_id}/activity

One row per day of messages, voice seconds, joins and leaves, oldest first.

Scope stats:read Query: days (1 to 365, default 30)

Returns

{ "days", "since", "entries": [{ "day": "2026-09-21", "messages", "voice_seconds", "joins", "leaves" }] }
GET/dev/guilds/{guild_id}/roles

The server's roles from the bot's snapshot.

Scope guilds:read

Returns

{ "roles": [{ "id", "name", "color" }], "refreshed_at" }
GET/dev/guilds/{guild_id}/channels

The server's channels in display order, with the category, who is in voice right now and messages in the last hour where the bot sampled them.

Scope guilds:read

Returns

{ "channels": [{ "id", "name", "type", "category_id", "position", "voice_members_now", "messages_1h" }], "refreshed_at" }
GET/dev/guilds/{guild_id}/emojis

The server's custom emojis with image URLs.

Scope guilds:read

Returns

{ "emojis": [{ "id", "name", "animated", "url" }], "refreshed_at" }

Members

The people in a server as the bot knows them: standing, counters and activity.

GET/dev/guilds/{guild_id}/members

Search or page through the members the bot has a record for, highest XP first. q is a user id for an exact match or part of a name.

Scope members:read Query: q, limit (1 to 200, default 50), offset

Returns

{ "members": [{ "user_id", "name", "is_bot", "xp", "level", "wallet", "messages_sent", "voice_seconds", "last_message_at" }] }
GET/dev/guilds/{guild_id}/members/{user_id}

One member's full profile in this server: XP, level, rank, wallet and Bank, messages, voice, warnings, invites, bumps, daily streak, when the bot first saw them and how many times they joined and left.

Scope members:read

Returns

{ "user_id", "name", "is_bot", "xp", "level", "rank_by_xp", "wallet", "bank", "messages_sent", "voice_seconds", "warnings_count", "invites_count", "bumps_count", "daily_streak", "is_jailed", "last_message_at", "first_seen_at", "join_count", "leave_count", "currency": { "name", "emoji" } }
GET/dev/guilds/{guild_id}/members/{user_id}/activity

One member's messages and voice seconds per day.

Scope members:read Query: days (1 to 365, default 30)

Returns

{ "user_id", "days", "since", "entries": [{ "day", "messages", "voice_seconds" }] }

Economy and levels

Read balances and history, pay out coins, and grant XP. Every write goes through the bot, so the ledger, the caps and the level roles stay right.

GET/dev/guilds/{guild_id}/members/{user_id}/balance

One member's server wallet, Bank, XP, level and message count.

Scope economy:read

Returns

{ "wallet", "bank", "xp", "level", "messages_sent", "currency": { "name", "emoji" } }
POST/dev/guilds/{guild_id}/economy/adjust

Credit (positive) or debit (negative) a member's server wallet. Goes through the bot's ledger, balance cap and economy switch, and shows in their history as dev_api:<reason>.

Scope economy:write (metered)

Body

{ "user_id": "123", "amount": 500, "reason": "quest reward" }

Returns

{ "ok": true, "moved": 500, "balance": { "wallet", "bank", ... } } or { "ok": false, "reason": "insufficient_funds" | "economy_disabled" | "limit_exceeded", "detail" }
GET/dev/guilds/{guild_id}/leaderboard

The server's leaderboard by wallet coins, XP or messages. Up to 100 rows.

Scope economy:read Query: by (coins, xp or messages), limit (1 to 100, default 25)

Returns

{ "by", "entries": [{ "rank", "user_id", "value", "level"? }] }
GET/dev/guilds/{guild_id}/members/{user_id}/ledger

One member's coin history in this server, newest first: every mint, burn, purchase, payment and your own dev_api adjustments.

Scope economy:read Query: limit (1 to 200, default 50)

Returns

{ "entries": [{ "id", "layer", "amount", "balance_after", "reason", "reference_type", "reference_id", "metadata", "created_at" }] }
POST/dev/guilds/{guild_id}/levels/grant

Grant server XP to a member. It joins the same buffer a message's XP goes through, so the level, the level roles and the level up announcement all follow on the next flush (within a minute). Positive amounts only.

Scope levels:write (metered)

Body

{ "user_id": "123", "amount": 250, "reason": "boss kill" }

Returns

{ "ok": true, "granted": 250, "applies", "standing": { "xp", "level" } } or { "ok": false, "reason": "leveling_disabled", "detail" }

Shop

Keep a shop in sync from your own tooling and see what people bought.

GET/dev/guilds/{guild_id}/shop/items

Every item in the server's shop.

Scope shop:read

Returns

{ "items": [{ "key", "label", "price_server", "stock", "extra", "category", ... }] }
POST/dev/guilds/{guild_id}/shop/items

Add or replace one item by key. reward "ticket" makes a hand-delivered item: buying it opens a ticket and pings the owner.

Scope shop:write

Body

{ "key": "nitro", "label": "Discord Nitro", "price_server": 5000, "reward": "ticket", "consumable": true }

Returns

{ "ok": true, "key": "nitro" }
DELETE/dev/guilds/{guild_id}/shop/items/{key}

Remove one item.

Scope shop:write

Returns

{ "ok": true }
GET/dev/guilds/{guild_id}/shop/purchases

Shop purchases from the coin ledger, newest first: who paid, how much, and their balance after. The item itself is on the buyer's inventory.

Scope economy:read Query: limit (1 to 200, default 50), offset

Returns

{ "purchases": [{ "id", "user_id", "item_key", "paid", "balance_after", "metadata", "created_at" }] }
GET/dev/guilds/{guild_id}/members/{user_id}/inventory

What one member holds from the shop.

Scope economy:read

Returns

{ "items": [{ "key", "label", "category", "quantity", "updated_at" }] }

Custom commands

Keep a server's custom commands in a repo.

GET/dev/guilds/{guild_id}/custom-commands

The server's custom commands.

Scope commands:read

Returns

{ "commands": [{ "name", "response", "embed" }] }
PUT/dev/guilds/{guild_id}/custom-commands

Replace the whole list. !name and "dispresso name" both answer with the response; {user}, {server}, {channel} fill in.

Scope commands:write

Body

{ "commands": [{ "name": "hype", "response": "LETS GO {user}" }] }

Returns

{ "ok": true, "count": 1 }

Moderation, tickets, giveaways and invites

The records a server keeps, read straight from the tables the bot writes.

GET/dev/guilds/{guild_id}/moderation/cases

The case log, newest first: warns, timeouts, kicks, bans, jails and purges, with who did it and why. Filter to one member, one action, or only cases still active.

Scope moderation:read Query: user_id, action (warn, kick, ban, unban, timeout, untimeout, jail, unjail, purge), active=true, limit (1 to 200, default 50), offset

Returns

{ "cases": [{ "id", "user_id", "moderator_id", "action", "reason", "duration_seconds", "expires_at", "active", "created_at" }] }
GET/dev/guilds/{guild_id}/tickets

Tickets, open ones first, with who opened and claimed them and the transcript link once closed.

Scope tickets:read Query: status (open or closed), limit (1 to 200, default 50), offset

Returns

{ "tickets": [{ "id", "number", "channel_id", "opener_id", "type_key", "claimed_by", "closed", "closed_by", "closed_at", "transcript_url", "created_at" }] }
GET/dev/guilds/{guild_id}/giveaways

Classic and wheel giveaways, running ones first, with the entry ids and the drawn winners.

Scope giveaways:read Query: status (active or ended), limit (1 to 100, default 25)

Returns

{ "giveaways": [{ "kind", "id", "channel_id", "message_id", "host_id", "prize", "winners", "ends_at", "ended", "required_role_id", "entry_count", "entry_ids", "winner_ids", "created_at" }] }
GET/dev/guilds/{guild_id}/invites/leaderboard

Who brought the most people: how many they invited, how many are still here, and how many earned the invite reward.

Scope invites:read Query: limit (1 to 100, default 25)

Returns

{ "entries": [{ "rank", "user_id", "name", "brought", "still_here", "rewarded" }] }
GET/dev/guilds/{guild_id}/members/{user_id}/invites

Everyone one member invited, with the code they used and whether they are still in the server.

Scope invites:read Query: limit (1 to 200, default 50)

Returns

{ "brought", "still_here", "invited": [{ "user_id", "invite_code", "source", "first_joined_at", "left_at", "join_count", "reward_state" }] }
GET/dev/guilds/{guild_id}/lfg

Looking for group posts made from this server, open ones by default.

Scope lfg:read Query: status=all to include closed and expired, limit (1 to 100, default 25)

Returns

{ "requests": [{ "id", "author_id", "game_key", "platform", "wanted", "note", "interested", "open", "created_at", "expires_at", "closed_at" }] }

Forms

The sticky-button forms a server keeps (an outreach log, an application, a report) and the answers members sent through them. Every submission carries who sent it and when, so a sheet or a bot of your own can track staff activity the way the dashboard calendar does.

GET/dev/guilds/{guild_id}/forms

Every form in the server with its questions, the channel its button sits in, the roles allowed to press it and how many submissions it has.

Scope forms:read

Returns

{ "forms": [{ "id", "key", "title", "description", "channel_id", "button_label", "allowed_role_ids", "questions": [{ "key", "label", "style", "required", "placeholder" }], "log_channel_id", "enabled", "submissions", "created_at" }] }
GET/dev/guilds/{guild_id}/forms/{key}/submissions

The submissions of one form by its key, newest first, with the member who sent each and their answers in question order.

Scope forms:read Query: user_id, since (ISO date), limit (1 to 200, default 50), offset

Returns

{ "form_key", "submissions": [{ "id", "user_id", "username", "display_name", "answers": [{ "key", "label", "value" }], "submitted_at" }] }

Embeds

The embed builder from your own code: read what the server saved in the dashboard studio and post it.

GET/dev/guilds/{guild_id}/embeds

Every saved embed, newest first, with the full builder payload.

Scope embeds:read

Returns

{ "embeds": [{ "id", "name", "payload", "created_by", "updated_by", "created_at", "updated_at" }] }
GET/dev/guilds/{guild_id}/embeds/{embed_id}

One saved embed.

Scope embeds:read

Returns

{ "embed": { "id", "name", "payload", ... } }
GET/dev/guilds/{guild_id}/embeds/webhooks

The webhooks the server saved in the builder, by id and label. The URL never leaves the server.

Scope embeds:read

Returns

{ "webhooks": [{ "id", "label", "created_at" }] }
POST/dev/guilds/{guild_id}/embeds/send

Post a saved embed (embed_id) or a payload in the builder's own shape to a channel through the bot, or to a saved webhook. Same sender as the dashboard's Send button, so the footer and webhook branding rules of the server's tier apply.

Scope embeds:write (metered)

Body

{ "embed_id": "42", "channel_id": "123" } or { "payload": { "content": "hi", "embed": { "title": "..." } }, "webhook_id": "7" }

Returns

{ "ok": true, "message_id", "message_url", "via": "bot" | "webhook" }

Game servers

Register your own game server listings and keep them live from your tooling.

POST/dev/game-servers

Register a game server listing from your own tooling.

Scope game_servers:report (metered)

Body

{ "game_name": "Squad", "name": "EU #1", "address": "1.2.3.4", "port": 27015 }

Returns

{ "ok": true, "server_id", "server" }
POST/dev/game-servers/{id}/report

Report live players, map and status for a listing you registered.

Scope game_servers:report (metered)

Body

{ "player_count": 40, "max_players": 100, "map": "Yehorivka" }

Returns

{ "ok": true, "usage" }
GET/dev/game-servers/{id}

Read a listing you registered.

Scope game_servers:read

Returns

{ "server" }

Worked example: a quest bot that pays coins

Your game decides a player finished a quest. Your server calls the API with the player's Discord id and the reward. The bot mints the coins through its own ledger, so the wallet cap and the economy switch apply, and the member sees the line in their history as dev_api:daily quest.

curl -X POST https://api.dispresso.co/v1/dev/guilds/1516834065515286598/economy/adjust \
  -H "Authorization: Bearer esp_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "user_id": "651502739653656586", "amount": 250, "reason": "daily quest" }'

Then read their profile back to show a rank and a level in your own UI. The response is the same shape every time, so it is safe to build on.

curl "https://api.dispresso.co/v1/dev/guilds/1516834065515286598/members/651502739653656586" \
  -H "Authorization: Bearer esp_your_key_here"
{
  "guild_id": "1516834065515286598",
  "user_id": "651502739653656586",
  "name": "gnikss",
  "is_bot": false,
  "xp": 48210,
  "level": 23,
  "rank_by_xp": 4,
  "wallet": 1250,
  "bank": 9800,
  "messages_sent": 6120,
  "voice_seconds": 88400,
  "warnings_count": 0,
  "invites_count": 3,
  "bumps_count": 12,
  "daily_streak": 9,
  "is_jailed": false,
  "last_message_at": "2026-09-21T01:12:40.000Z",
  "first_seen_at": "2026-02-03T18:04:11.000Z",
  "join_count": 1,
  "leave_count": 0,
  "currency": { "name": "beans", "emoji": "" }
}

Worked example: post an embed you built in the studio

Design the message once in the dashboard's embed builder, save it, and post it from your code whenever your system decides to. The send goes through the same function as the dashboard's Send button, so the footer and webhook branding rules of the server's tier apply.

curl -X POST https://api.dispresso.co/v1/dev/guilds/1516834065515286598/embeds/send \
  -H "Authorization: Bearer esp_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "embed_id": "42", "channel_id": "1516834066001797283" }'

Errors

  • 401: no key, or a revoked one.
  • 403: the key is missing a scope, or its owner does not manage that server.
  • 402: the developer wallet cannot cover a metered call.
  • 404: no such member, item or embed in that server, or the bot has not seen the server yet.
  • 429: over the key's rate limit.
  • 503: the bot is unreachable; nothing changed, try again.

Where to ask

The public reference at /developers/api is this same list. Missing something? Ask in the support server.