Skip to content

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 (ou 400, onde indicado) para bots.
  • Os tipos de retorno estão em Objetos.
  • Em corpos de PATCH, campo ausente = não muda. Onde está escrito "null apaga", mandar null limpa 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

campotipodescrição
display_namestringNome de exibição, 1 a 32 caracteres.
avatar_idid?Imagem enviada em POST /media. null apaga.
avatar_urlstringUm GIF do KLIPY (https://static.klipy.com/... terminando em .gif ou .webp), no lugar de um upload.
banner_idid?Como avatar_id, para o banner.
banner_urlstringComo avatar_url, para o banner.
biostring?"Sobre mim", até 190 caracteres. null ou "" apaga.
accentstring?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

campotipodescrição
recipient_ididCom 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 ​

rotao que faz
GET /users/@me/relationshipsLista 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/relationshipsPede 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)

campotipodescrição
namestring2 a 100 caracteres.
icon_idid?Imagem de POST /media. null apaga.
icon_urlstringUm 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.

campotipodescriçãopermissão
nickstringApelido, até 32. "" apaga.O próprio apelido: nenhuma. O de outro: Mudar apelidos (MANAGE_NICKNAMES) e estar acima da pessoa.
is_adminbooleanTorna 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 ​

rotapermissãoo que faz
GET /guilds/{guild_id}/bansBanir pessoas (BAN_MEMBERS)Lista Ban[], do mais recente.
PUT /guilds/{guild_id}/bans/{user_id}Banir pessoas e estar acima da pessoaBane: 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 pessoasDesbane. 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

campotipodescrição
namestringobrigatório. 1 a 32 caracteres.
colornumber?0x000000 a 0xFFFFFF.
permissionsnumberBits; só os que você tem. Padrão 0.
hoistbooleanMostrar 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}

campotipodescrição
namestring1 a 32. O nome de @everyone não muda.
colornumber?null tira a cor.
permissionsnumberOs bits que mudarem precisam ser bits que você tem.
hoistbooleanIgnorado em @everyone.

Para editar @everyone, use o id do servidor como role_id. Devolve o Role.

Reordenar cargos ​

PATCH /guilds/{guild_id}/roles

campotipodescrição
orderid[]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 ​

rotapermissãoo que faz
GET /guilds/{guild_id}/emojisqualquer membroLista Emoji[].
POST /guilds/{guild_id}/emojisGerenciar 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 emojisRenomeia. Corpo: name. Devolve o Emoji.
DELETE /guilds/{guild_id}/emojis/{emoji_id}Gerenciar emojisApaga. { "ok": true }.
GET /emojis/{emoji_id}sem autenticaçãoRedireciona 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

campotipodescrição
max_usesnumber?Limite de usos (até 10000). Ausente ou 0 = sem limite.
max_age_secsnumber?Validade em segundos (até 30 dias). Ausente ou 0 = não expira.

Mande pelo menos {} como corpo. Devolve o Invite.

Outras rotas ​

rotapermissãoo que faz
GET /guilds/{guild_id}/invitesGerenciar o servidorLista os Invite[].
GET /invites/{code}sem autenticaçãoPrévia: { code, guild, guild_id, member_count }. 400 se o convite expirou ou acabou.
DELETE /invites/{code}quem criou, ou Gerenciar o servidorRevoga. { "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)

campotipodescrição
namestringobrigatório. 1 a 100. Em canais de texto e fóruns vira minúsculas, com hífens.
typenumber0 texto (padrão), 2 voz, 4 categoria ou 15 fórum.
parent_idid?Categoria. Ignorado para categorias.
topicstring?Até 1024.
permission_overwritesOverwrite[]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_usernumberModo 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}

