Autenticación y base URL
Todas las peticiones administrativas usan tu token de acceso personal, disponible en Ajustes → Perfil → Access Token. Se envía en el header api_access_token y las rutas van bajo tu cuenta.
BASE=https://app.maratons.co/api/v1/accounts/{account_id}
curl -H "api_access_token: TU_TOKEN" \
"$BASE/events"El {account_id} es el ID numérico de tu cuenta (visible en la URL del panel). Las respuestas son JSON.
Editar un evento
Los eventos se administran con los verbos REST estándar: GET /events lista, POST /events crea, GET /events/{id} consulta y PATCH /events/{id} edita. Los campos principales:
- title, description, slug y event_type — identidad del evento.
- event_date, start_time, timezone — fecha y hora de largada.
- location, latitude, longitude — lugar del evento.
- status (draft | published), is_public, is_free, is_featured.
- max_participants, registration_start_date, registration_end_date.
- contact_email, contact_phone, website_url y social_media.
- image_url, banner_image_url, logo_image_url — imágenes del evento.
- white_label_config y custom_fields — branding y datos propios.
curl -X PATCH "$BASE/events/17" \
-H "api_access_token: TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"event": {
"title": "Maratón de los Andes 2026",
"event_date": "2026-11-16",
"max_participants": 2000,
"status": "published"
}
}'Subir imágenes
Las imágenes se suben primero al endpoint de uploads (archivo directo o URL externa), que devuelve la URL del archivo almacenado. Luego asignas esa URL al campo correspondiente del evento.
# 1. Subir el archivo (multipart)
curl -X POST "$BASE/upload" \
-H "api_access_token: TU_TOKEN" \
-F "attachment=@banner.jpg"
# → { "file_url": "https://..." }
# 2. Asignarla al evento
curl -X PATCH "$BASE/events/17" \
-H "api_access_token: TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "event": { "banner_image_url": "https://..." } }'También puedes enviar external_url en lugar de attachment para importar una imagen desde otra URL.
Etapas de venta
Las etapas (Early Bird, Regular, Última hora) viven bajo cada evento en /events/{event_id}/sale_stages y aceptan:
- name y description — nombre visible de la etapa.
- start_date, end_date, start_time, end_time, timezone — ventana de venta.
- max_participants — cupo de la etapa.
- is_active y position — visibilidad y orden.
curl -X POST "$BASE/events/17/sale_stages" \
-H "api_access_token: TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sale_stage": {
"name": "Early Bird",
"start_date": "2026-06-01",
"end_date": "2026-07-31",
"is_active": true
}
}'Tickets y precios
Hay dos recursos: /events/{event_id}/tickets define las distancias o categorías (5K, 10K, 21K) con su recorrido; /events/{event_id}/sale_tickets cruza cada ticket con una etapa y le pone precio y cupo.
- Ticket: name, description, distance_km, elevation_gain, time_limit_hours, start_time, capacity, image_url y el trazado del recorrido (points, path).
- Sale ticket: ticket_id, sale_stage_id, price (en centavos), currency, quantity, available_from, available_until, is_active.
# Precio del 10K en Early Bird: $80.000 COP
curl -X POST "$BASE/events/17/sale_tickets" \
-H "api_access_token: TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sale_ticket": {
"ticket_id": 3,
"sale_stage_id": 1,
"price": 8000000,
"currency": "COP",
"quantity": 300
}
}'Registro de participantes
La inscripción usa el API público (sin token, pensado para tu propio frontend): POST /public/api/v1/{account_slug}/events/{event_slug}/register. Recibe el sale_ticket elegido, las respuestas del formulario y, si aplica, cupón, add-ons y datos de pago.
curl -X POST "https://app.maratons.co/public/api/v1/andes/events/maraton-2026/register" \
-H "Content-Type: application/json" \
-d '{
"registration": {
"ticket_type_id": 12,
"terms_accepted": true,
"coupon_code": "EARLY10",
"form_data": {
"personal.first_name": "Ana",
"personal.last_name": "López",
"contact.email": "ana@correo.com"
},
"add_ons": [{ "id": 4, "quantity": 1 }]
}
}'Para consultar o gestionar inscripciones desde el panel administrativo usa /events/{event_id}/participations (lista, detalle, confirmar, cancelar, reenviar ticket) y /events/{event_id}/orders para las órdenes con QR y check-in.
Configura webhooks en Ajustes → Webhooks para recibir notificaciones de estos cambios en tu propio sistema en tiempo real.