Check-in
Puertas de acceso (puntos)
Sección titulada «Puertas de acceso (puntos)»Cada entrada tiene un punto de acceso:
curl -X POST http://localhost:5000/puntos/?eventoId=<uuid> \ -H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \ -d '{"nombre":"Puerta Norte"}'PATCH /puntos/{id}con{ "activo": false }cierra la puerta: mientras esté inactiva, escanear responde409 "Punto de acceso inactivo".DELETE /puntos/{id}responde409si ya tiene escaneos registrados.GET /puntos/?eventoId=…lista las puertas del evento.
Escanear
Sección titulada «Escanear»curl -X POST http://localhost:5000/checkin/escanear \ -H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \ -d '{ "eventoId": "<uuid>", "puntoAccesoId": "<uuid>", "usuarioAdminId": "<uuid>", "codigo": "codigo-qr-del-boleto", "dispositivo": "tablet-entrada" }'Responde siempre 200 con el resultado (un escaneo rechazado no es
error HTTP):
{ "resultado": "valido", "boletoId": "…", "reservaId": "…", "mensaje": "Entrada permitida"}resultado |
Cuándo |
|---|---|
valido |
QR correcto, firma OK, no usado — primer ingreso |
duplicado |
El boleto ya entró (un boleto = un ingreso) |
revocado |
El boleto fue revocado |
no_encontrado |
El código no corresponde a ningún boleto |
Al valido se marca además la asistencia del participante
(registrado → asistio).
Errores HTTP: 409 si el punto está inactivo; 400/404 si algo del
evento no existe.
Bitácora y conteos
Sección titulada «Bitácora y conteos»# Escaneos paginados con filtros (cursor por fecha)GET /checkin/?eventoId=<uuid>&resultado=duplicado&desde=2026-12-18T00:00:00Z&hasta=…&limit=50
# Foto de accesos para el dashboardGET /checkin/conteo?eventoId=<uuid>El conteo devuelve { total, validos, duplicados, revocados, noEncontrados } agrupado por resultado.
Incidencias
Sección titulada «Incidencias»Para lo que ocurre en puerta y no es un escaneo: QR ilegible, cambio de mesa, persona no listada:
curl -X POST http://localhost:5000/incidencias/?eventoId=<uuid> \ -H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \ -d '{ "tipo": "cambio_mesa", "participanteId": "<uuid>", "mesaId": "<uuid>", "descripcion": "Pidió cambiar a mesa de sombra", "abiertaPor": "<uuid-admin>" }'tipo ∈ qr_ilegible | cambio_mesa | no_listado. Seguimiento:
PATCH /incidencias/{id} -d '{"estado":"en_proceso"}'PATCH /incidencias/{id} -d '{"estado":"resuelta"}' # guarda resueltaAtGET /incidencias/?eventoId=… filtra por estado;
GET /incidencias/{id} devuelve la ficha con los involucrados
(participante, mesa).