Dispatch.IO Logo
Public pages

Team, legal pages and API

The Team page, the status of the legal pages, the contact links and the website's public API with its interactive documentation.

Updated on October 15, 2026#api

Search the documentation

Type a keyword: a command, a module, a dashboard page…

Besides the leaderboards, the website has a few public pages you can open without signing in: the team page, the legal pages, some contact links, and an API that lets a developer read some of the bot's data (statistics, levels, bumped servers…).

The first three sections are for everyone. The API sections are for people who want to write a program (another bot, a website) that queries Dispatch.IO™.

The Team page

The people behind Dispatch.IO.

Open it from the top menu: Application › Team (address /team).

Our Team page: a grid of member cards with a blue banner, avatar, name and badges
The Our Team page

The page opens with the title Our Team, then shows one card per active team member, creators first, then the other members by the date they joined.

  1. The crown in the top-right corner marks a Creator.
  2. The name: the display name chosen by the team (or the Discord username), then @username.
  3. The badges: the team role (for example "Developer" or "Support"), plus Creator and Moderator where relevant.
  4. Member since: the date the person joined the team (dates are written in French format, for example "12 mars 2024").

Cards have no links. When nobody has been added yet, the page shows "No team members yet".

What exists today and what is still being written.

The legal page links are in the footer (Quick Links column) and, once signed in, in your profile menu (Learn more).

PageAddressCurrent status
Privacy Policy/legal/privacyBeing written
Terms of Use/legal/cguBeing written
Terms of Sale/legal/cgvBeing written
FAQ/faqBeing written

For now, each of these pages shows its title, a short summary, then the message "This page is a work in progress by IO. Come back soon!". The legal text has not been published yet.

Terms of Use page: title, summary and a box saying the page is under construction
The legal pages are still being written
Tip

Where to find answers in the meantime

  • The website's home page has a six-question FAQ (is it free, adding the bot, no-code setup, flames and freezes, card customisation, 14-day trial): scroll to the bottom or open /#faq.
  • This documentation has its own Website FAQ.
  • For a question about your data or a purchase, contact the team (see the next section).

Reaching the team and the support server.

NeedWhere
Join the Discord support serverThe Support button (Discord icon) in the top menu, the Get help link in your profile menu, or the short address /discord, which redirects to the official server's invite.
Email the teamThe email address in the Contact column of the footer.
Add the botThe Add to Discord button on the home page and in the footer.

Note

The Commands link in the Application menu and in the footer currently leads to a "page not found" screen. The command list lives in this documentation: All commands.

The public API: the basics

Address, response format, IDs, pagination and request limit.

The API is a set of addresses that return data as JSON. You can use it, for example, to show the bot's statistics on another website, or to check from another bot whether a user is on the Dispatch.IO blacklist.

Address and method

  • Every address starts with the website's address followed by /api/v1/ (for example /api/v1/stats).
  • Only the GET method (read) exists. Any other method gets code 405 and {"message":"Method Not Allowed"}.
  • There is no API key: public addresses can be called without authentication. The two ticket addresses use your website session (cookie), so they only answer in a browser where you are signed in.

Response format

CaseCodeResponse body
One item found200{ "data": { … } }
A paginated list200{ "data": [ … ], "pagination": { … } }
Invalid parameter400{ "error": [ { "path": "userId", "message": "ID must contain only digits" } ] }
Nothing found404{ "message": "…" } (the text depends on the address)

Discord IDs

Server and user IDs are made of digits only, 17 to 19 digits long (for example 100000000000000001). Otherwise the response is a 400 error: "ID must be at least 17 characters", "ID must be at most 19 characters" or "ID must contain only digits".

Pagination

Lists accept these parameters in the address (after ?):

ParameterValuesDefault
pageWhole number, 1 or more1
itemsPerPageFrom 5 to 1005
orderasc (ascending) or desc (descending)desc
orderByName of the field to sort byupdatedAt

The pagination object in the response contains page, itemsPerPage, total (total number of items), totalPages, hasNextPage and hasPreviousPage.

Request limit

Each IP address may make 100 requests per minute across all of the website's /api addresses (Discord sign-in has its own limit). The minute starts with your first request.

Requests in the minuteEffect
80 to 89Each response is slowed down by 0.3 seconds.
90 to 99Each response is slowed down by 1 second.
100 and moreCode 429 and {"error":"TooManyRequests","message":"You have exceeded the maximum number of allowed requests. Please try again later."}

Warning

The 429 response doesn't say when to try again: wait until the minute is over. The website itself also uses these addresses (image previews, ticket lists, live updates): if you test the API from the same network, those requests count too.

Some responses are kept in memory for a few minutes: data that has just changed may show up with a short delay.

The API addresses

Each address, its parameters and its response.

AddressAccessReturns
GET /api/v1/healthPublicIs the website answering?
GET /api/v1/health/fullPublicThe state of the database and the cache
GET /api/v1/statsPublicThe bot's global statistics
GET /api/v1/bumpsPublicThe latest bumped servers
GET /api/v1/tagsPublicThe Discord server tags known to the bot
GET /api/v1/blacklist/{userId}PublicA user's blacklist record
GET /api/v1/level/{guildId}/{userId}PublicA member's level on a server
GET /api/v1/user/ticketsSigned inYour tickets, across all servers
GET /api/v1/guild/{guildId}/ticketsSigned in and managing the serverA server's tickets

GET /api/v1/health

Checks that the website is answering. No parameters.