campotipodescrição
namestringNovo nome (numa postagem, o título).
topicstringNovo tópico. "" apaga (null não muda nada).
positionnumber0 a 10000.
parent_idid?Mover para outra categoria. null tira da categoria. Categorias não entram em categorias.
rate_limit_per_usernumberModo lento, 0 a 21600 s.
available_tagsForumTag[]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_tagsid[]Só postagens: as tags dela (até 5).
pinnedbooleanSó postagens: fixar.
lockedbooleanSó postagens: trancar.

Permissão:

  • Canal comum: Gerenciar canais no canal.
  • Postagem: o autor ou quem tem Gerenciar mensagens muda name e applied_tags; só Gerenciar mensagens muda pinned, locked e rate_limit_per_user. Tags marcadas como moderated só 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

querydescrição
sortactivity (padrão: última mensagem) ou created (criação).
beforePara 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).
tagSó postagens com esta tag.
qSó postagens com este texto no título.
limit1 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

campotipodescrição
namestringobrigatório. Título, 1 a 100.
applied_tagsid[]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.

rotacorpoo 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

querydescrição
beforeId: mensagens anteriores a ela.
afterId: mensagens posteriores a ela. Se vier junto com before, before é ignorado.
limit1 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

campotipodescrição
contentstringTexto, até 4000 caracteres (espaços no fim são cortados). Pode faltar se houver anexos.
noncestringOpcional, até 64 caracteres. Volta igual na mensagem e no MESSAGE_CREATE.
reply_toidResponder a esta mensagem (do mesmo canal).
attachment_idsid[]Até 10 anexos enviados antes, por você, neste canal e ainda não usados.
cardsCard[]Só bots. Até 5 cartões. Com cartões, o texto pode faltar.
componentsButton[][]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

campotipodescrição
contentstringO texto novo, até 4000. Só pode ficar vazio se a mensagem tiver anexos ou cartões.
cardsCard[]Só bots. Troca os cartões; sem o campo, ficam os que estavam.
componentsButton[][]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

campotipodescrição
message_ididA ú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:

campodescrição
fileobrigatório. O arquivo. Até 50 MB (o padrão do servidor).
thumbnailOpcional, só para vídeos: uma miniatura JPEG ou WebP de até 512 KB.
width, heightOpcionais: 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:

campotipodescrição
urlstringEndereço wss:// do LiveKit.
serverstringId do servidor de voz usado.
tokenstringToken do LiveKit, válido por 12 horas.
roomstringNome da sala no LiveKit (ch-{channel_id}).
can_speakbooleanTem Falar (SPEAK): pode publicar o microfone.
can_streambooleanTem 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

campotipodescrição
serverstringId 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).

rotaquemo que faz
GET /users/@me/botsqualquer contaLista os seus Bot[].
POST /users/@me/botssó pessoas · 10 por horaCria. 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, donoEdita o perfil do bot, com os mesmos campos de PATCH /users/@me. Devolve Profile.
PUT /users/@me/bots/{bot_id}/publicsó pessoas, donoCorpo { "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}/tokensó pessoas, donoGera 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, donoApaga: 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 contaA 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 servidorColoca 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

campotipodescrição
permissionsnumberBits 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.
adminbooleanFazer 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.

rotaquemo que faz
PUT /users/@me/commandssó bots · 10 por minutoTroca a lista inteira de Command do bot (até 100). Devolve a lista como ficou (nomes em minúsculas).
GET /users/@me/commandssó botsOs comandos do bot.
GET /channels/{channel_id}/commandsquem vê o canal[{ bot, commands }]: os comandos dos bots que veem o canal. É o que os apps mostram ao digitar /.
POST /channels/{channel_id}/interactionssó pessoas · 20 a cada 10 sUsa um comando ou clica num botão (o que os apps fazem). Veja abaixo.
POST /interactions/{id}/{token}/callbacko bot que recebeuResponde. 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

campotipodescrição
typestring"message" (padrão): uma mensagem nova no canal. "update": muda a mensagem do botão clicado (só em cliques).
contentstringTexto.
cardsCard[]Cartões.
componentsButton[][]Botões.
ephemeralbooleanCom "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.

Zynko · zynko.org