Desarrolladores
API de eventos para vuestro sitio web
Integrad los eventos públicos de vuestro ensemble en cualquier sitio web — con una simple petición HTTP, sin cuenta y sin clave de API.
Lo esencial
- •Acceso público, no se requiere autenticación.
- •CORS está habilitado, el endpoint funciona directamente desde el navegador.
- •Las respuestas se cachean 5 minutos, límite de 60 peticiones por minuto.
- •Solo se devuelven los datos que habéis habilitado para visualización pública en la configuración del sitio web.
- •Para uso público es obligatorio un aviso 'Powered by Chorilo' con enlace a nuestro sitio web.
Powered by Chorilo — Atribución en vuestro sitio
Si usáis la API en una página pública, añadid por favor un aviso visible 'Powered by Chorilo' con enlace a https://www.chorilo.com. Una línea discreta en el pie de página es más que suficiente.
Es un intercambio justo: integráis vuestros eventos automáticamente en otros sistemas y no tenéis que mantenerlos por duplicado. Cada petición a la API también genera carga en nuestros servidores y costes de infraestructura — cuanto más tráfico tenga vuestra página, más recursos consume por nuestro lado. A cambio, la pequeña mención da a Chorilo algo de visibilidad que nos ayuda a llegar a nuevos coros.
<a href="https://www.chorilo.com" target="_blank" rel="noopener">
Powered by Chorilo
</a>Vista previa
Powered by ChoriloEndpoint
Un único endpoint GET devuelve los próximos eventos de vuestro ensemble. Sustituid por el slug de URL de vuestro sitio web público de Chorilo.
¿Dónde encuentro mi slug?
Abrid la configuración de vuestro sitio web público en el backend de Chorilo. El slug es la parte única de la URL, por ejemplo 'mi-coro' en https://chorilo.com/w/mi-coro.
https://backend.chorilo.com/api/public-websites/{slug}/embed-eventsControlar la visibilidad
La API respeta la configuración de visibilidad de vuestro sitio web público. Todo lo oculto en el sitio web también está bloqueado por la API — incluso cuando se solicita explícitamente.
Interruptor principal: Si show_events está deshabilitado, la API devuelve una lista vacía.
Tipos de eventos: Solo se devuelven los tipos habilitados. Una petición para tipos deshabilitados (por ejemplo types[]=concert con el interruptor de conciertos apagado) se filtra silenciosamente.
| Ajuste | Afecta al tipo |
|---|---|
| show_events | Interruptor principal (deshabilita todo) |
| show_rehearsals | rehearsal |
| show_concerts | concert |
| show_other_events | event |
| show_event_descriptions | Controla el campo description en la respuesta |
Parámetros de consulta
Todos los parámetros son opcionales. Sin parámetros, el endpoint devuelve los próximos eventos según la configuración predeterminada de vuestro sitio web.
| Nombre | Tipo | Predeterminado | Descripción |
|---|---|---|---|
| limit | integer | 5 | Número de eventos devueltos. Mínimo 1, máximo 100. |
| from | ISO 8601 | ahora | Inicio del rango de fechas. Los eventos pasados no se devuelven por defecto. |
| to | ISO 8601 | — | Fin del rango de fechas. |
| types[] | array | todos los permitidos | Uno o más de: rehearsal, concert, event. Los tipos deshabilitados se filtran silenciosamente. |
| lang | string (2) | — | Código de idioma de dos letras (de, en, fr, nl, es, sv, it, sl). Actualmente se devuelve como eco en el meta de la respuesta. |
Límite de peticiones y caché
El endpoint está limitado a 60 peticiones por minuto por dirección IP. Si se supera el límite, el servidor responde con HTTP 429.
Las respuestas se cachean en el servidor durante 5 minutos (por combinación de parámetros). Los nuevos eventos pueden aparecer con un pequeño retraso.
Límite
60 / min
por dirección IP
Caché del servidor
5 min
por combinación de parámetros
Formato de respuesta
La respuesta es un objeto JSON. Cada evento contiene solo campos públicos — descripciones internas, datos de participantes u otra información sensible nunca se devuelven.
events[]— Lista de eventos con id, title, type, location, start_time, end_time, has_ticket_sale, opcionalmente ticket_sale_url (cuando la venta de entradas está activa) y opcionalmente description.ensemble_name— Nombre visible de vuestro ensemble.theme_color— Código de color hexadecimal de la configuración del sitio web.language— Código de idioma de vuestro sitio web.
El campo description contiene exclusivamente la descripción pública. La descripción interna de un evento nunca forma parte de la respuesta.
{
"events": [
{
"id": 42,
"title": "Sommerkonzert",
"type": "concert",
"location": "Stadthalle Musterstadt",
"start_time": "2026-06-14T19:30:00+02:00",
"end_time": "2026-06-14T21:30:00+02:00",
"description": "Concierto anual de verano en el jardín de la casa de la comunidad.",
"has_ticket_sale": true,
"ticket_sale_url": "https://www.chorilo.com/shop/tickets/42"
}
],
"ensemble_name": "Musterchor",
"theme_color": "#6366f1",
"language": "de"
}Ejemplos
Cómo llamar a la API desde diferentes lenguajes. El ejemplo carga hasta 10 próximos conciertos y otros eventos.
curl "https://backend.chorilo.com/api/public-websites/mein-chor/embed-events?limit=10&types[]=concert&types[]=event"Códigos de estado
| Código | Significado |
|---|---|
| 200 | Éxito, eventos en el array events. |
| 404 | No se encontró ningún sitio web con este slug. |
| 422 | Parámetros de consulta inválidos (por ejemplo tipo desconocido o to antes de from). |
| 429 | Límite de peticiones superado, inténtalo de nuevo en un minuto. |
All public endpoints
These are the read-only public endpoints currently exposed. No authentication required. JSON responses only.
| Method | Path | Description | Limit |
|---|---|---|---|
| GET | /api/tickets/events | List public concert events | 90/min |
| GET | /api/tickets/events/{eventId} | Single event detail | 90/min |
| GET | /api/public-websites/{slug} | Public ensemble website by slug | 90/min |
| GET | /api/public-websites/{slug}/embed-events | Embeddable concert calendar | 60/min |
| GET | /api/choir-associations/public | Public association directory | 90/min |
Rate-limit response headers
Every /api/* response carries rate-limit headers. They are exposed via Access-Control-Expose-Headers for cross-origin agents.
X-RateLimit-Limit— per-window quotaX-RateLimit-Remaining— remaining requestsRetry-After— seconds to wait (HTTP 429 only)
JSON error format (RFC 9457)
All /api/* errors return application/problem+json regardless of Accept header.
{
"type": "https://www.chorilo.com/api/errors/not-found",
"title": "Resource not found",
"status": 404,
"detail": "...",
"instance": "/api/tickets/events/99999999"
} Validation errors (422) include an errors object mapping fields to messages.
¿Preguntas?
Para preguntas técnicas sobre la API, contactad con: support@chorilo.com