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.

HTML
<a href="https://www.chorilo.com" target="_blank" rel="noopener">
  Powered by Chorilo
</a>

Förhandsgranskning

Powered by Chorilo

Slutpunkt

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.

GET
https://backend.chorilo.com/api/public-websites/{slug}/embed-events

Styra 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ällningPåverkar typ
show_eventsHuvudbrytare (inaktiverar allt)
show_rehearsalsrehearsal
show_concertsconcert
show_other_eventsevent
show_event_descriptionsStyr fältet description i svaret

Frågeparametrar

Alla parametrar är valfria. Utan parametrar returnerar slutpunkten nästa evenemang enligt er webbplats standardinställningar.

NamnTypStandardBeskrivning
limitinteger5Antal returnerade evenemang. Minimum 1, maximum 100.
fromISO 8601nuStartpunkt för tidsintervallet. Tidigare evenemang returneras inte som standard.
toISO 8601Slutpunkt för tidsintervallet.
types[]arrayalla tillåtnaEn eller flera av: rehearsal, concert, event. Blockerade typer filtreras tyst.
langstring (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.

JSON
{
  "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

KodBetydelse
200Lyckades, evenemang i events-arrayen.
404Ingen webbplats hittades med denna slug.
422Ogiltiga frågeparametrar (till exempel okänd typ eller to före from).
429Grä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.

MethodPathDescriptionLimit
GET/api/tickets/eventsList public concert events90/min
GET/api/tickets/events/{eventId}Single event detail90/min
GET/api/public-websites/{slug}Public ensemble website by slug90/min
GET/api/public-websites/{slug}/embed-eventsEmbeddable concert calendar60/min
GET/api/choir-associations/publicPublic association directory90/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 quota
  • X-RateLimit-Remaining — remaining requests
  • Retry-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