Saltar al contenido principal

Autenticación

Integraciones externas de partner​

Usa el header X-API-Key en las rutas externas, por ejemplo /api/partner/*.

X-API-Key: sk_live_your_api_key

Auth es solo API key. No envíes X-API-Secret ni x-api-secret.

Credenciales​

  • La clave de API se crea o se regenera una vez. Activar el acceso (enableApi) no crea una clave nueva. Regenerar devuelve { apiKey } y no hay apiSecret.
  • El secreto HMAC del webhook se muestra una vez al crearlo. Cambiar webhookUrl en admin o en ajustes actualiza la URL del webhook activo y no rota el secreto. Vaciar la URL desactiva los webhooks activos. El primer webhook sale de la aprobación o de crearlo en el portal.
  • Guarda y entrega solo URLs HTTPS públicas. Se rechazan localhost, redes privadas y hosts de metadata. La entrega no sigue redirecciones.

Example​

curl -X GET "https://service-gateway.loscenotes.com/api/partner/cenotes" \
-H "X-API-Key: sk_live_your_api_key" \
-H "Content-Type: application/json"

Otros modelos de auth en la plataforma​

  • Partner portal and management endpoints use JWT
  • Some shared public endpoints do not require API key auth
  • Some operational endpoints, such as on-site checkout confirmation, require role-based authenticated access

Sandbox y WebSocket​

  • Las claves sandbox (sk_test_) sirven para las rutas sandbox del portal, para /api/partner-sandbox/* y para /api/partner/webhooks/simulator/*. No leen ni escriben reservas de producción.
  • sk_test_ no puede llamar /api/partner/* ni otras rutas partner de producción. La respuesta es 403 error.partner.sandbox_key_not_allowed_on_production_api. Usa sk_live_ en todos los ejemplos de /api/partner/*.
  • Tiempo real. Abre Socket.IO en https://service-gateway.loscenotes.com/partner/ws.
    • Usuario del portal: auth.token del handshake con el JWT, o header Authorization: Bearer <jwt>.
    • API key: auth.apiKey del handshake con sk_live_.... sk_test_ se rechaza.
    • Si entra, el servidor emite connected con partnerId, authMode (jwt o api_key) y timestamp.
    • Envía subscribe con { "events": ["*"] } o una lista de nombres de evento. Hasta que te suscribes, el socket sigue abierto y no entrega eventos del partner. ping se responde con pong.
    • Si falla, el servidor emite error y cierra el socket.

Forma de error​

Current API errors are returned in the enhanced global format:

{
"success": false,
"message": "validation.invalid_data",
"error": "Bad Request",
"statusCode": 400,
"timestamp": "2026-03-10T18:00:00.000Z",
"path": "/api/partner/cenotes"
}