Skip to main content

API de Organizador

Este documento recopila y estandariza la documentación de la API para Organizadores.

Autenticación

  • Bearer Token (Sanctum Personal Access Tokens)
  • Scope requerido: organizer-api
  • Acceso restringido al organizador_id del propietario del token

Supervisor

  • Bearer Token (Sanctum Personal Access Tokens)
  • Scope requerido: supervisor-api
  • Acceso a participantes de todos los eventos

Límite de peticiones

  • RateLimiter: organizer-api
  • Valor por defecto: 60 req/min, configurable por organizador

Endpoints

GET /api/v1/organizer/participants

Obtiene participantes de eventos del organizador autenticado.

GET /api/v1/supervisor/participants

Obtiene participantes de todos los eventos (requiere rol Supervisor o Administrador). Parámetros (query): iguales a los del organizador. Paginación por cursor (recomendado para grandes volúmenes):
  • pagination=cursor habilita cursor pagination.
  • per_page tamaño de página (recomendado 1000–2000 para 20k+).
  • Respuesta incluye meta.cursor.next_cursor y meta.cursor.prev_cursor.
  • Con cursor sólo se permite order_by=id.
Ejemplos:
Parámetros (query):
  • participant_id (opcional, integer) - Filtrar por ID específico de participante
  • event_id (opcional, integer) - Filtrar por ID de evento
  • status (opcional, string) - Filtrar por estado del participante
  • bib (opcional, string) - Filtrar por número de BIB
  • from (opcional, Y-m-d) - Fecha de inicio para filtrar por fecha de creación
  • to (opcional, Y-m-d) - Fecha de fin para filtrar por fecha de creación
  • search (opcional, string) - Búsqueda en nombre, apellido, email, teléfono, locator, notas
  • order_by (opcional, string) - Campo de ordenación: id|created_at|status|bib|evento_id
  • order_dir (opcional, string) - Dirección de ordenación: asc|desc
  • per_page (opcional, integer) - Número de elementos por página (respeta límites de configuración)
Respuesta: colección de ParticipantResource con meta.filters. Ejemplos:

GET /api/v1/organizer/events//form

GET /api/v1/supervisor/events//form

Devuelve la definición completa del formulario de inscripción del evento indicado: todos los campos configurados con sus nombres, tipos, obligatoriedad, visibilidad, opciones y subpreguntas condicionales. Mismas reglas de seguridad que el endpoint de participantes:
  • Bearer Token (Sanctum) con scope organizer-api / supervisor-api.
  • Organizador o Administrador (organizador), o permiso supervisor-api-participants (supervisor).
  • Respeta enabled de organizer_api_settings / supervisor_api_settings.
  • El evento debe pertenecer al organizador del token; en caso contrario devuelve 404 ORGAPI_404_EVENT_NOT_FOUND.
  • Cada consulta queda registrada en los logs de la API.
Parámetros:
  • event_id (obligatorio, integer, en la ruta) - Evento cuyo formulario se consulta.
Campos devueltos por cada entrada de data.form.fields:
  • position - Orden del campo dentro del formulario.
  • name - Nombre interno configurado en el formulario.
  • input_name - Clave con la que la respuesta del participante viaja en form_data / details.
  • field_key - Clave estable del campo cuando el formulario la define.
  • title / titles - Etiqueta mostrada al participante y sus traducciones cuando existen.
  • description, type, required, visible.
  • is_group_question, hide_for_group, is_checkout_addon - Reglas de visibilidad por tipo de tarifa.
  • show_by_date, start_date, end_date - Ventana temporal de publicación del campo.
  • conditional_logic, rate_visibility, category_config - Configuración avanzada tal cual está guardada.
  • options - Lista de {value, label} para select/radio/checkbox, con las subquestions que desbloquea cada opción.
  • subquestions - Subpreguntas anidadas del campo.
Ejemplos:
Respuesta:

Configuración por organizador

Tabla: organizer_api_settings
  • enabled
  • rate_limit_per_minute
  • default_page_size
  • max_page_size
  • ip_allowlist

Roadmap

  • Nuevos endpoints bajo /api/v1/organizer/*
  • Versionado por encabezado o prefijo v2
  • OpenAPI/Swagger auto-generado

POST /api/v1/organizer/participants

Actualiza participantes por id (masivo por lotes). Sólo se permiten campos no autogenerados.

POST /api/v1/supervisor/participants

Actualiza participantes por id (masivo por lotes). Sólo se permiten campos no autogenerados. Requiere rol Supervisor o Administrador y scope supervisor-api. Carga masiva (mejores prácticas):
  • Se aceptan lotes grandes (ej. 20k). Si el array updates supera 1000 elementos, el servidor lo divide en chunks y procesa en background con la cola.
  • Respuesta inmediata con 202 Accepted y meta de chunks. Consulta logs para ver el progreso.
  • Tamaños ≤1000 se procesan de forma síncrona con respuesta 200.
Body (JSON) y respuesta: iguales al endpoint de organizador. Ejemplo cURL:
Ejemplo masivo (recibirá 202 Accepted):
  • Autorización: Bearer Token (Sanctum) con scope organizer-api.
  • Roles: Organizador o Administrador.
  • Seguridad adicional: Cabecera opcional X-Organizer-Id para reforzar pertenencia.
  • Validaciones: Solo JSON; rechazo de contenido sospechoso (script, javascript:, on* handlers, data:text/html) en objetos competition_results y details.
Campos permitidos por participante:
  • bib (String, opcional) - Número de BIB del participante
  • observations (String, opcional) - Observaciones generales sobre el participante
  • participation_notes (String, opcional) - Notas específicas de participación
  • competition_results (JSON Object, opcional) - Resultados de competición en formato JSON
  • details (JSON Object, opcional) - Detalles adicionales del participante en formato JSON
Campos prohibidos (se rechazan): evento_id, locator, order_id, user_id, created_by, updated_by, deleted_by, status. Body (JSON):
Respuesta 200:
Ejemplo cURL: