Développeurs
API d'événements pour votre site web
Intégrez les événements publics de votre ensemble sur n'importe quel site web — avec une simple requête HTTP, sans compte ni clé d'API.
L'essentiel
- •Accès public, aucune authentification requise.
- •CORS est activé, le endpoint fonctionne directement depuis le navigateur.
- •Les réponses sont mises en cache 5 minutes, limite de 60 requêtes par minute.
- •Seules les données que vous avez activées pour l'affichage public dans les paramètres de votre site sont renvoyées.
- •Pour un usage public, une mention 'Powered by Chorilo' avec un lien vers notre site est obligatoire.
Powered by Chorilo — Mention sur votre site
Si vous utilisez l'API sur une page publique, ajoutez s'il vous plaît une mention visible 'Powered by Chorilo' avec un lien vers https://www.chorilo.com. Une ligne discrète en pied de page suffit largement.
L'échange est équitable : vous intégrez vos événements automatiquement dans d'autres systèmes et n'avez pas à les maintenir en double. Chaque requête API génère aussi de la charge sur nos serveurs et engendre des coûts d'infrastructure — plus votre page a de trafic, plus cela mobilise de ressources de notre côté. En retour, la petite mention apporte à Chorilo un peu de visibilité qui nous aide à atteindre de nouveaux chœurs.
<a href="https://www.chorilo.com" target="_blank" rel="noopener">
Powered by Chorilo
</a>Aperçu
Powered by ChoriloEndpoint
Un unique endpoint GET renvoie les prochains événements de votre ensemble. Remplacez par le slug d'URL de votre site web public Chorilo.
Où trouver mon slug ?
Ouvrez les paramètres de votre site web public dans le backend Chorilo. Le slug est la partie unique de l'URL, par exemple 'mon-choeur' dans https://chorilo.com/w/mon-choeur.
https://backend.chorilo.com/api/public-websites/{slug}/embed-eventsContrôler la visibilité
L'API respecte les paramètres de visibilité de votre site web public. Tout ce qui est masqué sur le site est également bloqué par l'API — même lorsque c'est explicitement demandé.
Interrupteur principal: Si show_events est désactivé, l'API renvoie une liste vide.
Types d'événements: Seuls les types activés sont renvoyés. Une requête pour des types désactivés (par exemple types[]=concert avec l'affichage des concerts désactivé) est filtrée silencieusement.
| Paramètre | Type concerné |
|---|---|
| show_events | Interrupteur principal (désactive tout) |
| show_rehearsals | rehearsal |
| show_concerts | concert |
| show_other_events | event |
| show_event_descriptions | Contrôle le champ description dans la réponse |
Paramètres de requête
Tous les paramètres sont optionnels. Sans paramètres, le endpoint renvoie les prochains événements selon les paramètres par défaut de votre site.
| Nom | Type | Par défaut | Description |
|---|---|---|---|
| limit | integer | 5 | Nombre d'événements renvoyés. Minimum 1, maximum 100. |
| from | ISO 8601 | maintenant | Début de la plage de dates. Les événements passés ne sont pas renvoyés par défaut. |
| to | ISO 8601 | — | Fin de la plage de dates. |
| types[] | array | tous les autorisés | Un ou plusieurs parmi : rehearsal, concert, event. Les types désactivés sont filtrés silencieusement. |
| lang | string (2) | — | Code de langue à deux lettres (de, en, fr, nl, es, sv, it, sl). Actuellement renvoyé en écho dans le meta de réponse. |
Limite de requêtes & cache
Le endpoint est limité à 60 requêtes par minute et par adresse IP. Si la limite est dépassée, le serveur répond avec HTTP 429.
Les réponses sont mises en cache côté serveur pendant 5 minutes (par combinaison de paramètres). Les nouveaux événements peuvent donc apparaître avec un léger délai.
Limite
60 / min
par adresse IP
Cache serveur
5 min
par combinaison de paramètres
Format de réponse
La réponse est un objet JSON. Chaque événement ne contient que des champs publics — les descriptions internes, données des participants ou autres informations sensibles ne sont jamais renvoyées.
events[]— Liste des événements avec id, title, type, location, start_time, end_time, has_ticket_sale, optionnellement ticket_sale_url (quand la vente de billets est active) et optionnellement description.ensemble_name— Nom d'affichage de votre ensemble.theme_color— Code couleur hexadécimal issu des paramètres du site.language— Code de langue de votre site.
Le champ description contient exclusivement la description publique. La description interne d'un événement ne fait jamais partie de la réponse.
{
"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": "Concert d'été annuel dans le jardin de la maison communale.",
"has_ticket_sale": true,
"ticket_sale_url": "https://www.chorilo.com/shop/tickets/42"
}
],
"ensemble_name": "Musterchor",
"theme_color": "#6366f1",
"language": "de"
}Exemples
Comment appeler l'API depuis différents langages. L'exemple charge jusqu'à 10 prochains concerts et autres événements.
curl "https://backend.chorilo.com/api/public-websites/mein-chor/embed-events?limit=10&types[]=concert&types[]=event"Codes de statut
| Code | Signification |
|---|---|
| 200 | Succès, événements dans le tableau events. |
| 404 | Aucun site web trouvé avec ce slug. |
| 422 | Paramètres de requête invalides (par exemple type inconnu ou to avant from). |
| 429 | Limite de requêtes dépassée, réessayez dans une minute. |
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.
Des questions ?
Pour les questions techniques sur l'API, contactez : support@chorilo.com