Zurück zu den API-Schlüsseln

Veranstaltungen

Endpunkte zum Verwalten deiner Veranstaltungen. Jede Anfrage benötigt einen gültigen API-Schlüssel.

Endpunkte im Überblick

Methode & PfadZweck
GET /api/eventsAlle eigenen Veranstaltungen auflisten
POST /api/eventsVeranstaltung anlegen
GET /api/events/:idEine Veranstaltung inkl. Ausnahmen laden
POST /api/events/:id/update-occurrenceVeranstaltung / Termin bearbeiten
POST /api/events/:id/add-occurrenceZusätzlichen Termin hinzufügen
POST /api/events/:id/cancel-occurrenceTermin(e) absagen / reaktivieren
POST /api/events/:id/delete-occurrenceTermin(e) löschen

Veranstaltung anlegen

POST /api/events

curl -X POST https://eventfalcon.de/api/events \
  -H "Authorization: Bearer ef_dein_schluessel" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Sommerkonzert",
    "location": "Rathausplatz, Düsseldorf",
    "startDate": "2026-08-15",
    "startTime": "19:30",
    "visibility": "public"
  }'

Antwort 201:

{ "data": { "id": 123 } }

Felder

FeldTypBeschreibung
titlestringErforderlich. Titel der Veranstaltung.
descriptionstringBeschreibung.
locationstringAdresse/Ort – wird automatisch geokodiert.
allDaybooleantrue = ganztägig (ohne Uhrzeit).
startDatestringErforderlich. YYYY-MM-DD.
startTimestringHH:MM. Erforderlich außer bei allDay.
endDate / endTimestringOptionales Ende.
visibilitystringpublic, anbieter, subscribers oder hidden.
categoriesstringListe gültiger Kategorie-Slugs.
listIdnumberID einer eigenen Liste (siehe Listen).
genderstringgemischt, maennlich, weiblich, divers.
ageFrom / ageTonumberAltersangabe (0–120).
presaleEndstringVorverkaufsende YYYY-MM-DD.
presaleTickets / ticketsobjectTickets: { name, preis, preisBis, url }.
agendaobjectProgrammpunkte: { time, timeEnd, title, text } – siehe unten.
contactFirstName … contactWebsitestringAnsprechpartner-Felder.
recurrenceobjectWiederholung – siehe unten.

Agenda (agenda)

Der Ablauf eines Termins als Liste von Programmpunkten, in der Reihenfolge, in der sie erscheinen sollen (es wird nicht nach Uhrzeit sortiert):

"agenda": [
  { "time": "18:00", "timeEnd": "18:15", "title": "Einlass & Begrüßung" },
  { "time": "18:15", "timeEnd": "19:30", "title": "Vortrag", "text": "Referentin: Jana Albers" },
  { "title": "Pause" }
]
FeldTypBeschreibung
timestringBeginn HH:MM. Optional – ohne Uhrzeit wirkt der Punkt als Zwischenüberschrift.
timeEndstringEnde HH:MM. Optional, nur zusammen mit time.
titlestringTitel des Programmpunkts (max. 200 Zeichen).
textstringBeschreibung (max. 1000 Zeichen).

Ein Punkt braucht title oder text; leere Punkte werden verworfen. Höchstens 50 Punkte. Wie bei den übrigen Feldern ersetzt ein Bearbeiten die Agenda vollständig: Wer agenda weglässt, entfernt sie. Mit scope: "single" bekommt ein einzelner Termin einer Serie seine eigene Agenda.

Beim Lesen steht die Agenda an jedem Termin: GET /api/events und GET /api/events/:id liefern in occurrences[] das Feld agenda — die eigene des Termins, sonst die der Veranstaltung, und [], wenn es keine gibt.

Abonnenten sehen die Agenda auch in ihrem Kalender: Sie steht im Beschreibungstext des jeweiligen Kalendereintrags, unter der Beschreibung.

Wiederholung (recurrence)

