Utvecklare
Evenemangs-API för er webbplats
Bädda in er ensembles offentliga evenemang på valfri webbplats — med en enkel HTTP-förfrågan, utan konto och utan API-nyckel.
Det viktigaste
- •Offentligt tillgängligt, ingen autentisering krävs.
- •CORS är aktiverat, slutpunkten fungerar direkt från webbläsaren.
- •Svar cachas i 5 minuter, gräns 60 förfrågningar per minut.
- •Endast data som ni har aktiverat för offentlig visning i webbplatsinställningarna returneras.
- •Vid offentligt bruk krävs ett 'Powered by Chorilo'-omnämnande med länk till vår webbplats.
Powered by Chorilo — Omnämnande på er sida
Om ni använder API:et på en offentlig sida, lägg vänligen till ett synligt 'Powered by Chorilo'-omnämnande med länk till https://www.chorilo.com. En diskret rad i sidfoten räcker gott och väl.
Det är ett rättvist byte: ni bäddar in era evenemang automatiskt i andra system och slipper hantera dem på två ställen. Varje API-förfrågan belastar dock även våra servrar och kostar infrastruktur — ju mer trafik er sida får, desto mer resurser tar det hos oss. I gengäld ger det lilla omnämnandet Chorilo lite synlighet som hjälper oss att nå nya körer.
<a href="https://www.chorilo.com" target="_blank" rel="noopener">
Powered by Chorilo
</a>Förhandsgranskning
Powered by ChoriloSlutpunkt
En enda GET-slutpunkt returnerar er ensembles kommande evenemang. Ersätt med URL-slug för er offentliga Chorilo-webbplats.
Var hittar jag min slug?
Öppna inställningarna för er offentliga webbplats i Chorilo-backend. Slug är den unika delen av URL:en, till exempel 'min-kor' i https://chorilo.com/w/min-kor.
https://backend.chorilo.com/api/public-websites/{slug}/embed-eventsStyra synligheten
API:et respekterar synlighetsinställningarna för er offentliga webbplats. Allt som är dolt på webbplatsen är också blockerat via API:et — även när det uttryckligen efterfrågas.
Huvudbrytare: Om show_events är inaktiverat returnerar API:et en tom lista.
Evenemangstyper: Endast aktiverade typer returneras. En förfrågan om blockerade typer (till exempel types[]=concert när konsertvisningen är av) filtreras tyst bort.
| Inställning | Påverkar typ |
|---|---|
| show_events | Huvudbrytare (inaktiverar allt) |
| show_rehearsals | rehearsal |
| show_concerts | concert |
| show_other_events | event |
| show_event_descriptions | Styr fältet description i svaret |
Frågeparametrar
Alla parametrar är valfria. Utan parametrar returnerar slutpunkten nästa evenemang enligt er webbplats standardinställningar.
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
| limit | integer | 5 | Antal returnerade evenemang. Minimum 1, maximum 100. |
| from | ISO 8601 | nu | Startpunkt för tidsintervallet. Tidigare evenemang returneras inte som standard. |
| to | ISO 8601 | — | Slutpunkt för tidsintervallet. |
| types[] | array | alla tillåtna | En eller flera av: rehearsal, concert, event. Blockerade typer filtreras tyst. |
| lang | string (2) | — | Tvåbokstavskod för språk (de, en, fr, nl, es, sv, it, sl). Returneras för närvarande som eko i svarets meta. |
Gräns & cachning
Slutpunkten är begränsad till 60 förfrågningar per minut och IP-adress. Om gränsen överskrids svarar servern med HTTP 429.
Svar cachas på serversidan i 5 minuter (per parameterkombination). Nya evenemang kan därför dyka upp med en kort fördröjning.
Gräns
60 / min
per IP-adress
Servercache
5 min
per parameterkombination
Svarsformat
Svaret är ett JSON-objekt. Varje evenemang innehåller endast offentliga fält — interna beskrivningar, deltagardata eller annan känslig information returneras aldrig.
events[]— Lista över evenemang med id, title, type, location, start_time, end_time, has_ticket_sale, eventuellt ticket_sale_url (vid aktiv biljettförsäljning) och eventuellt description.ensemble_name— Visningsnamn för er ensemble.theme_color— Hex-färgkod från webbplatsinställningarna.language— Språkkod för er webbplats.
Fältet description innehåller uteslutande den offentliga beskrivningen. Ett evenemangs interna beskrivning ingår aldrig i svaret.
{
"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": "Årlig sommarkonsert i trädgården till medborgarhuset.",
"has_ticket_sale": true,
"ticket_sale_url": "https://www.chorilo.com/shop/tickets/42"
}
],
"ensemble_name": "Musterchor",
"theme_color": "#6366f1",
"language": "de"
}Exempel
Så anropar ni API:et från olika språk. Exemplet laddar upp till 10 kommande konserter och andra evenemang.
curl "https://backend.chorilo.com/api/public-websites/mein-chor/embed-events?limit=10&types[]=concert&types[]=event"Statuskoder
| Kod | Betydelse |
|---|---|
| 200 | Lyckades, evenemang i events-arrayen. |
| 404 | Ingen webbplats hittades med denna slug. |
| 422 | Ogiltiga frågeparametrar (till exempel okänd typ eller to före from). |
| 429 | Gränsen överskriden, försök igen om en minut. |
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.
Frågor?
För tekniska frågor om API:et, kontakta: support@chorilo.com