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_iddel 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=cursorhabilita cursor pagination.per_pagetamaño de página (recomendado 1000–2000 para 20k+).- Respuesta incluye
meta.cursor.next_cursorymeta.cursor.prev_cursor. - Con cursor sólo se permite
order_by=id.
participant_id(opcional, integer) - Filtrar por ID específico de participanteevent_id(opcional, integer) - Filtrar por ID de eventostatus(opcional, string) - Filtrar por estado del participantebib(opcional, string) - Filtrar por número de BIBfrom(opcional, Y-m-d) - Fecha de inicio para filtrar por fecha de creaciónto(opcional, Y-m-d) - Fecha de fin para filtrar por fecha de creaciónsearch(opcional, string) - Búsqueda en nombre, apellido, email, teléfono, locator, notasorder_by(opcional, string) - Campo de ordenación: id|created_at|status|bib|evento_idorder_dir(opcional, string) - Dirección de ordenación: asc|descper_page(opcional, integer) - Número de elementos por página (respeta límites de configuración)
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
enableddeorganizer_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.
event_id(obligatorio, integer, en la ruta) - Evento cuyo formulario se consulta.
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 enform_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 lassubquestionsque desbloquea cada opción.subquestions- Subpreguntas anidadas del campo.
Configuración por organizador
Tabla:organizer_api_settings
enabledrate_limit_per_minutedefault_page_sizemax_page_sizeip_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 scopesupervisor-api.
Carga masiva (mejores prácticas):
- Se aceptan lotes grandes (ej. 20k). Si el array
updatessupera 1000 elementos, el servidor lo divide en chunks y procesa en background con la cola. - Respuesta inmediata con
202 Acceptedy meta de chunks. Consulta logs para ver el progreso. - Tamaños ≤1000 se procesan de forma síncrona con respuesta 200.
- Autorización: Bearer Token (Sanctum) con scope
organizer-api. - Roles: Organizador o Administrador.
- Seguridad adicional: Cabecera opcional
X-Organizer-Idpara reforzar pertenencia. - Validaciones: Solo JSON; rechazo de contenido sospechoso (script, javascript:, on* handlers, data:text/html) en objetos
competition_resultsydetails.
bib(String, opcional) - Número de BIB del participanteobservations(String, opcional) - Observaciones generales sobre el participanteparticipation_notes(String, opcional) - Notas específicas de participacióncompetition_results(JSON Object, opcional) - Resultados de competición en formato JSONdetails(JSON Object, opcional) - Detalles adicionales del participante en formato JSON
evento_id, locator, order_id, user_id, created_by, updated_by, deleted_by, status.
Body (JSON):
