Voltar pros Docs

API REST

Endpoints REST do GBBOT pra integrações externas. Base URL https://gbbot.com.br/api. Respostas em JSON.

Base URL
gbbot.com.br/api
Formato
JSON · UTF-8
Auth
Cookie JWT (OAuth Discord)

Autenticação

Endpoints AUTH-PROTEGIDOS exigem cookie token=<JWT>. Como obter:
  1. Redirecione o user pra https://gbbot.com.br/api/auth/login?returnTo=https://seuapp.com
  2. User autoriza no Discord, cookie é setado em .gbbot.com.br
  3. Subdomínios (api.gbbot.com.br) recebem o cookie automaticamente
  4. Cross-domain? Use credentials: 'include' + CORS configurado
Não há (ainda) suporte oficial a API keys ou OAuth 2.0 third-party. Pra fluxos automatizados sem usuário, use webhooks (push) ao invés de pull-API.

PÚBLICOS — sem autenticação

GET/api/health

Saúde do backend (uptime, memória).

Exemplo
bash
curl https://gbbot.com.br/api/health
Resposta
json
{
  "status": "online",
  "bot": "GBBOT",
  "timestamp": "2026-05-20T15:30:00.000Z",
  "uptimeSeconds": 3600,
  "memory": { "heapUsedMB": 128, "heapTotalMB": 256, "rssMB": 320 }
}
GET/api/public-status

Status agregado de bot + backend + site + lojas (cache 15s).

Exemplo
bash
curl https://gbbot.com.br/api/public-status
Resposta
json
{
  "bot":   { "ok": true, "status": "online", "guilds": 120, "uptime": "2d 4h" },
  "api":   { "ok": true, "version": "1.0.0" },
  "site":  { "ok": true },
  "lojas": { "ok": true, "published": 12 },
  "checkedAt": "2026-05-20T15:30:00.000Z"
}
GET/api/updates

Histórico de changelog público (cache 60s).

Exemplo
bash
curl https://gbbot.com.br/api/updates
Resposta
json
[
  {
    "_id": "abc",
    "version": "20-05-2026",
    "title": "Update 20/05",
    "content": "...",
    "imageUrl": "https://i.imgur.com/xxx.gif",
    "buttons": [{ "label": "...", "url": "..." }],
    "publishedAt": "2026-05-20T20:22:19.319Z"
  }
]
GET/api/marketplace/:slug

Detalhe de um template (NÃO retorna config inteira; só metadados + seções).

Exemplo
bash
curl https://gbbot.com.br/api/marketplace/setup-gaming-ptbr
POST/api/newsletter/subscribe

Inscreve email na newsletter. Rate limit: 1/IP/min.

Exemplo
bash
curl -X POST https://gbbot.com.br/api/newsletter/subscribe \
  -H 'Content-Type: application/json' \
  -d '{"email":"voce@exemplo.com","source":"footer"}'
Resposta
json
{ "ok": true, "status": "subscribed" }
POST/api/newsletter/unsubscribe

Remove email (sem auth — apenas conhecimento do email basta).

Exemplo
bash
curl -X POST https://gbbot.com.br/api/newsletter/unsubscribe \
  -H 'Content-Type: application/json' \
  -d '{"email":"voce@exemplo.com"}'
GET/api/newsletter/count

Contagem pública de inscritos ativos.

Exemplo
bash
curl https://gbbot.com.br/api/newsletter/count
Resposta
json
{ "count": 1234 }

AUTENTICADOS — exigem cookie JWT (Discord OAuth)

GET/api/auth/me

User logado (perfil Discord, premium, owned guilds).

Exemplo
bash
curl --cookie 'token=SEU_JWT' https://gbbot.com.br/api/auth/me
GET/api/guilds

Lista de guildas que o user administra (com licenseInfo).

Exemplo
bash
curl --cookie 'token=SEU_JWT' https://gbbot.com.br/api/guilds
GET/api/guilds/:guildId

Config completa de uma guilda (sem panelAccess.encryptedPassword).

GET/api/guilds/:guildId/channels

Lista de canais da guilda (text + announcement + voice).

GET/api/guilds/:guildId/roles

Lista de cargos da guilda (com hierarquia/posição).

GET/api/guilds/:guildId/export-config

Baixa JSON da config inteira (whitelist segura — sem panelAccess/premium).

Exemplo
bash
curl -L --cookie 'token=SEU_JWT' \
  -o config.json \
  https://gbbot.com.br/api/guilds/SEUID/export-config
POST/api/guilds/:guildId/import-config

Aplica um JSON na config. Whitelist de seções permitidas.

Exemplo
bash
curl -X POST --cookie 'token=SEU_JWT' \
  -H 'Content-Type: application/json' \
  --data @config.json \
  https://gbbot.com.br/api/guilds/SEUID/import-config
POST/api/guilds/:guildId/apply-template

Aplica um template pré-configurado.

Exemplo
bash
curl -X POST --cookie 'token=SEU_JWT' \
  -H 'Content-Type: application/json' \
  -d '{"templateId":"gaming"}' \
  https://gbbot.com.br/api/guilds/SEUID/apply-template
GET/api/guilds/:guildId/setup-templates

