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çãoTudo o que você precisa para levar os check-ins até o sistema da sua academia.
Demonstração e operação real são ambientes separados. Eventos fictícios sempre têm environment: "demo".
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çãoO 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 oficialA 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.
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.
id.created_at para entender a sequência.| Evento | Quando acontece |
|---|---|
checkin.received | Recebimento aceito e persistido. |
checkin.approved | Validação aprovada. Não comprova passagem por catraca. |
checkin.rejected | Validação rejeitada de forma conclusiva. |
checkin.expired | Prazo de validação encerrado. |
checkin.validation_failed | Falha 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.
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.
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.
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.
Comece em Demonstração. O MCP oferece consultas; a configuração e os testes operacionais continuam disponíveis no painel.
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.
São processos independentes. Corrija o receptor e use Reenviar na entrega. A aprovação continuará registrada.
Isso faz parte da garantia de entrega. Mantenha id como chave única no receptor e responda 2xx para eventos já processados.
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.
Verifique ambiente, período, unidade e fuso horário. O Wellbhook não importa históricos anteriores à ativação nem calcula repasses financeiros.