Las fechas y los importes siguen reglas fijas en toda la API. Fíjate en ellas desde el principio y te ahorrarás los errores más típicos de integración.
Fechas: ISO 8601 con el desfase del club
Cada club tiene una zona horaria (por ejemplo Europe/Madrid). Todas las fechas y horas que devuelve la API son ISO 8601 con el desfase (offset) de esa zona en el instante concreto:
2026-10-22T18:00:00+02:00 (horario de verano)
2026-12-15T18:00:00+01:00 (horario de invierno)
Esto incluye starts_at, ends_at, created_at, updated_at, canceled_at, expires_at y las franjas de disponibilidad. La zona horaria del club aparece también en la respuesta de /availability (timezone).
Guarda y compara instantes, no horas locales sueltas. Dos valores con distinto offset pueden ser el mismo instante.
Fechas que envías
En los parámetros de consulta y en los cuerpos (from, to, starts_at, ends_at) acepta ISO 8601 estricto:
YYYY-MM-DDTHH:MMoYYYY-MM-DDTHH:MM:SS- con un offset opcional:
Zo+HH:MM/-HH:MM
Si no incluyes offset, la hora se interpreta en la zona horaria del club. Ejemplos válidos, todos equivalentes en un club de Madrid en octubre:
2026-10-22T18:00:00+02:00
2026-10-22T16:00:00Z
2026-10-22T18:00
En las URLs, recuerda codificar el + como %2B (o usa curl --data-urlencode):
curl -s -G "$PRANARP_URL/api/v1/bookings" \
-H "Authorization: Bearer $PCK_TOKEN" \
--data-urlencode "from=2026-10-22T00:00:00+02:00" \
--data-urlencode "to=2026-10-23T00:00:00+02:00"
Formatos que no son ISO 8601 (por ejemplo 22/10/2026 18:00) devuelven 422 validation_failed.
Cambios de hora
En los días en que el club cambia de horario, un día no dura 24 horas. Usa siempre los offsets que te devuelve la API (por ejemplo, de availability) en lugar de sumar horas a mano.
Importes: céntimos y moneda
Los importes son números enteros en la unidad menor de la moneda (céntimos), nunca decimales, y van acompañados de currency:
{
"price": {
"amount_cents": 2400,
"currency": "EUR",
"paid_externally": true
}
}
2400 son 24,00 EUR. Evita los errores de redondeo trabajando con enteros y convirtiendo a decimal solo al mostrarlos.
En una reserva:
price.amount_centses el precio aplicado. Si no enviaste ninguno, es el precio que calculó Pranarp Club, onullsi no hay precio.price.paid_externallyindica que el cobro se hizo fuera de Pranarp Club. El cobro lo gestiona tu sistema; Pranarp Club solo registra la información.- Al crear o modificar una reserva,
price.amount_centsdebe ser un entero mayor o igual que 0.
Para conocer el precio calculado antes de reservar, usa GET /quote.