wwellbhook.
WELLBHOOK PARA DESENVOLVEDORES

Uma conexão.
Seu próximo passo.

Tudo o que você precisa para levar os check-ins até o sistema da sua academia.

Comece em cinco passos

  1. Aceite seu convite. Crie sua conta com o e-mail que recebeu acesso. O convite tem validade e só pode ser usado uma vez.
  2. Cadastre uma unidade. Em Configurações, informe um nome e o fuso horário. Os relatórios usam esse fuso.
  3. Configure o destino. Em Webhooks, selecione a unidade, mantenha o ambiente Demonstração e informe seu endereço HTTPS público.
  4. Guarde o segredo. Copie a chave de assinatura exibida na configuração e armazene no ambiente do seu servidor. Nunca coloque no navegador.
  5. Simule um check-in. Escolha um cenário e acompanhe o histórico de check-ins e entregas. Você também pode usar o receptor de teste interno.

Demonstração e operação real são ambientes separados. Eventos fictícios sempre têm environment: "demo".

Conectar Wellhub e TotalPass

Wellhub

O simulador está disponível. O adaptador Access Control v1 está implementado para sandbox e produção, mas permanece desligado até a Wellhub emitir credenciais e concluir a homologação.

Processo oficial de integração

TotalPass

O fluxo real exige adesão, credenciais, configuração do callback e homologação. Configurar uma conexão no Wellbhook não substitui essas etapas.

Documentação oficial

A aprovação automática só é executada em conexões habilitadas. Resposta ambígua ou timeout resulta em validação inconclusiva, nunca em aprovação presumida.

Receber webhooks

Configure um destino HTTPS por unidade e ambiente. Selecione os eventos que seu sistema precisa receber. O Wellbhook envia requisições POST com JSON, sem credenciais dos provedores.

{
  "id": "evt_123",
  "type": "checkin.approved",
  "version": "1",
  "created_at": "2026-09-13T14:30:00.000Z",
  "environment": "demo",
  "unit_id": "unit_123",
  "provider": "totalpass",
  "data": {
    "checkin_id": "chk_123",
    "external_id": "provider_123",
    "person": { "id": "person_123", "name": "Visitante de teste" },
    "status": "approved",
    "occurred_at": "2026-09-13T14:29:59.000Z",
    "validated_at": "2026-09-13T14:30:00.000Z",
    "reason": null
  }
}

O exemplo abaixo cobre a verificação criptográfica. Implemente a persistência e a deduplicação indicadas antes de usar em produção.

Seu endpoint deve validar a assinatura, guardar o evento de forma durável e responder com um código 2xx em até 10 segundos. Processe tarefas demoradas em segundo plano.

  • A entrega ocorre pelo menos uma vez. Elimine duplicidades por id.
  • A ordem de chegada não é garantida. Use created_at para entender a sequência.
  • Há até seis tentativas: imediata e intervalos de 1 minuto, 5 minutos, 30 minutos, 2 horas e 12 horas.
  • Após a última falha, use o reenvio manual na tela Webhooks. A falha de entrega não desfaz uma aprovação.
  • Endereços locais, redes privadas, metadados de nuvem e redirecionamentos são bloqueados.

Referência de eventos

EventoQuando acontece
checkin.receivedRecebimento aceito e persistido.
checkin.approvedValidação aprovada. Não comprova passagem por catraca.
checkin.rejectedValidação rejeitada de forma conclusiva.
checkin.expiredPrazo de validação encerrado.
checkin.validation_failedFalha ou resultado inconclusivo na validação.

version identifica a versão do envelope. Identificadores de visitantes pertencem ao provedor: a mesma pessoa em dois provedores não é unificada automaticamente. Não confunda check-in com matrícula ou repasse financeiro.

Verificar assinatura

O cabeçalho x-wellbhook-signature tem formato t=timestamp,v1=hex. A assinatura é HMAC-SHA256 de timestamp.corpoOriginal. Preserve o corpo original; converter o JSON e serializar novamente pode alterar a assinatura. Rejeite timestamps com mais de cinco minutos e compare em tempo constante.

// app/api/wellbhook/route.ts — Next.js
import { createHmac, timingSafeEqual } from "node:crypto";

export async function POST(request: Request) {
  const rawBody = await request.text();
  const header = request.headers.get("x-wellbhook-signature") ?? "";
  const match = /^t=(\d+),v1=([a-f0-9]{64})$/.exec(header);
  if (!match) return new Response("Invalid signature", { status: 401 });
  const [, timestamp, received] = match;
  const age = Math.abs(Date.now() / 1000 - Number(timestamp));
  const secret = process.env.WELLBHOOK_WEBHOOK_SECRET;
  if (!secret) return new Response("Not configured", { status: 503 });
  if (!timestamp || !Number.isFinite(age) || age > 300) {
    return new Response("Expired", { status: 401 });
  }
  const expected = createHmac("sha256", secret)
    .update(timestamp + "." + rawBody).digest("hex");
  if (!/^[a-f0-9]{64}$/.test(received) ||
      !timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
    return new Response("Invalid signature", { status: 401 });
  }
  const event = JSON.parse(rawBody);
  // Persistir em uma transação com índice UNIQUE em event.id.
  // Enfileirar o processamento antes de responder 200.
  return Response.json({ received: true });
}

Ao rotacionar o segredo, atualize seu receptor antes de novos testes. A chave exibida deve ser guardada com segurança; não será incluída em relatórios ou logs.

Consultar pela API

Crie uma chave em Configurações e envie no cabeçalho Authorization. As chaves têm acesso somente de leitura aos dados da sua academia e ao ambiente selecionado na criação. Um filtro não altera o ambiente autorizado pela chave. Revogue imediatamente chaves que não usa mais.

curl "https://wellbhook.com.br/api/v1/checkins?environment=DEMO&limit=25" \
  -H "Authorization: Bearer SUA_CHAVE"

curl "https://wellbhook.com.br/api/v1/events?environment=DEMO&limit=25" \
  -H "Authorization: Bearer SUA_CHAVE"

As consultas aceitam environment, unitId, provider, from, to, limit e cursor. Use o nextCursor retornado para buscar a página seguinte. Limite máximo: 100 registros por chamada.

A exportação CSV no painel aplica os mesmos filtros. Métricas representam os eventos registrados desde a ativação da conexão.

Integre com seu agente

Use uma skill para orientar a implementação e o MCP para consultar check-ins e eventos com a mesma chave de API. O kit inclui instruções para Codex e um plugin local para Claude Code.

Guia para agentes

Comece em Demonstração. O MCP oferece consultas; a configuração e os testes operacionais continuam disponíveis no painel.

Solução de problemas

Meu webhook não recebeu o evento.

Confira unidade, ambiente e seleção de eventos. Abra a entrega para ver a tentativa mais recente. Se o destino respondeu com erro ou excedeu 10 segundos, uma nova tentativa será agendada.

O check-in foi aprovado, mas a entrega falhou.

São processos independentes. Corrija o receptor e use Reenviar na entrega. A aprovação continuará registrada.

Recebi o mesmo evento mais de uma vez.

Isso faz parte da garantia de entrega. Mantenha id como chave única no receptor e responda 2xx para eventos já processados.

A conexão real está pendente.

Confira os requisitos do provedor na tela Conexões. O modo real só fica disponível após documentação, credenciais e homologação verificadas.

Os números não coincidem com outro relatório.

Verifique ambiente, período, unidade e fuso horário. O Wellbhook não importa históricos anteriores à ativação nem calcula repasses financeiros.