Endpoints disponíveis para integração com sistemas externos.
Esta página é para administradores. Usuários comuns devem consultar a documentação pública.
O Starbot expõe uma API REST no mesmo servidor onde o bot roda. A base URL é http://seu-dominio:8080 (ou https://seu-dominio se estiver atrás de Cloudflare Tunnel).
Todas as rotas autenticadas exigem cookie de sessão OAuth2 válido. Não há API token público por enquanto — apenas admins de servidor autenticados via Discord podem acessar endpoints de configuração.
Verifica se a sessão atual está autenticada.
GET /dashboard/api/auth/check
# Resposta (autenticado):
{ "authenticated": true, "user": { "id": "123", "username": "Renato" } }
# Resposta (não autenticado):
{ "authenticated": false, "user": null }Todas exigem cookie de sessão sb_dash válido.
Retorna informações do usuário logado.
{
"id": "1234567890",
"username": "Renato",
"avatarUrl": "https://cdn.discordapp.com/avatars/..."
}Retorna o idioma preferido do usuário.
{
"language": "pt-BR",
"supported": ["pt-BR", "en-US", "es-ES"]
}Altera o idioma preferido do usuário.
PATCH /dashboard/api/me/language
Content-Type: application/json
{ "language": "en-US" }
# Resposta:
{ "success": true, "language": "en-US" }Lista os servidores onde o usuário é admin E o bot está presente.
[
{
"id": "1111111111",
"name": "Meu Servidor",
"icon": "https://cdn.discordapp.com/icons/...",
"owner": true,
"members": 542
}
]Detalhes de um servidor específico (canais, categorias, cargos, configurações atuais).
{
"config": { /* Guild config completa */ },
"channels": [{ "id": "...", "name": "geral" }],
"categories": [{ "id": "...", "name": "Suporte" }],
"roles": [{ "id": "...", "name": "@Staff" }]
}Atualiza configurações do servidor. Campos aceitos no body:
| Campo | Tipo | Descrição |
|---|---|---|
messageDeleteLogChannel | string | Canal de log de mensagens deletadas |
joinLeaveLogChannel | string | Canal de log de entrada/saída |
banLogChannel | string | Canal de log de banimentos |
minecraft.javaIp | string | IP do servidor Minecraft Java |
minecraft.bedrockIp | string | IP do servidor Minecraft Bedrock |
tickets.categoryId | string | Categoria para canais de ticket |
tickets.supportRoleId | string | Cargo de staff que responde tickets |
welcome.enabled | boolean | Ativa/desativa boas-vindas |
welcome.message | string | Mensagem de boas-vindas com variáveis |
automod.badWords | string[] | Lista de palavras banidas |
automod.antiLink | boolean | Bloqueia links automaticamente |
logs.messageDelete | boolean | Log de mensagens deletadas |
logs.ban | boolean | Log de banimentos |
Seleciona o servidor ativo na sessão (usado pelo dashboard pra saber qual servidor o user está editando).
POST /dashboard/api/guild/select
Content-Type: application/json
{ "guildId": "1111111111" }Estatísticas de um servidor específico.
{
"memberCount": 542,
"ticketCount": 12,
"warningCount": 8,
"channelCount": 23,
"roleCount": 15,
"createdAt": "2024-01-15T10:30:00.000Z"
}Estatísticas globais do bot (todos os servidores).
{
"guildCount": 81,
"totalMembers": 15423,
"uptime": 3600,
"memoryUsage": { "rss": 123456789 }
}Consulta status de um servidor Minecraft (público, não precisa de auth).
GET /dashboard/api/minecraft/status?ip=play.example.com&edition=java
{
"online": true,
"ip": "play.example.com",
"port": 25565,
"players": { "online": 42, "max": 100 },
"version": "1.20.4",
"motd": { "clean": "Welcome!" }
}Rotas de login têm rate limit:
POST /panel/api/login — 10 tentativas por IP+username a cada 15 minGET /dashboard/callback — 10 tentativas por IP a cada 15 minAo atingir o limite, recebe HTTP 429 com header Retry-After.
| Código | Significado |
|---|---|
| 400 | Parâmetros inválidos no body/query |
| 401 | Não autenticado (cookie de sessão ausente ou inválido) |
| 403 | Sem permissão (você não é admin deste servidor) |
| 404 | Recurso não encontrado (servidor não existe ou bot não está nele) |
| 429 | Rate limit atingido |
| 500 | Erro interno do servidor |
A API não envia headers CORS por default. Se quiser consumir de outro domínio, configure um proxy reverso (nginx/Cloudflare) que adiciona Access-Control-Allow-Origin.