JoeBot API

Puxe métricas e gerencie a sua comunidade de WhatsApp — comandos, mensagens agendadas e moderação — direto pelo seu sistema, planilha ou integração.

Introdução

A API é REST, fala JSON e usa autenticação por chave. Toda requisição parte da mesma base:

https://vpvsrjkotstvjywhuacr.supabase.co/functions/v1/api/v1

Cada chave enxerga apenas os grupos da sua conta. Você não consegue ler nem escrever em grupos de outros clientes.

Autenticação

Gere uma chave no painel: joebot.com.br/dashboard → aba APIGerar chave. Ela aparece uma única vez — copie e guarde.

Envie a chave em todas as requisições no header Authorization:

Authorization: Bearer joe_live_sua_chave_aqui

Escopos

EscopoPermite
metrics:readLer métricas e listar comandos / agendamentos / palavras (todos os GET).
writeCriar e remover (os POST e DELETE). Ative o “Permitir escrita” ao gerar a chave.
Comece com uma chave só leitura. Gere uma com escrita apenas para a integração que realmente precisa alterar dados.

Erros

Erros vêm com o status HTTP e um corpo { "error": "...", "detail": "..." }.

StatuserrorQuando
401unauthorizedChave ausente, inválida ou revogada.
403forbiddenChave sem escopo write tentando criar/remover.
404not_foundGrupo ou registro não pertence à sua chave.
400bad_requestFaltou campo obrigatório ou valor inválido.

Métricas

GET/metrics
Mensagens por dia (hoje, 7d, 30d) e — quando você passa um grupo — o ranking de quem mais participa.

Query params

ParamDescrição
groupopcionalJID do grupo (ex 1203...@g.us). Sem ele, retorna todos os seus grupos.
rangeopcional7d, 30d (padrão) ou 90d — janela da série diária.

Exemplo

# um grupo, últimos 7 dias (inclui top usuários)
curl "$BASE/metrics?group=1203...@g.us&range=7d" \
  -H "Authorization: Bearer joe_live_..."
// 200 OK
{
  "range": "7d",
  "grupos": [{
    "group_jid": "1203...@g.us",
    "grupo_nome": "Minha Comunidade",
    "mensagens": { "hoje": 12, "7d": 310, "30d": 1240 },
    "serie": [{ "dia": "2026-08-19", "total": 25 }]
  }],
  "top_usuarios": [{ "nome": "Ana", "total": 48 }]
}

Comandos

GET/commands
Lista os comandos do grupo. Query: group obrigatório.
POST/commandswrite
Cria um comando. O Joe responde na comunidade quando alguém digitar.
DELETE/commands/{id}write
Remove o comando pelo id.

Corpo (POST)

CampoDescrição
groupobrig.JID do grupo.
comandoobrig.O gatilho, ex /site (a barra é adicionada se faltar).
tipoopcionaltext (padrão) ou image / document / audio / video.
respostaObrigatória no text. Quando é mídia, vira a legenda (opcional).
media_urlObrigatória quando tipotext. URL pública da imagem/arquivo.
curl -X POST "$BASE/commands" -H "Authorization: Bearer joe_live_..." \
  -d '{"group":"1203...@g.us","comando":"/site","resposta":"https://exemplo.com"}'

// 201 Created
{ "ok": true, "command": { "id": "uuid", "comando": "/site", "resposta": "..." } }

Mensagens agendadas

GET/messages
Lista os agendamentos do grupo. Query: group obrigatório.
POST/messageswrite
Agenda uma mensagem única. O Joe envia sozinho no horário marcado.
DELETE/messages/{id}write
Cancela um agendamento.

Corpo (POST)

CampoDescrição
groupobrig.JID do grupo.
textoobrig.A mensagem — ou a pergunta quando é enquete.
quandoobrig.Data/hora no futuro em ISO 8601, ex 2026-08-25T20:00:00-03:00.
tipoopcionaltext (padrão), poll (enquete), image ou audio.
opcoesObrigatória quando tipo=poll: array com 2+ opções.
media_urlObrigatória quando tipo=image/audio. URL pública (o texto vira legenda).
# mensagem
curl -X POST "$BASE/messages" -H "Authorization: Bearer joe_live_..." \
  -d '{"group":"1203...@g.us","texto":"Live hoje 20h!","quando":"2026-08-25T20:00:00-03:00"}'

# enquete agendada
curl -X POST "$BASE/messages" -H "Authorization: Bearer joe_live_..." \
  -d '{"group":"1203...@g.us","tipo":"poll","texto":"Qual tema?","opcoes":["Arduino","Robótica","IA"],"quando":"2026-08-25T20:00:00-03:00"}'

Moderação

GET/moderation
Lista as palavras bloqueadas. Query: group obrigatório.
POST/moderationwrite
Bloqueia uma palavra — o Joe apaga na hora qualquer mensagem que a contenha (o Joe precisa ser admin do grupo).
DELETE/moderation/{id}write
Desbloqueia a palavra.

Corpo (POST)

CampoDescrição
groupobrig.JID do grupo.
palavraobrig.A palavra a bloquear (case-insensitive).
curl -X POST "$BASE/moderation" -H "Authorization: Bearer joe_live_..." \
  -d '{"group":"1203...@g.us","palavra":"spam"}'

JoeBot API v1 · beta · dúvidas? fale com o suporte no painel. Defina $BASE como a URL base acima para rodar os exemplos.