Autenticación requerida
Todas las solicitudes deben incluir token JWT (excepto /login).
Authorization: Bearer {access_token}
POST

Autenticación · Obtener Token

/api/v2/auth/login

Endpoint público para obtener token JWT mediante credenciales.

{
    "username": "agente_ventas",
    "password": "*******"
}
{
    "nombre": "Carlos",
    "paterno": "Torres",
    "materno": null,
    "email": null,
    "habitat": "Xcaret",
    "puesto": null,
    "perfil": "Cajero",
    "preferencias": {
        "idiomaId": 1,
        "agenciaId": 28044,
        "medioVentaId": 6,
        "configurarUpgrade": false,
        "configurarFyV": false
    },
    "permisos": {
        "disponibilidadTemporal": false
    },
    "token": {
        "accessToken": "eyJhbGciOiJIUzI1NiIs...",
        "expirationMinutes": 60,
        "tokenType": "Bearer"
    }
}
El token debe incluirse en el header Authorization: Bearer {accessToken} para los reportes.
GET

Reporte de comisiones

/api/v2/reportes/comisiones

Devuelve el detalle de comisiones generadas por reservas dentro de un rango de fechas y hábitat específico.

Parámetros de consulta

Parámetro Tipo Requerido Descripción Ejemplo
FechaInicio string (date) requerido Fecha inicial, formato ISO (YYYY-MM-DD). 2026-05-10
FechaFin string (date) requerido Fecha final, formato ISO (YYYY-MM-DD). Máximo 31 días después de FechaInicio. 2026-05-12
HabitatId integer (int32) requerido Identificador del hábitat. 3 = Xcaret | 4 = Xel-Ha
curl -X GET "https://reservasapi.delphinus.com.mx/api/v2/reportes/comisiones?FechaInicio=2026-12-01&FechaFin=2026-12-15&HabitatId=3" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ2VudGVfdmVudGFzIn0.abc" \
  -H "Accept: application/json"
GET /api/v2/reportes/comisiones?FechaInicio=2026-12-01&FechaFin=2026-12-15&HabitatId=3 HTTP/1.1
Host: https://reservasapi.delphinus.com.mx
Authorization: Bearer {access_token}
[
  {
    "guia": "GUID-1001",
    "confirma": "DEL-99801",
    "ticket": 4421,
    "claveGuia": "CUN-DF-01",
    "servicio": "Nado con Delfines Plus",
    "importeUsd": 125.50,
    "importeMxn": 2572.75,
    "importeUsdSinIva": 108.19,
    "fecha": "2026-12-05",
    "agencia": "Agencia Cancún"
  }
]
Puede devolver array vacío [] si no existen comisiones en el rango.
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "Bad Request",
  "status": 400,
  "detail": "Error en los parámetros de la petición.",
  "instance": null,
  "code": "Parameters.Invalid",
  "traceId": null,
  "errors": {
    "fechaFin": [
      "El rango de fechas no puede exceder los 31 días."
    ]
  }
}
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.2",
  "title": "Unauthorized",
  "status": 401,
  "detail": "Acceso no autorizado. Token inválido o expirado.",
  "instance": null,
  "code": "Auth.Unauthorized",
  "traceId": null,
  "errors": { }
}
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.6.1",
  "title": "Internal Server Error",
  "status": 500,
  "detail": "Ocurrió un error interno inesperado.",
  "instance": null,
  "code": "Server.InternalError",
  "traceId": null,
  "errors": { }
}

Modelos de datos

string → Valor obligatorio
string nullable → Puede ser string o null
string opcional → Puede estar ausente
string | null → Mismo que nullable
// ---------- LoginRequest (Request Body) ----------
{
  "username": "string",   // Requerido
  "password": "string"    // Requerido
}

// ---------- LoginResponse (200 OK) ----------
{
  "nombre": "string",          // Nombre del usuario
  "paterno": string | null,   // Puede ser null
  "materno": string | null,   // Puede ser null
  "email": string | null,     // Puede ser null
  "habitat": "string",
  "puesto": string | null,
  "perfil": "string",
  "preferencias": {            // Objeto anidado
    "idiomaId": 1,
    "agenciaId": 28044,
    "medioVentaId": 7,
    "configurarUpgrade": false,
    "configurarFyV": false
  },
  "permisos": {
    "disponibilidadTemporal": false
  },
  "token": {
    "accessToken": "jwt_token",
    "expirationMinutes": 60,
    "tokenType": "Bearer"
  }
}

// Ejemplo con valores null
{
  "nombre": "Carlos",
  "paterno": null,            // ← null explícito
  "materno": null,
  "email": null,
  "habitat": "Cancún",
  "puesto": null,
  ...
}
Propiedades con nullable pueden ser null o un string válido.
{
                                 // Todos los campos son obligatorios y siempre presentes
  "guia": "string",              // Nombre del guía
  "confirma": "string",          // Confirmación de la reserva
  "ticket": 0,                   // Número de ticket (integer)
  "claveGuia": "string",         // Clave del guía
  "servicio": "string",          // Nombre del servicio
  "importeUsd": 0.0,             // Importe en dólares (double)
  "importeMxn": 0.0,             // Importe en pesos mexicanos (double)
  "importeUsdSinIva": 0.0,       // Importe en USD sin IVA (double)
  "fecha": "2026-12-31",         // Fecha en formato YYYY-MM-DD
  "agencia": "string"            // Nombre de la agencia
}
{
  "type": string | null,     // URI del tipo de error
  "title": string | null,    // Título legible del error
  "status": 400,              // Código HTTP (integer)
  "detail": string | null,   // Descripción detallada
  "instance": string | null, // URI que identifica la instancia
  "code": string,           // Código del error
  "traceId": string | null,  // TraceId del error
  "errors": { },            // Diccionario de errores
}

// Ejemplo con valores reales
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "Bad Request",
  "status": 400,
  "detail": "Error en los parámetros de la petición.",
  "instance": null,
  "code": "Parameters.Invalid",
  "traceId": null,
  "errors": {
    "fechaFin": [
      "El rango de fechas no puede exceder los 31 días."
    ]
  }
}
Nota sobre campos nullable: En la respuesta, recibirás el valor o explícitamente null.