Conceptos
Zonas horarias
Los instantes van en ISO 8601 y UTC. Donde una persona lee una hora, la hora local del recinto aparece al lado, con la zona horaria del evento.
Dos tipos de hora
Los instantes indican cuándo pasó o pasará algo: una inscripción, un pago, un registro de entrada, el inicio de una sesión. Van en ISO 8601 y UTC, con milisegundos y una Z, y sus nombres terminan en Utc:
"checkedInUtc": "2026-11-12T07:58:12.000Z"Las horas locales son lo que una persona en el recinto lee en la agenda. Las sesiones, los turnos, los códigos de descuento y los periodos de venta las llevan junto al instante, en la hora propia del recinto, sin zona, y sus nombres terminan en Local:
{
"title": "Opening keynote: software that finds its way",
"startsUtc": "2026-11-12T08:30:00.000Z",
"startsLocal": "2026-11-12T09:30",
"timeZone": "Europe/Amsterdam"
}El evento indica la zona horaria IANA de su recinto en timeZone. Sus startDate y endDate son fechas simples en el recinto.
Cuál usar
- Para comparar, ordenar, guardar o calcular: el instante, en UTC.
- Para mostrar una hora a alguien: la hora local tal cual, o el instante convertido a la
timeZonedel evento. Nunca a la zona de tu servidor: una sesión a las 09:30 en Ámsterdam es a las 09:30 para todos los que asisten, esté donde esté su portátil. - Los cambios de hora ya están incluidos: una sesión el último domingo de octubre tiene el instante UTC correcto para su hora local.
Cómo enviar horas
Los instantes que envías (salesEndUtc, endsUtc) se leen como UTC digan lo que digan: un desfase como +01:00 se respeta, y una hora sin desfase es UTC, nunca la zona del servidor. Con updatedSince ocurre lo mismo.
Una sesión nueva se puede indicar en hora local (startsLocal, endsLocal), y AttendBeacon la convierte con la zona horaria del evento, o en UTC (startsUtc, endsUtc). Lo habitual es tener la hora local: es lo que se acordó con el ponente.
curl -X POST "https://attendbeacon.com/api/v1/events/b3ac0000-0000-4000-8000-000000000001/sessions" \
-H "Authorization: Bearer $ATTENDBEACON_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Closing keynote: what we learned", "kind": "keynote", "startsLocal": "2026-11-13T16:30", "endsLocal": "2026-11-13T17:15" }'await fetch(`${base}/events/${eventId}/sessions`, {
method: "POST",
headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" },
body: JSON.stringify({ title: "Closing keynote: what we learned", kind: "keynote", startsLocal: "2026-11-13T16:30", endsLocal: "2026-11-13T17:15" })
});Días en los resúmenes
Donde la API cuenta por día (el ritmo de ventas), los días son los del recinto en su zona horaria, así que una inscripción a las 00:30 en Ámsterdam cuenta en ese día, no en el día anterior en UTC.