Saltar al contenido principal
Dos endpoints complementarios viven fuera de la superficie autenticada, scopeada y con rate limit del API. Usa el que más te convenga:
  • GET /health — sin auth, sin rate limit. Lo usan los uptime monitors y load balancers para verificar que el API está vivo y que la base de datos responde.
  • GET /me — requiere bearer (cualquier scope, incluso vacío). Lo usan los conectores de Make / Zapier como paso de “Probar conexión” para mostrarle al usuario el nombre de su organización y los permisos del bearer.

GET /health

Sonda pública de liveness + readiness. No necesita header Authorization, sin scope, sin rate limit. Verifica que el proceso de Next.js está vivo y que el pool de la BD puede ejecutar un SELECT 1. Diseñado para Uptime Kuma, Pingdom, Better Stack, target groups de AWS ELB, y monitoreo externo similar. Intencionalmente minimal: sin info de versión, sin leak de entorno, nada que un atacante pueda usar para fingerprinting.

Request

curl https://panel.flowestate.app/api/v1/health

Response 200

{
  "ok": true,
  "ts": "2026-04-29T18:04:15.000Z"
}

Response 503

Devuelto cuando la base de datos no es alcanzable desde el tier del API.
{ "ok": false }

Tips para monitorear

  • Usa keyword check sobre "ok":true en lugar de solo status 200. Así, si un edge cache mal configurado sirve un {"ok":false} viejo, no aparece accidentalmente como healthy.
  • No le pegues más rápido que cada 60 segundos. Es un ping a la BD; no lo conviertas en una prueba de carga.
  • No está autenticado. No incluyas headers sensibles cuando lo pruebes.

GET /me

Confirma que un bearer es válido y devuelve la organización a la que está atado. No requiere scope — útil como paso de “Probar conexión” en conectores de Make / Zapier.

Request

curl https://panel.flowestate.app/api/v1/me \
  -H "Authorization: Bearer fe_k_tu_key_aqui"

Response 200

{
  "organization": {
    "id": "org_...",
    "name": "Acme Realty",
    "slug": "acme-realty"
  },
  "auth": {
    "type": "api_key",
    "scopes": ["leads:read", "leads:write"],
    "clientId": null,
    "userId": null
  }
}

Campos

CampoDescripción
organization.idIdentificador interno de la organización.
organization.nameNombre de display.
organization.slugSlug seguro para URLs (puede ser null para orgs viejas).
auth.typeapi_key o oauth.
auth.scopesArray de scopes asociados a este bearer.
auth.clientIdOAuth client ID. Solo presente para auth.type: "oauth".
auth.userIdEl usuario que se autentica. Solo presente para auth.type: "oauth".

Errores

Aplican los errores estándar de auth (401, 403). Ver Autenticación.