Files
AnchorOS/API_TESTING_GUIDE.md

5.6 KiB

AnchorOS API Testing Guide

📋 Rutas a Probar - Testing Endpoints

🔐 Autenticación

  • POST /api/auth/login - Login de usuario
    • Body: { email, password }
    • Buscar: Token JWT en respuesta
  • POST /api/auth/register - Registro de cliente
    • Body: { first_name, last_name, email, phone, password }
    • Buscar: Usuario creado con ID

👥 Gestión de Clientes

  • GET /api/customers - Listar clientes
    • Headers: Authorization Bearer token
    • Buscar: Array de clientes con datos completos
  • POST /api/customers - Crear cliente
    • Headers: Authorization Bearer token
    • Body: { first_name, last_name, email, phone }
    • Buscar: Cliente creado
  • GET /api/customers/[id] - Detalles de cliente
    • Buscar: Datos completos del cliente + bookings

💺 Reservas (Bookings)

  • GET /api/bookings - Listar reservas
    • Query params: ?status=confirmed&date=2024-01-01
    • Buscar: Array de bookings con relaciones (customer, service, staff)
  • POST /api/bookings - Crear reserva
    • Body: { customer_id, service_id, staff_id, location_id, date, notes }
    • Buscar: Booking creado + email enviado automáticamente
  • PUT /api/bookings/[id] - Actualizar reserva
    • Body: { status: 'confirmed' }
    • Buscar: Status actualizado
  • DELETE /api/bookings/[id] - Cancelar reserva
    • Buscar: Status cambiado a 'cancelled'

🏢 Ubicaciones

  • GET /api/locations - Listar ubicaciones
    • Buscar: Array de locations con servicios disponibles

👨‍💼 Staff

  • GET /api/staff - Listar personal
    • Buscar: Array de staff con especialidades

💅 Servicios

  • GET /api/services - Listar servicios
    • Buscar: 22 servicios de Anchor 23 con precios

📅 Disponibilidad

  • GET /api/availability?service_id=1&date=2024-01-01&location_id=1
    • Buscar: Slots disponibles por staff
  • POST /api/availability/blocks - Bloquear horario
    • Body: { staff_id, start_time, end_time, reason }
    • Buscar: Bloqueo creado

🏪 Kiosk (Auto-servicio)

  • GET /api/kiosk/locations - Ubicaciones disponibles
    • Buscar: Locations con servicios activos
  • POST /api/kiosk/bookings - Reserva desde kiosk
    • Body: { service_id, customer_data, date }
    • Buscar: Booking creado + email enviado
  • POST /api/kiosk/walkin - Reserva inmediata
    • Body: { service_id, customer_data }
    • Buscar: Booking inmediato confirmado

📊 Aperture (Dashboard Admin)

  • GET /api/aperture/stats - Estadísticas generales
    • Buscar: Métricas de negocio (revenue, bookings, etc.)
  • GET /api/aperture/reports - Reportes detallados
    • Buscar: Datos para gráficos y análisis
  • GET /api/aperture/pos - Sistema POS
    • Buscar: Servicios disponibles para venta

🧾 Recibos

  • GET /api/receipts/[bookingId] - Descargar PDF
    • Buscar: PDF generado con datos de reserva
  • POST /api/receipts/[bookingId]/email - Enviar por email
    • Buscar: Email enviado con PDF adjunto

⚙️ Sistema

  • GET /api/health - Health check
    • Buscar: { status: 'ok' }
  • POST /api/cron/reset-invitations - Reset diario
    • Buscar: Invitaciones expiradas reseteadas

📧 Webhooks (Formularios Públicos)

  • POST https://flows.soul23.cloud/webhook-test/4YZ7RPfo1GT - Webhook test
    • Body: Payload completo con form type
    • Buscar: 200 OK + acknowledgment
  • POST https://flows.soul23.cloud/webhook/4YZ7RPfo1GT - Webhook prod
    • Body: Payload completo con form type
    • Buscar: 200 OK + acknowledgment

Form Types disponibles:

  • contact - Formulario de contacto
  • franchise - Solicitud de franquicia
  • membership - Solicitud de membresía

Payload Base:

{
  "form": "contact|franchise|membership",
  "timestamp_utc": "2026-01-18T04:26:30.187Z",
  "device_type": "mobile|desktop|unknown"
}

Contact Payload:

{
  "form": "contact",
  "nombre": "Nombre Completo",
  "email": "email@example.com",
  "telefono": "+52 844 123 4567",
  "motivo": "cita|membresia|franquicia|servicios|pago|resena|otro",
  "mensaje": "Texto del mensaje",
  "timestamp_utc": "2026-01-18T04:26:30.187Z",
  "device_type": "mobile"
}

Franchise Payload:

{
  "form": "franchise",
  "nombre": "Nombre Completo",
  "email": "email@example.com",
  "telefono": "+52 844 123 4567",
  "ciudad": "Monterrey",
  "estado": "Nuevo León",
  "socios": 2,
  "experiencia_sector": "1-3-anos",
  "experiencia_belleza": true,
  "mensaje": "Mensaje adicional",
  "timestamp_utc": "2026-01-18T04:26:30.187Z",
  "device_type": "desktop"
}

Membership Payload:

{
  "form": "membership",
  "membership_id": "vip",
  "nombre": "Nombre Completo",
  "email": "email@example.com",
  "telefono": "+52 844 123 4567",
  "mensaje": "Pregunta específica",
  "timestamp_utc": "2026-01-18T04:26:30.187Z",
  "device_type": "mobile"
}

🔍 Qué Buscar en Cada Respuesta

Éxito

  • Status codes: 200, 201
  • Estructura de datos correcta
  • Relaciones cargadas (joins)
  • Emails enviados (para bookings)

Errores

  • Status codes: 400, 401, 403, 404, 500
  • Mensajes de error descriptivos
  • Validación de datos
  • Autenticación requerida

🔄 Estados

  • Bookings: pendingconfirmedcompleted
  • Pagos: pendingpaid
  • Recursos: availablebooked

🧪 Casos de Edge

  • Autenticación: Token expirado, permisos insuficientes
  • Reservas: Doble booking, horarios conflictivos
  • Pagos: Montos inválidos, métodos no soportados
  • Kiosk: Datos faltantes, servicios no disponibles

📈 Performance

  • Response time < 500ms para GET
  • Response time < 2s para POST complejos
  • Conexiones concurrentes soportadas