Saltar al contenido

Desarrolladores

Fechas, zonas horarias e importes

ISO 8601 con el desfase horario del club, horas sin offset e importes en céntimos con moneda.

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:MM o YYYY-MM-DDTHH:MM:SS
  • con un offset opcional: Z o +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_cents es el precio aplicado. Si no enviaste ninguno, es el precio que calculó Pranarp Club, o null si no hay precio.
  • price.paid_externally indica 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_cents debe ser un entero mayor o igual que 0.

Para conocer el precio calculado antes de reservar, usa GET /quote.