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

Detalle de un barco

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

Devuelve el detalle completo de una embarcación de la flota: datos comerciales, todas sus imágenes y sus franjas con precios.

La ficha completa de un barco concreto, identificado por el boatId cifrado que devuelve listCharters.

La estructura es la misma que en el listado, con dos diferencias: incluye internal_product_name (el nombre interno del producto en Afer) y devuelve todas las imágenes del barco, no solo las tres primeras.

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 →

Parámetros del cuerpo

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

charterIdstring
obligatorio
Identificador cifrado del barco (el boatId de listCharters).

Ejemplo de petición

curl -X POST 'https://api.afer.pro/getCharter' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: afer_tk_TU_TOKEN' \
  -H 'X-API-SECRET: afer_sk_TU_SECRET' \
  -d '{
    "charterId": "dEf789…"
}'
<?php

$data = [
  'charterId' => 'dEf789…',
];

$ch = curl_init('https://api.afer.pro/getCharter');
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/getCharter', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-KEY': 'afer_tk_TU_TOKEN',
    'X-API-SECRET': 'afer_sk_TU_SECRET'
  },
  body: JSON.stringify({
      "charterId": "dEf789…"
  })
});

const resultado = await respuesta.json();

Respuesta

Devuelve un array con el barco solicitado (misma estructura que boat en listCharters, más internal_product_name). El array llega vacío si el barco no está publicado o no tiene ninguna franja con precio.

200 · application/json
{
    "errorCode": 200,
    "errorMsg": "",
    "data": [
        {
            "boatId": "dEf789…",
            "internal_product_name": "LLAUT-01 Temporada 2026",
            "title_es_es": "Llaut clásico mallorquín",
            "title_en_uk": "Classic Mallorcan llaut",
            "url_booking_web": "https://bookings.tuempresa.com/llaut-clasico",
            "capacity_people": 8,
            "requires_license": "no",
            "refundable_deposit": "300",
            "departure_port": {
                "name": "Port d'Alcúdia",
                "google_maps_url": "https://maps.app.goo.gl/…"
            },
            "images": [
                {
                    "url": "https://prosuite.aferapp.com/attachments/public/upload/products/1234/foto1.jpg"
                },
                {
                    "url": "https://prosuite.aferapp.com/attachments/public/upload/products/1234/foto2.jpg"
                }
            ],
            "time_slots": {
                "gHi012…": {
                    "title_es_es": "Día completo",
                    "check_in_time": "10:00",
                    "check_out_time": "18:00",
                    "requires_skipper": "no",
                    "available_in_month_6": "yes",
                    "price_in_month_6": 450
                }
            }
        }
    ]
}

Errores

CasoResultado
charterId ausente errorMsg "Error on service call: Boat id is empty."
Barco no publicado o sin franjas con precio data = [].