Für Serientermine. Weglassen für Einzeltermine.

{
  "recurrence": {
    "freq": "weekly",
    "interval": 1,
    "days": [1, 3],
    "endType": "until",
    "until": "2026-12-31"
  }
}
FeldBeschreibung
freqdaily, weekly, monthly, yearly.
intervalAbstand (1–999), z. B. 2 = alle zwei Wochen.
daysWochentage 0–6 (0 = Sonntag) für daily/weekly/monthly.
monthPosBei monthly: Position(en) 1–4 oder -1 (= letzte).
endTypeforever, count oder until.
countAnzahl Termine (bei endType: "count").
untilEnddatum YYYY-MM-DD (bei endType: "until").

Veranstaltungen auflisten

GET /api/events liefert alle eigenen Veranstaltungen samt aufgelöster Termine:

{ "data": { "events": [ { "id": 123, "title": "…", "occurrences": [ … ] } ] } }

Bearbeiten

POST /api/events/:id/update-occurrence

Der Body enthält dieselben Felder wie beim Anlegen, zusätzlich einen scope und – außer bei scope: "all" – die occurrenceStart des betroffenen Termins (YYYY-MM-DDTHH:MM:SS).

scopeWirkung
singleNur dieser eine Termin.
followingDieser und alle folgenden Termine.
allDie gesamte Veranstaltung.
curl -X POST https://eventfalcon.de/api/events/123/update-occurrence \
  -H "Authorization: Bearer ef_dein_schluessel" \
  -H "Content-Type: application/json" \
  -d '{ "scope": "all", "title": "Sommerkonzert (Open Air)", "startDate": "2026-08-15", "startTime": "20:00" }'

Termin hinzufügen

POST /api/events/:id/add-occurrence fügt einer Veranstaltung einen weiteren Termin hinzu. Der Body entspricht dem Anlegen (Datum/Uhrzeit + Felder).

Absagen (statt löschen)

Wenn ein Termin abgesagt wird, bleibt er erhalten – im Gegensatz zum Löschen. Abonnent/innen erhalten dadurch in ihrem Kalender eine STATUS:CANCELLED-Aktualisierung (der Termin verschwindet also nicht kommentarlos), und auf der Website wird er als „Abgesagt" mit optionaler Begründung angezeigt. Nutze Löschen nur, um eine Veranstaltung wirklich spurlos zu entfernen (z. B. Fehleingaben).

POST /api/events/:id/cancel-occurrence

curl -X POST https://eventfalcon.de/api/events/123/cancel-occurrence \
  -H "Authorization: Bearer ef_dein_schluessel" \
  -H "Content-Type: application/json" \
  -d '{ "scope": "single", "occurrenceStart": "2026-08-22T19:30:00", "reason": "Wegen schlechten Wetters abgesagt" }'
FeldBeschreibung
scopesingle (nur dieser Termin), following (dieser + folgende) oder all (gesamte Veranstaltung).
occurrenceStartBei single/following erforderlich (YYYY-MM-DDTHH:MM:SS).
reasonOptionale Begründung (max. 500 Zeichen), die Abonnent/innen sehen.
reactivatetrue, um eine Absage rückgängig zu machen.

Ein einzelner abgesagter Termin (scope: "single") eignet sich z. B., wenn ein Termin einer Serie wegen schlechten Wetters ausfällt; all sagt die gesamte Veranstaltung ab. Import-Schnittstellen legen Veranstaltungen an – Absagen erfolgen anschließend über diesen Endpunkt.

Termin löschen

POST /api/events/:id/delete-occurrence

curl -X POST https://eventfalcon.de/api/events/123/delete-occurrence \
  -H "Authorization: Bearer ef_dein_schluessel" \
  -H "Content-Type: application/json" \
  -d '{ "scope": "single", "occurrenceStart": "2026-08-22T19:30:00" }'

scope verhält sich wie beim Bearbeiten. Bei all wird die gesamte Veranstaltung entfernt.