Lista templates de Quick Setup disponíveis.

GET/api/guilds/:guildId/audit?limit=50

Log de auditoria da guilda (TTL 180d).

GET/api/guilds/:guildId/webhooks

Lista webhooks configurados (sem expor secret).

POST/api/guilds/:guildId/webhooks

Cria webhook. **Retorna o secret APENAS aqui** — guarde imediatamente.

Exemplo
bash
curl -X POST --cookie 'token=SEU_JWT' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://meu-receiver.com/hook",
    "label": "Meu n8n",
    "events": ["raid.detected", "ticket.created"]
  }' \
  https://gbbot.com.br/api/guilds/SEUID/webhooks
Resposta
json
{
  "ok": true,
  "id": "...",
  "secret": "abc123def456...",
  "warning": "Anote agora — não mostramos de novo"
}
POST/api/marketplace/publish

Publica config da sua guilda como template público. Rate limit: 5min/user.

Exemplo
bash
curl -X POST --cookie 'token=SEU_JWT' \
  -H 'Content-Type: application/json' \
  -d '{
    "guildId": "SEUID",
    "name": "Meu Setup",
    "description": "Descrição com pelo menos 20 caracteres",
    "tags": ["pt-br", "small"],
    "icon": "star"
  }' \
  https://gbbot.com.br/api/marketplace/publish
POST/api/marketplace/:slug/apply

Aplica template do marketplace no seu servidor.

GET/api/me/referral

Seu código de afiliado + link + stats de conversões.

POST/api/me/referral/validate

Valida código de afiliado antes do checkout.

Exemplo
bash
curl -X POST --cookie 'token=SEU_JWT' \
  -H 'Content-Type: application/json' \
  -d '{"code":"ABCD1234"}' \
  https://gbbot.com.br/api/me/referral/validate

INTERNOS — apenas serviços GBBOT (x-internal-secret)

Você não chama esses endpoints — eles existem só pra comunicação interna entre bot/backend. Documentados aqui pra transparência.
POST/api/internal/feedback

Bot encaminha reporte de /bug pra persistência.

POST/api/internal/webhook-fire

Bot dispara evento de webhook (não tem o model GuildWebhook, chama backend).

POST/api/internal/shop-create-order

Bot cria pedido na loja virtual (Discord-side checkout flow).

Eventos do servidor

GET/api/guilds/:guildId/events

Lista eventos (todos os status).

POST/api/guilds/:guildId/events

Cria evento. Body: { title, description, startAt, durationMins, channelId, maxParticipants, xpReward }.

PATCH/api/guilds/:guildId/events/:id

Edita evento. Re-publica embed no Discord.

DELETE/api/guilds/:guildId/events/:id

Cancela evento (soft-delete, status=cancelled).

Sugestões

GET/api/guilds/:guildId/suggestions?status=pending&limit=50

Lista sugestões + stats por status.

PATCH/api/guilds/:guildId/suggestions/:id

Atualiza status (pending/in_progress/approved/rejected) ou adminResponse.

DELETE/api/guilds/:guildId/suggestions/:id

Remove sugestão do dashboard (não some do Discord).

Loja de Cargos XP

GET/api/guilds/:guildId/role-shop

Lista itens da loja (config admin).

POST/api/guilds/:guildId/role-shop

Cria item. Body: { roleId, name, priceXp, durationDays, maxStock, purchaseLimit }.

GET/api/guilds/:guildId/role-shop/sales

Histórico de compras (últimas 100).

Marcos de membros

PATCH/api/guilds/:guildId/settings/milestones

Configura: enabled, channelId, thresholds[], message, cardBackgroundUrl.

POST/api/guilds/:guildId/settings/milestones/reset-announced

Reseta announced[] pra re-anunciar marcos atingidos.

Aniversários

GET/api/guilds/:guildId/birthday-config

Lê config (channelId, message, cardEnabled, cardBackgroundUrl).

PATCH/api/guilds/:guildId/birthday-config

Atualiza config.

GET/api/guilds/:guildId/birthdays

Lista aniversariantes ordenados por proximidade.

Plano Comandante (white-label)

GET/api/guilds/:guildId/comandante

Info do bot dedicado atribuído (applicationId, status, customConfig).

PATCH/api/guilds/:guildId/comandante/customization

Atualiza nome/desc/avatar/banner/cor. Sync aplica em até 30 min via Discord REST.

Assistente IA

POST/api/ai-chat

Pergunta pro assistente. Body: { messages: [{role:"user", content:"..."}] }. Rate limit: 100/h + 50/dia por user.

Rate Limits

RotaLimite
/api/*100 req/min por IP
/api/auth/login5 req/min por IP
/api/newsletter/subscribe1 req/min por IP
/api/marketplace/publish1 a cada 5min por user
/api/shop/check-sluglimitador específico
/api/guilds/:id/settingslimitador específico

Excedeu? Recebe 429 Too Many Requests. Espere e tente de novo.

Formato de erro

json
{ "error": "Mensagem amigável em português." }
400 Bad Request
401 Não autenticado
403 Sem permissão
404 Não encontrado
429 Rate limited
500 Erro interno

Faltou algo na doc?

Achou um endpoint que não documentei? Notou erro? Nos avisa.