Skip to content

API Reference — Visão Geral

Base URL

https://apicrm.galdix.com.br

Em desenvolvimento local: http://localhost:3001

Autenticação

A maioria dos endpoints requer autenticação via Bearer token do Clerk.

http
Authorization: Bearer <clerk_jwt_token>

O token é obtido automaticamente pelo SDK do Clerk no frontend. Em testes manuais (curl/Postman), gere um token na dashboard do Clerk.

Endpoints públicos (sem auth)

Endpoints marcados com @Public() no código não precisam de token:

  • GET /webhooks/whatsapp — verificação de hub Meta
  • POST /webhooks/whatsapp — webhooks Meta (HMAC em vez de JWT)
  • POST /webhooks/clerk — webhooks Clerk (Svix signature)
  • GET /go/:token — redirect de campanha
  • GET /go/unsubscribe/:token — opt-out WhatsApp
  • GET/POST /public/survey/* — pesquisas de satisfação
  • GET/POST /email-tracking/* — rastreamento de email

Endpoints internos (Internal API Key)

Alguns endpoints são protegidos por INTERNAL_API_KEY em vez de JWT:

http
Authorization: Bearer <INTERNAL_API_KEY>

Padrões de resposta

Sucesso

json
// Lista paginada
{
  "data": [...],
  "total": 150,
  "page": 1,
  "limit": 20
}

// Objeto único
{
  "id": "...",
  "field": "value"
}

Erro

json
{
  "statusCode": 400,
  "message": "Validation failed",
  "error": "Bad Request"
}

Códigos de status

CódigoSignificado
200OK
201Created
204No Content
400Bad Request (validação)
401Unauthorized (token ausente ou inválido)
403Forbidden (sem permissão ou role insuficiente)
404Not Found
409Conflict (recurso já existe)
429Too Many Requests (rate limit)
500Internal Server Error

Headers importantes

HeaderDescrição
x-correlation-idUUID de rastreamento da request (gerado automaticamente se ausente)
x-org-idOverride de organização (apenas Super Admin)
AuthorizationBearer token do Clerk ou Internal API Key
x-hub-signature-256HMAC-SHA256 para webhooks Meta
svix-id, svix-timestamp, svix-signatureHeaders de autenticação de webhooks Clerk

Rate limiting

Endpoints específicos têm limites próprios:

EndpointLimite
POST /users/invite30 requests / 60s
PATCH /users/:id/role20 requests / 60s
POST /webhooks/whatsapp100 requests / 60s

Multi-tenancy

Todos os dados são isolados por organização. O organizationId é extraído automaticamente do JWT do Clerk — nunca passe o organizationId como parâmetro em endpoints normais.

Exceção: Super Admin pode passar o header x-org-id para impersonar uma organização.

Correlação de logs

Cada request recebe um x-correlation-id único. Inclua esse ID ao reportar bugs para facilitar a busca nos logs.

bash
curl -H "Authorization: Bearer ..." \
     -v https://apicrm.galdix.com.br/health
# Header de resposta: x-correlation-id: <uuid>

Documentação interna — Galdix CRM