json
{ "isoDate": "2026-10-15T18:54:03.000Z", "status": "ok", "timestamp": 1792090443000 }

GET /api/v1/health/full

Like health, plus the state of each service: services.db (database) and services.cache (Redis cache) are up or down.

json
{ "isoDate": "2026-10-15T18:54:03.000Z", "services": { "db": "up", "cache": "up" }, "status": "ok", "timestamp": 1792090443000 }

Warning

For now, status is always ok and the code stays 200, even when a service is down. To monitor the website, read the values in services.

GET /api/v1/stats

The bot figures shown on the home page. No parameters.

json
{ "data": { "commands": 142, "servers": 1240, "users": 186500, "version": "1.0.0" } }

commands = number of bot commands, servers = number of servers, users = total number of members across those servers, version = bot version. When no statistics exist yet: 404 {"message":"No stats found."}.

GET /api/v1/bumps

The paginated list of servers that turned bump on (see Bump). Accepts the pagination parameters; to get the most recently bumped servers, use ?orderBy=lastBump&order=desc.

json
{
  "data": [
    {
      "bumpCount": 87,
      "guild": { "iconUrl": null, "id": "100000000000000001", "name": "Café des Devs" },
      "inviteCode": "CafeDevs00",
      "lastBump": "2026-10-15T17:40:00.000Z"
    }
  ],
  "pagination": { "hasNextPage": true, "hasPreviousPage": false, "itemsPerPage": 5, "page": 1, "total": 12, "totalPages": 3 }
}

bumpCount = number of bumps, inviteCode = the server's Discord invite code, lastBump = date of the last bump, iconUrl = the server icon or null. Empty list: 404 {"message":"No bumps found."}.

GET /api/v1/tags

The paginated list of Discord server tags (the short tag a member can display next to their username) known to the bot. Each item contains tag, guildId (the tag's server), badge (the tag badge or null) and user_count (how many members wear the tag). Empty list: 404 {"message":"No tags found."}.

GET /api/v1/blacklist/{userId}

Tells you whether a user is on the Dispatch.IO global blacklist. Replace {userId} with the user's Discord ID.

  • User on the list: 200 with data, which includes user and admin (each with id, username, avatarUrl), reason, canBeUnflagged (whether they can be removed from the list), createdAt and updatedAt.
  • User not on the list: 404 {"message":"User not flagged"}.

GET /api/v1/level/{guildId}/{userId}

A member's level on a server. Example: GET /api/v1/level/100000000000000001/100000000000001001.

json
{
  "data": {
    "createdAt": "2026-03-02T18:21:44.000Z",
    "guildId": "100000000000000001",
    "level": 12,
    "updatedAt": "2026-10-14T20:05:10.000Z",
    "user": { "avatarUrl": "https://cdn.discordapp.com/embed/avatars/1.png", "id": "100000000000001001", "username": "alex" },
    "xpMessage": 12100,
    "xpVoice": 3000
  }
}

Member with no XP on that server: 404 {"message":"This user don't have a valid level."}.

GET /api/v1/user/tickets

The tickets you created or are assigned to, across all your servers. This is the address used by the tickets page of your personal space. You must be signed in to the website; otherwise: 401 {"message":"Not authenticated"}.

ParameterValuesDefault
Paginationpage, itemsPerPage, order (see above)
orderBycreatedAt, status, ticketOption.name, userId, archive.createdAtcreatedAt
filterall, open, closed, archivedall
creatorUserIdDiscord ID of the creator
responsibleUserIdDiscord ID of an assignee
searchText searched in the reason, the ticket ID or usernames

Each ticket contains id, channelId, status (OPEN, CLOSED or DELETED), reason, ticketOptionName, createdAt, archivedAt, creator, responsibles, and the server (guildId, guildName, guildIcon).

GET /api/v1/guild/{guildId}/tickets

A server's tickets, for the dashboard's tickets page (see Tickets). Same parameters as the previous address. You must be signed in and be the server owner or have the Administrator or Manage Server permission on Discord.

  • Not signed in: 401 {"message":"Not authenticated"}.
  • No rights on this server: 403 {"message":"Forbidden"}.
  • The creatorUserId and responsibleUserId filters only apply for the owner or an Administrator.

Note

Two more addresses exist but are only used by the website itself and are not listed in /api-docs: /api/v1/image-proxy (shows ticket images, for signed-in users only) and /api/v1/landing-card (the cards on the home page).

Trying the API with /api-docs

The interactive Swagger documentation.

The /api-docs page presents the API interactively. Open it from the top menu: Documentation › API Documentation (it opens in a new tab).

API Documentation page: blue header with the Home button, then the list of API address groups in Swagger
The interactive API documentation
  1. Home: goes back to the website's home page. This page doesn't have the usual menu and footer.
  2. The groups: Blacklist, Bump, Health, Level, Stats, Tag and Ticket. Click an address to see its description, parameters and possible responses.
  3. Schemas (at the bottom): the exact shape of the returned objects.

To try an address:

  1. Click the address, for example GET /v1/level/{guildId}/{userId}.
  2. Click Try it out.
  3. Fill in the parameters (here the server ID and the member ID).
  4. Click Execute. Swagger sends a real request and shows the equivalent curl command, the URL that was called, the response code and body.
The GET /v1/level/{guildId}/{userId} address expanded in Swagger after Execute: parameters filled in and a 200 response with the member's level
Trying an address with Try it out then Execute

Tip

Your tries count towards the 100 requests per minute limit. For the ticket addresses, sign in to the website in the same browser first.

Updated on October 15, 2026