Base URL https://api.afer.pro aferapp.com
Charters

Ocupación de la flota

POST https://api.afer.pro/consultarOcupacionCharter

La ocupación de cada embarcación en un rango de fechas: días con reserva y porcentaje sobre los días del período.

El KPI número uno de un negocio de charter. Para cada embarcación del tenant cuenta los días del rango con al menos una reserva no cancelada y calcula el porcentaje de ocupación; el bloque flota agrega el total.

Los barcos llegan ordenados de más a menos ocupados. Rango máximo: 1 año.

Autenticación

Envía tus claves API en las cabeceras X-API-KEY y X-API-SECRET. La cuenta sobre la que se opera se resuelve automáticamente a partir de la clave. Cómo obtener tus claves →

Este endpoint requiere autenticación con API key: sin credenciales responde 401.

Parámetros del cuerpo

El cuerpo de la petición es un objeto JSON con Content-Type: application/json.

fecha_iniciodate
obligatorio
Inicio del rango (YYYY-MM-DD), incluido.
fecha_findate
obligatorio
Fin del rango (YYYY-MM-DD), incluido. Máximo 1 año.

Ejemplo de petición

curl -X POST 'https://api.afer.pro/consultarOcupacionCharter' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: afer_tk_TU_TOKEN' \
  -H 'X-API-SECRET: afer_sk_TU_SECRET' \
  -d '{
    "fecha_inicio": "2026-06-01",
    "fecha_fin": "2026-08-31"
}'
<?php

$data = [
  'fecha_inicio' => '2026-06-01',
  'fecha_fin' => '2026-08-31',
];

$ch = curl_init('https://api.afer.pro/consultarOcupacionCharter');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'X-API-KEY: afer_tk_TU_TOKEN',
    'X-API-SECRET: afer_sk_TU_SECRET',
]);

$respuesta = json_decode(curl_exec($ch), true);
curl_close($ch);
const respuesta = await fetch('https://api.afer.pro/consultarOcupacionCharter', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-KEY': 'afer_tk_TU_TOKEN',
    'X-API-SECRET': 'afer_sk_TU_SECRET'
  },
  body: JSON.stringify({
      "fecha_inicio": "2026-06-01",
      "fecha_fin": "2026-08-31"
  })
});

const resultado = await respuesta.json();

Respuesta

200 · application/json
{
    "errorCode": 200,
    "errorMsg": "",
    "data": {
        "fecha_inicio": "2026-06-01",
        "fecha_fin": "2026-08-31",
        "dias_rango": 92,
        "flota": {
            "num_barcos": 2,
            "dias_ocupados": 118,
            "ocupacion_pct": 64.1
        },
        "barcos": [
            {
                "boatId": "aBc123XyZ…",
                "nombre": "Llaut clásico mallorquín",
                "dias_ocupados": 71,
                "dias_rango": 92,
                "ocupacion_pct": 77.2
            },
            {
                "boatId": "dEf456…",
                "nombre": "Lancha 6m sin licencia",
                "dias_ocupados": 47,
                "dias_rango": 92,
                "ocupacion_pct": 51.1
            }
        ]
    }
}
Notas
  • Un día cuenta como ocupado con una sola reserva, aunque el barco tenga varias franjas ese día: es ocupación por días, no por franjas.
  • Incluye todas las embarcaciones del tenant, estén o no publicadas en el marketplace.