Rotas
Todas as rotas HTTP que um bot pode usar, agrupadas por assunto. Os caminhos são relativos a https://zynko.org/api, e todas pedem o cabeçalho Authorization (veja Autenticação), exceto onde está escrito sem autenticação.
- Permissão é o que a conta precisa ter. Num canal, conta a permissão no canal, depois das permissões de canal. Administradores e o dono passam em todas.
- Rotas marcadas só pessoas respondem
403(ou400, onde indicado) para bots. - Os tipos de retorno estão em Objetos.
- Em corpos de
PATCH, campo ausente = não muda. Onde está escrito "nullapaga", mandarnulllimpa o valor.
Usuários
Ver a própria conta
GET /users/@me
Devolve o seu PublicUser.
Editar o próprio perfil
PATCH /users/@me · limite: 20 por minuto
| campo | tipo | descrição |
|---|---|---|
display_name | string | Nome de exibição, 1 a 32 caracteres. |
avatar_id | id? | Imagem enviada em POST /media. null apaga. |
avatar_url | string | Um GIF do KLIPY (https://static.klipy.com/... terminando em .gif ou .webp), no lugar de um upload. |
banner_id | id? | Como avatar_id, para o banner. |
banner_url | string | Como avatar_url, para o banner. |
bio | string? | "Sobre mim", até 190 caracteres. null ou "" apaga. |
accent | string? | Cor "#rrggbb". null apaga. |
Devolve o Profile completo. Quem se relaciona com você recebe USER_UPDATE.
Ver um perfil
GET /users/{user_id}/profile
user_id pode ser @me. Só funciona para contas que você "conhece": que estão num servidor seu, numa DM com você, ou são suas amigas. Para as outras, 404. Devolve Profile.
Abrir uma DM
POST /users/@me/channels
| campo | tipo | descrição |
|---|---|---|
recipient_id | id | Com quem conversar. |
Devolve o Channel da DM (tipo 1), criando se ainda não existe. Para criar, a outra conta precisa estar num servidor em comum com você (ou ser sua amiga), e nenhuma das duas pode ter bloqueado a outra. Se a DM é nova, as duas contas recebem CHANNEL_CREATE. Depois, mande mensagens com POST /channels/{id}/messages.
Relações
| rota | o que faz |
|---|---|
GET /users/@me/relationships | Lista suas Relationship. |
PUT /users/@me/relationships/{user_id} | Com { "type": 2 }, bloqueia a conta. Sem corpo (ou outro type), pede amizade: bots recebem 400. |
DELETE /users/@me/relationships/{user_id} | Desbloqueia (ou desfaz amizade/pedido). |
POST /users/@me/relationships | Pede amizade por username. Bots recebem 400. |
As duas pontas recebem RELATIONSHIP_ADD / RELATIONSHIP_REMOVE.
Servidores
Criar um servidor
POST /guilds · só pessoas
Editar o servidor
PATCH /guilds/{guild_id} · permissão: Gerenciar o servidor (MANAGE_GUILD)
| campo | tipo | descrição |
|---|---|---|
name | string | 2 a 100 caracteres. |
icon_id | id? | Imagem de POST /media. null apaga. |
icon_url | string | Um GIF do KLIPY no lugar de um upload. |
Devolve o Guild. Todos recebem GUILD_UPDATE.
Apagar o servidor
DELETE /guilds/{guild_id} · só o dono (um bot nunca é dono)
Membros
Listar membros
GET /guilds/{guild_id}/members · qualquer membro
Devolve Member[] em ordem de entrada. Não há paginação. Os mesmos membros já vêm em READY / GUILD_CREATE.
Editar um membro
PATCH /guilds/{guild_id}/members/{user_id}
user_id pode ser @me.
| campo | tipo | descrição | permissão |
|---|---|---|---|
nick | string | Apelido, até 32. "" apaga. | O próprio apelido: nenhuma. O de outro: Mudar apelidos (MANAGE_NICKNAMES) e estar acima da pessoa. |
is_admin | boolean | Torna ADM ou tira. | Só o dono. |
Devolve o Member. Todos recebem GUILD_MEMBER_UPDATE.
"Estar acima" quer dizer: o seu cargo mais alto está acima do cargo mais alto da outra pessoa. ADMs ficam acima de qualquer cargo; só o dono mexe em ADMs. Veja Hierarquia.
Remover um membro (ou sair)
DELETE /guilds/{guild_id}/members/{user_id}
- Com
@me(ou o seu id): você sai do servidor. O dono não pode sair. - Com outro id: expulsa. Permissão: Remover pessoas (
KICK_MEMBERS) e estar acima da pessoa. O dono não pode ser removido.
Devolve { "ok": true }. O servidor recebe GUILD_MEMBER_REMOVE; quem saiu recebe GUILD_DELETE.
Banimentos
| rota | permissão | o que faz |
|---|---|---|
GET /guilds/{guild_id}/bans | Banir pessoas (BAN_MEMBERS) | Lista Ban[], do mais recente. |
PUT /guilds/{guild_id}/bans/{user_id} | Banir pessoas e estar acima da pessoa | Bane: tira do servidor (se estiver) e impede de voltar por convite. Funciona para quem não é membro. Sem corpo. |
DELETE /guilds/{guild_id}/bans/{user_id} | Banir pessoas | Desbane. 404 se não estava banida. |
As três devolvem { "ok": true } (exceto a lista). Ninguém bane o dono nem a si mesmo.
Cargos
Gerenciar cargos pede Gerenciar cargos (MANAGE_ROLES) e só alcança cargos abaixo do seu cargo mais alto. Ninguém dá ou tira uma permissão que não tem.
Criar um cargo
POST /guilds/{guild_id}/roles
| campo | tipo | descrição |
|---|---|---|
name | string | obrigatório. 1 a 32 caracteres. |
color | number? | 0x000000 a 0xFFFFFF. |
permissions | number | Bits; só os que você tem. Padrão 0. |
hoist | boolean | Mostrar separado na lista de membros. Padrão false. |
O cargo novo entra embaixo de todos, logo acima de @everyone (os outros sobem uma posição). Máximo de 100 cargos. Devolve o Role. O servidor recebe GUILD_ROLE_CREATE (e GUILD_ROLE_UPDATE para os que subiram).
Editar um cargo
PATCH /guilds/{guild_id}/roles/{role_id}
| campo | tipo | descrição |
|---|---|---|
name | string | 1 a 32. O nome de @everyone não muda. |
color | number? | null tira a cor. |
permissions | number | Os bits que mudarem precisam ser bits que você tem. |
hoist | boolean | Ignorado em @everyone. |
Para editar @everyone, use o id do servidor como role_id. Devolve o Role.
Reordenar cargos
PATCH /guilds/{guild_id}/roles
| campo | tipo | descrição |
|---|---|---|
order | id[] | Todos os cargos, do mais alto para o mais baixo, sem @everyone. |
Cargos no nível do seu ou acima precisam ficar onde estão. Devolve todos os Role[].
Apagar um cargo
DELETE /guilds/{guild_id}/roles/{role_id}
@everyone não pode ser apagado. As permissões de canal desse cargo vão junto. Devolve { "ok": true }.
Dar ou tirar um cargo
PUT /guilds/{guild_id}/members/{user_id}/roles/{role_id} (dar)DELETE /guilds/{guild_id}/members/{user_id}/roles/{role_id} (tirar)
Sem corpo. Permissão: Gerenciar cargos, com o cargo abaixo do seu. Devolve { "ok": true }; o servidor recebe GUILD_MEMBER_UPDATE, e quem passou a ver (ou deixou de ver) canais recebe CHANNEL_CREATE / CHANNEL_DELETE.
Emojis
| rota | permissão | o que faz |
|---|---|---|
GET /guilds/{guild_id}/emojis | qualquer membro | Lista Emoji[]. |
POST /guilds/{guild_id}/emojis | Gerenciar emojis (MANAGE_EMOJIS) | Cria. Corpo: name (2 a 32 letras, números ou _) e image_id (de POST /media). Máximo 100 por servidor. Devolve o Emoji. |
PATCH /guilds/{guild_id}/emojis/{emoji_id} | Gerenciar emojis | Renomeia. Corpo: name. Devolve o Emoji. |
DELETE /guilds/{guild_id}/emojis/{emoji_id} | Gerenciar emojis | Apaga. { "ok": true }. |
GET /emojis/{emoji_id} | sem autenticação | Redireciona para a imagem. |
Um nome repetido no mesmo servidor dá 400. Toda mudança manda GUILD_EMOJIS_UPDATE com a lista inteira.
Convites
Criar um convite
POST /guilds/{guild_id}/invites · permissão: Criar convites (CREATE_INVITE) · limite: 20 por hora
| campo | tipo | descrição |
|---|---|---|
max_uses | number? | Limite de usos (até 10000). Ausente ou 0 = sem limite. |
max_age_secs | number? | Validade em segundos (até 30 dias). Ausente ou 0 = não expira. |
Mande pelo menos {} como corpo. Devolve o Invite.
Outras rotas
| rota | permissão | o que faz |
|---|---|---|
GET /guilds/{guild_id}/invites | Gerenciar o servidor | Lista os Invite[]. |
GET /invites/{code} | sem autenticação | Prévia: { code, guild, guild_id, member_count }. 400 se o convite expirou ou acabou. |
DELETE /invites/{code} | quem criou, ou Gerenciar o servidor | Revoga. { "ok": true }. |
POST /invites/{code} | só pessoas (bots: 400) | Entra no servidor. Um bot entra pelo link de convite de bot. |
Canais
Criar um canal
POST /guilds/{guild_id}/channels · permissão: Gerenciar canais (MANAGE_CHANNELS)
| campo | tipo | descrição |
|---|---|---|
name | string | obrigatório. 1 a 100. Em canais de texto e fóruns vira minúsculas, com hífens. |
type | number | 0 texto (padrão), 2 voz, 4 categoria ou 15 fórum. |
parent_id | id? | Categoria. Ignorado para categorias. |
topic | string? | Até 1024. |
permission_overwrites | Overwrite[] | Começar com estas. Sem isso, o canal copia as da categoria. Mudar o que a categoria tem pede Gerenciar cargos nela. |
rate_limit_per_user | number | Modo lento, 0 a 21600 s. |
Máximo de 200 canais por servidor. Devolve o Channel; quem pode vê-lo recebe CHANNEL_CREATE.
Editar um canal
PATCH /channels/{channel_id}
| campo | tipo | descrição |
|---|---|---|
name | string | Novo nome (numa postagem, o título). |
topic | string | Novo tópico. "" apaga (null não muda nada). |
position | number | 0 a 10000. |
parent_id | id? | Mover para outra categoria. null tira da categoria. Categorias não entram em categorias. |
rate_limit_per_user | number | Modo lento, 0 a 21600 s. |
available_tags | ForumTag[] | Só fóruns: a lista inteira de tags (até 20). Tags que já existem mantêm o id; novas vão sem id. Tags tiradas saem também das postagens. |
applied_tags | id[] | Só postagens: as tags dela (até 5). |
pinned | boolean | Só postagens: fixar. |
locked | boolean | Só postagens: trancar. |
Permissão:
- Canal comum: Gerenciar canais no canal.
- Postagem: o autor ou quem tem Gerenciar mensagens muda
nameeapplied_tags; só Gerenciar mensagens mudapinned,lockederate_limit_per_user. Tags marcadas comomoderatedsó a moderação põe ou tira.
DMs não se editam (403). Devolve o Channel; quem vê o canal recebe CHANNEL_UPDATE.
Apagar um canal
DELETE /channels/{channel_id}
Permissão: Gerenciar canais; numa postagem, o autor ou Gerenciar mensagens. DMs não se apagam. Apagar uma categoria deixa os canais dela sem categoria (CHANNEL_UPDATE); apagar um fórum leva as postagens. Devolve { "ok": true }.
Fóruns: listar postagens
GET /channels/{forum_id}/posts
| query | descrição |
|---|---|
sort | activity (padrão: última mensagem) ou created (criação). |
before | Para a próxima página: a chave de ordenação da última postagem recebida (o last_message_id dela, ou o id se não houver, em activity; o id em created). |
tag | Só postagens com esta tag. |
q | Só postagens com este texto no título. |
limit | 1 a 50, padrão 25. |
Postagens fixadas vêm primeiro, só na primeira página. Sem Ler o histórico, a lista vem vazia. Devolve Post[].
Fóruns: abrir uma postagem
POST /channels/{forum_id}/posts · permissão: Enviar mensagens · limite: 10 por minuto
| campo | tipo | descrição |
|---|---|---|
name | string | obrigatório. Título, 1 a 100. |
applied_tags | id[] | Tags do fórum, até 5. |
Respeita o modo lento do fórum. Devolve o Channel da postagem (tipo 11). A primeira mensagem vai em seguida, por POST /channels/{post_id}/messages.
Permissões de canal
Todas pedem Gerenciar cargos (MANAGE_ROLES) no canal, e só mudam bits que você tem nele. Devolvem o Channel atualizado. Postagens seguem o fórum e não aceitam permissões próprias. Veja Permissões de canal.
| rota | corpo | o que faz |
|---|---|---|
PUT /channels/{channel_id}/permissions | { "permission_overwrites": Overwrite[] } | Troca a lista inteira (até 100). |
PUT /channels/{channel_id}/permissions/{target_id} | { "type": 0 | 1, "allow": n, "deny": n } | Define a de um cargo (type 0) ou membro (type 1). |
DELETE /channels/{channel_id}/permissions/{target_id} | — | Tira a de um cargo ou membro. |
POST /channels/{channel_id}/permissions/sync | — | Copia de novo as da categoria. |
Mudar uma categoria muda junto os canais dela que estavam iguais a ela ("sincronizados"). Quem passa a ver um canal recebe CHANNEL_CREATE; quem deixa de ver, CHANNEL_DELETE; os outros, CHANNEL_UPDATE.
Mensagens
As rotas de mensagens funcionam em canais de texto, DMs e postagens de fórum. Em categorias, salas de voz e fóruns, respondem 400.
Listar mensagens
GET /channels/{channel_id}/messages
| query | descrição |
|---|---|
before | Id: mensagens anteriores a ela. |
after | Id: mensagens posteriores a ela. Se vier junto com before, before é ignorado. |
limit | 1 a 100, padrão 50. |
Devolve Message[] da mais antiga para a mais nova. Sem cursor, vem a página mais recente. Sem Ler o histórico (READ_MESSAGE_HISTORY) no canal, a lista vem vazia: a conta só vê o que chega pelo gateway.
js
// Todas as mensagens de um canal, das mais novas para trás.
let before;
for (;;) {
const q = new URLSearchParams({ limit: '100', ...(before && { before }) });
const page = await api('GET', `/channels/${id}/messages?${q}`);
if (page.length === 0) break;
processar(page);
before = page[0].id; // a mais antiga da página
}Não há rota para buscar uma mensagem só.
Enviar mensagem
POST /channels/{channel_id}/messages · permissão: Enviar mensagens (SEND_MESSAGES) · limite: 10 a cada 10 s
| campo | tipo | descrição |
|---|---|---|
content | string | Texto, até 4000 caracteres (espaços no fim são cortados). Pode faltar se houver anexos. |
nonce | string | Opcional, até 64 caracteres. Volta igual na mensagem e no MESSAGE_CREATE. |
reply_to | id | Responder a esta mensagem (do mesmo canal). |
attachment_ids | id[] | Até 10 anexos enviados antes, por você, neste canal e ainda não usados. |
cards | Card[] | Só bots. Até 5 cartões. Com cartões, o texto pode faltar. |
components | Button[][] | Só bots. Até 5 fileiras de 5 botões. |
json
{ "content": "Olá, <@1234567890123456789>!", "reply_to": "1234567890123456999" }Devolve a Message. Quem vê o canal (incluindo você) recebe MESSAGE_CREATE; se houver links, um MESSAGE_UPDATE com as prévias vem logo depois.
Erros comuns: mensagem vazia (400), postagem trancada sem Gerenciar mensagens (400), DM com alguém que bloqueou ou foi bloqueado (400), modo lento (429 slow_mode).
Editar mensagem
PATCH /channels/{channel_id}/messages/{message_id} · só o autor · limite: 10 a cada 10 s
| campo | tipo | descrição |
|---|---|---|
content | string | O texto novo, até 4000. Só pode ficar vazio se a mensagem tiver anexos ou cartões. |
cards | Card[] | Só bots. Troca os cartões; sem o campo, ficam os que estavam. |
components | Button[][] | Só bots. Troca os botões; [] tira todos. |
Mande só o que muda.
Devolve a Message completa. O evento MESSAGE_UPDATE é parcial (veja Eventos).
Apagar mensagem
DELETE /channels/{channel_id}/messages/{message_id}
Permissão: ser o autor, ou ter Gerenciar mensagens (MANAGE_MESSAGES) no canal. Os anexos vão junto. Devolve { "ok": true }; quem vê o canal recebe MESSAGE_DELETE.
Reagir
PUT /channels/{channel_id}/messages/{message_id}/reactions/{emoji} · limite: 20 a cada 10 s
{emoji} é um emoji Unicode ou um emoji de servidor como nome:id, codificado para URL (encodeURIComponent('👍')). Um emoji de servidor precisa ser de um servidor em que você está.
Somar-se a uma reação que já existe sempre pode; criar uma reação nova pede Adicionar reações (ADD_REACTIONS). Uma mensagem tem no máximo 20 emojis diferentes. Sem corpo. Devolve { "ok": true }; se a reação é nova para você, todos recebem MESSAGE_REACTION_ADD.
Tirar a reação
DELETE /channels/{channel_id}/messages/{message_id}/reactions/{emoji}
Tira a sua reação. Não há rota para tirar reações dos outros. Devolve { "ok": true }.
Digitando
POST /channels/{channel_id}/typing · limite: 10 a cada 10 s
Mostra "digitando..." para os outros (TYPING_START). Sem corpo. O app esconde o aviso depois de 9 segundos; repita a cada ~8 s enquanto o bot estiver trabalhando.
Marcar como lido
POST /channels/{channel_id}/ack
| campo | tipo | descrição |
|---|---|---|
message_id | id | A última mensagem lida. |
Devolve { "ok": true }. Só a própria conta recebe MESSAGE_ACK. Bots raramente precisam.
Arquivos
Enviar anexo
POST /channels/{channel_id}/attachments · permissão: Enviar arquivos (ATTACH_FILES) · limite: 30 por minuto
Corpo multipart/form-data:
| campo | descrição |
|---|---|
file | obrigatório. O arquivo. Até 50 MB (o padrão do servidor). |
thumbnail | Opcional, só para vídeos: uma miniatura JPEG ou WebP de até 512 KB. |
width, height | Opcionais: dimensões em pixels (1 a 16384). |
thumbnail, width e height precisam vir antes de file; o que vier depois é ignorado. Devolve o Attachment. O anexo só aparece quando for usado numa mensagem, em attachment_ids; se não for usado em um dia, é apagado.
js
const form = new FormData();
form.append('file', new Blob([bytes], { type: 'image/png' }), 'grafico.png');
const anexo = await fetch(`${API}/channels/${canal}/attachments`, {
method: 'POST',
headers: { Authorization: `Bot ${TOKEN}` }, // sem Content-Type: o fetch põe o boundary
body: form,
}).then((r) => r.json());
await api('POST', `/channels/${canal}/messages`, { content: 'Aqui está', attachment_ids: [anexo.id] });Não funciona em categorias nem salas de voz. 413 too_large se passar do limite; 503 se o servidor não tiver armazenamento configurado.
Baixar anexo
GET /attachments/{id} e GET /attachments/{id}/thumb
Só para quem pode ver o canal do anexo; para todo o resto, 404. Use Authorization: Bearer <token> (o prefixo Bot não é aceito aqui). Aceita Range.
Enviar imagem
POST /media · limite: 10 por minuto
Corpo multipart/form-data com o campo file: PNG, JPEG, GIF, WebP ou AVIF, até 16 MB. Devolve { "id": "..." }, para usar como avatar_id, banner_id, icon_id ou image_id (emoji). Imagens de mídia ficam públicas em /api/media/{id}/{segredo}.
Voz
Entrar numa sala de voz tem duas partes: pedir um token do LiveKit pela API e avisar pelo gateway onde a conta está (op 4, veja Gateway). O áudio passa pelo LiveKit, com qualquer SDK dele.
Entrar numa sala
POST /channels/{channel_id}/voice · permissão: Entrar em salas (CONNECT) · limite: 20 por minuto
Funciona em salas de voz (tipo 2) e DMs (uma chamada). Sem corpo. Devolve:
| campo | tipo | descrição |
|---|---|---|
url | string | Endereço wss:// do LiveKit. |
server | string | Id do servidor de voz usado. |
token | string | Token do LiveKit, válido por 12 horas. |
room | string | Nome da sala no LiveKit (ch-{channel_id}). |
can_speak | boolean | Tem Falar (SPEAK): pode publicar o microfone. |
can_stream | boolean | Tem Vídeo e tela (STREAM): pode publicar câmera e tela. |
Trocar o servidor de voz da sala
PUT /channels/{channel_id}/voice/server · permissão: Entrar em salas · limite: 10 por minuto
| campo | tipo | descrição |
|---|---|---|
server | string | Id de um servidor de voz (veja GET /config). |
Devolve o Channel com voice_server; quem vê a sala recebe CHANNEL_UPDATE e deve reconectar no servidor novo.
Configuração
GET /config
Devolve os recursos opcionais do servidor:
json
{
"gifs": { "provider": "klipy", "app_key": "..." },
"voice": { "servers": [{ "id": "vixpi", "name": "Brasil 2" }], "default": "vixpi" }
}gifs é null quando não há busca de GIFs.
Bots
Rotas para criar e cuidar de bots. Quase todas são só pessoas: o dono usa com o token dele (ou em dev.zynko.org).
| rota | quem | o que faz |
|---|---|---|
GET /users/@me/bots | qualquer conta | Lista os seus Bot[]. |
POST /users/@me/bots | só pessoas · 10 por hora | Cria. Corpo: username (2 a 32, letras minúsculas, números, _ e .), display_name (opcional), public (padrão false). Máximo de 10 bots por pessoa. Devolve o Bot com token. 409 se o nome já existe. |
PATCH /users/@me/bots/{bot_id} | só pessoas, dono | Edita o perfil do bot, com os mesmos campos de PATCH /users/@me. Devolve Profile. |
PUT /users/@me/bots/{bot_id}/public | só pessoas, dono | Corpo { "public": true }: abre (ou fecha) o link de convite para todos. Servidores em que ele já está continuam com ele. Devolve o Bot. |
POST /users/@me/bots/{bot_id}/token | só pessoas, dono | Gera um token novo. O antigo para de funcionar e as conexões dele caem (4000). Devolve o Bot com token. |
DELETE /users/@me/bots/{bot_id} | só pessoas, dono | Apaga: o bot sai de todos os servidores, o token para de funcionar e o username fica livre. As mensagens dele continuam lá. |
GET /bots/{bot_id} | qualquer conta | A página de convite: o Bot com owner. Só bots públicos, ou os seus. |
PUT /guilds/{guild_id}/bots/{bot_id} | só pessoas, Gerenciar o servidor | Coloca o bot no servidor. Veja abaixo. |
Adicionar um bot a um servidor
PUT /guilds/{guild_id}/bots/{bot_id} · só pessoas · permissão: Gerenciar o servidor
| campo | tipo | descrição |
|---|---|---|
permissions | number | Bits que o bot pede. Se não for 0, o bot ganha um cargo com o nome dele e essas permissões. Quem adiciona precisa ter todas. |
admin | boolean | Fazer o bot ADM. Só o dono do servidor, e só para um bot dele. |
O corpo pode faltar. Funciona com os seus bots e com qualquer bot público; um bot banido do servidor não entra. Devolve o Member do bot. O servidor recebe GUILD_MEMBER_ADD e o bot recebe GUILD_CREATE. Se o bot já está no servidor, nada muda (exceto admin: true). Veja O cargo do bot.
Interações
Comandos com "/" e botões. O guia está em Comandos, cartões e botões.
| rota | quem | o que faz |
|---|---|---|
PUT /users/@me/commands | só bots · 10 por minuto | Troca a lista inteira de Command do bot (até 100). Devolve a lista como ficou (nomes em minúsculas). |
GET /users/@me/commands | só bots | Os comandos do bot. |
GET /channels/{channel_id}/commands | quem vê o canal | [{ bot, commands }]: os comandos dos bots que veem o canal. É o que os apps mostram ao digitar /. |
POST /channels/{channel_id}/interactions | só pessoas · 20 a cada 10 s | Usa um comando ou clica num botão (o que os apps fazem). Veja abaixo. |
POST /interactions/{id}/{token}/callback | o bot que recebeu | Responde. Veja abaixo. |
Usar um comando ou clicar
POST /channels/{channel_id}/interactions
json
{ "type": "command", "bot_id": "123", "name": "dado", "options": [{ "name": "lados", "value": 6 }] }
{ "type": "button", "message_id": "456", "custom_id": "de-novo" }Comandos precisam de Enviar mensagens no canal. O servidor confere as opções (tipos, obrigatórias, limites, escolhas; um número pode vir como texto) e se o bot vê o canal e está online, e então manda INTERACTION_CREATE só para o bot. Devolve { "id": "..." }; quando o bot responder, quem usou recebe INTERACTION_RESPONSE com esse id.
Responder
POST /interactions/{id}/{token}/callback · até 15 minutos depois
| campo | tipo | descrição |
|---|---|---|
type | string | "message" (padrão): uma mensagem nova no canal. "update": muda a mensagem do botão clicado (só em cliques). |
content | string | Texto. |
cards | Card[] | Cartões. |
components | Button[][] | Botões. |
ephemeral | boolean | Com "message": só quem usou vê, e nada fica guardado. Sem botões. |
Devolve a Message. A mensagem leva interaction (quem usou e o comando). Pode responder mais de uma vez; cada "message" é uma mensagem nova. 404 se o id ou o token estiverem errados, ou se já passaram 15 minutos.
Outras
GET /health responde ok (texto), sem autenticação.