Veranstaltungen & Bescheinigungen
Der wichtigste Anwendungsfall von außen: Eine eigene Website zeigt kommende Veranstaltungen und schreibt Anmeldungen zurück. Deshalb sind Teilnehmende hier vollwertig dabei und nicht nur als Zahl.
Alle Pfade sind relativ zu https://<domain>/api/v1.
Veranstaltungen
Bereich veranstaltungen.
| Methode | Pfad | Bereich | Beschreibung |
|---|---|---|---|
| GET | /veranstaltungen | veranstaltungen:read | Liste |
| POST | /veranstaltungen | veranstaltungen:write | Anlegen |
| GET | /veranstaltungen/{id} | veranstaltungen:read | Einzeln lesen, samt Gruppen, Preisstufen und Leitung |
| PUT | /veranstaltungen/{id} | veranstaltungen:write | Ändern |
| DELETE | /veranstaltungen/{id} | veranstaltungen:write | In den Papierkorb |
| GET | /veranstaltungen/{id}/gruppen | veranstaltungen:read | Gruppen innerhalb der Veranstaltung |
Filter: q (Titel, Ort, Kategorie), archiviert (true = auch archivierte).
Sortierbar: start_at (Standard), title, end_at, created_at.
Felder
| Feld | Typ | Anmerkung |
|---|---|---|
title | Text | Pflicht |
short_description, description | Text | Kurztext und Beschreibung |
location, category | Text | |
start_at, end_at | Zeitpunkt | ISO (2026-08-01T09:00) wird angenommen |
registration_start, registration_end | Zeitpunkt | reines Datum beim Ende schließt den Tag ein |
max_participants | Ganzzahl | |
waitlist_enabled | Wahrheitswert | Warteliste bei vollem Lager |
min_age, max_age | Ganzzahl | |
allow_family_registration | Wahrheitswert | Anmeldung mehrerer Kinder in einem Vorgang |
slug | Text | Adresse des öffentlichen Formulars |
form_enabled | Wahrheitswert | öffentliches Anmeldeformular offen |
auto_confirm | Wahrheitswert | Anmeldungen sofort bestätigen |
archived | Wahrheitswert | siehe Hinweis |
Wird archived auf true gesetzt, merkt sich die Anwendung den Zeitpunkt. Daran rechnet
die Aufbewahrungsregel für archivierte Veranstaltungen; ohne diesen Anker wäre eine
Veranstaltung nie fällig. Beim Zurückholen wird er wieder entfernt, und ein
angepinntes Lager verliert beim Archivieren seine Anheftung.
DELETE löscht nicht endgültigDie Veranstaltung wandert in den Papierkorb (30 Tage); die Antwort trägt
"papierkorb": true. Wiederherstellen und endgültiges Löschen bleiben der Anwendung
vorbehalten – ein Tippfehler im Skript soll keine Veranstaltung samt Anmeldungen
unwiederbringlich vernichten. Einträge aus dem Papierkorb tauchen in keiner Liste auf.
Anmeldungen
| Methode | Pfad | Bereich | Beschreibung |
|---|---|---|---|
| GET | /veranstaltungen/{id}/teilnehmer | veranstaltungen:read | Anmeldungen (Liste) |
| POST | /veranstaltungen/{id}/teilnehmer | veranstaltungen:write | Anmeldung anlegen |
| GET | /veranstaltungen/{id}/teilnehmer/{tid} | veranstaltungen:read | Eine Anmeldung |
| PUT | /veranstaltungen/{id}/teilnehmer/{tid} | veranstaltungen:write | Anmeldung ändern |
| DELETE | /veranstaltungen/{id}/teilnehmer/{tid} | veranstaltungen:write | Anmeldung entfernen |
| POST | /veranstaltungen/{id}/teilnehmer/{tid}/status | veranstaltungen:write | Status setzen |
| GET | /veranstaltungen/{id}/teilnehmer/{tid}/bescheinigung/{vorlagenId} | veranstaltungen:read + bescheinigungen:read | Teilnahmebescheinigung als PDF (unten) |
Filter: q (Name, E-Mail), status, gruppe_id, zahlung (open, partial,
paid).
Sortierbar: created_at (Standard), last_name, first_name, status.
| Feld | Typ | Anmerkung |
|---|---|---|
first_name, last_name, email, phone | Text | |
gender, birth_date | Text / JJJJ-MM-TT | |
street, address_extra, zip, city, country | Text | |
diet, intolerances, allergies, medication, health_info, swim | Text | Gesundheits- und Verpflegungsangaben |
tshirt_size, emergency_contact | Text | |
event_group_id | UUID | Gruppe innerhalb der Veranstaltung |
price_tier_id | UUID | Preisstufe |
contact_id | UUID | Verknüpfung zum Mitgliederbestand |
status | registered | confirmed | waitlist | cancelled | rejected | Standard registered |
amount, amount_paid | Zahl | siehe Zahlungen |
answers | Objekt | Antworten auf die frei konfigurierten Formularfelder |
labels | Liste von Texten | |
internal_notes | Text |
registered, nicht confirmedOb eine Anmeldung bestätigt ist, entscheidet die Verwaltung – oder die Auto-Bestätigung der Veranstaltung –, nicht das aufrufende Werkzeug.
Status setzen ({"status":"confirmed"}) ist ein eigener Endpunkt, weil daran
Zeitstempel und das Aufrücken der Warteliste hängen. Ein direktes Schreiben der Spalte
würde beides überspringen.
Zahlungen
| Methode | Pfad | Bereich | Beschreibung |
|---|---|---|---|
| GET | /veranstaltungen/{id}/teilnehmer/{tid}/zahlungen | veranstaltungen:read | Buchungen (Liste) |
| POST | /veranstaltungen/{id}/teilnehmer/{tid}/zahlungen | veranstaltungen:write | Zahlung oder Rückerstattung buchen |
| DELETE | /veranstaltungen/{id}/teilnehmer/{tid}/zahlungen/{zahlungId} | veranstaltungen:write | Buchung entfernen |
| Feld | Typ | Anmerkung |
|---|---|---|
kind | payment | refund | Standard payment |
amount | Zahl oder Text | Pflicht; Komma erlaubt |
method | Text | unbekannte Werte werden zu manual |
reference, note | Text |
Er ergibt sich aus den einzelnen Zahlungen und Rückerstattungen. Ein Werkzeug, das den
Betrag selbst setzte, würde beim nächsten Eingang überschrieben. Deshalb antworten POST
und DELETE hier mit der neu berechneten Anmeldung statt mit der Buchung – das ist,
was ein Werkzeug danach anzeigen will.
curl -X POST -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"amount":95,"method":"manual","reference":"Überweisung 12.07."}' \
"$BASIS/veranstaltungen/<event-id>/teilnehmer/<tid>/zahlungen"
Vorlagen und Standardtexte
| Methode | Pfad | Bereich | Beschreibung |
|---|---|---|---|
| GET | /veranstaltungen/vorlagen | veranstaltungen:read | Vorlagen (Liste) |
| POST | /veranstaltungen/vorlagen | veranstaltungen:write | Vorlage anlegen |
| GET | /veranstaltungen/vorlagen/{vorlagenId} | veranstaltungen:read | Eine Vorlage |
| PUT | /veranstaltungen/vorlagen/{vorlagenId} | veranstaltungen:write | Vorlage ändern |
| DELETE | /veranstaltungen/vorlagen/{vorlagenId} | veranstaltungen:write | Vorlage löschen |
| POST | /veranstaltungen/vorlagen/aus-veranstaltung/{eventId} | veranstaltungen:write | Vorlage aus einer bestehenden Veranstaltung sichern |
| GET | /veranstaltungen/formular-standardtexte | veranstaltungen:read | Standardtexte der Anmeldeformulare |
| PUT | /veranstaltungen/formular-standardtexte | veranstaltungen:write | Standardtexte ändern |
Vorlage: name (Pflicht), description, icon, payload, is_active, sort_order.
Filter: nur_aktive.
Eine Vorlage ist ein Schnappschuss: Sie hält fest, wie eine Veranstaltung aussah, als
sie erstellt wurde. Ändert sich später der Zuschnitt, ändert das die Vorlage nicht –
deshalb gibt es aus-veranstaltung, mit dem sich ein fertig aufgebautes Lager samt
Gruppen, Leitung und Preisstufen als Vorlage sichern lässt (optional mit eigenem name,
description, icon).
Standardtexte sind der Gegenentwurf: Sie sind der Rückfall zur Laufzeit. Eine Veranstaltung ohne eigenen Text zeigt diesen hier – wer ihn ändert, ändert ihn überall dort.
| Feld | Inhalt |
|---|---|
form_intro | Einleitung über dem Formular |
privacy_label, privacy_text, privacy_url | Datenschutz |
terms_label, terms_text, terms_url | Teilnahmebedingungen |
photo_label, photo_text, photo_url | Fotoerlaubnis |
Die Zustimmungstexte stehen auf einer öffentlichen Seite, an der jeder ohne Anmeldung vorbeikommt. Für eingebettetes Markup gäbe es hier keinen guten Grund, wohl aber ein Risiko.
Bescheinigungen
Bereich bescheinigungen. Hier liegen nur die Vorlagen – global, nicht je
Veranstaltung: Eine Leitung hinterlegt sie einmal und benutzt sie bei jedem Lager.
| Methode | Pfad | Bereich | Beschreibung |
|---|---|---|---|
| GET | /bescheinigungen/arten | bescheinigungen:read | Die drei Arten (Liste) |
| GET | /bescheinigungen/einstellungen | bescheinigungen:read | Aussteller-Angaben (nur lesend) |
| GET | /bescheinigungen/vorlagen | bescheinigungen:read | Vorlagen (Liste) |
| POST | /bescheinigungen/vorlagen | bescheinigungen:write | Vorlage anlegen |
| GET | /bescheinigungen/vorlagen/{id} | bescheinigungen:read | Eine Vorlage |
| PUT | /bescheinigungen/vorlagen/{id} | bescheinigungen:write | Vorlage ändern |
| DELETE | /bescheinigungen/vorlagen/{id} | bescheinigungen:write | Vorlage löschen |
Art (kind) | Wann |
|---|---|
participation | nach der Veranstaltung: bestätigt die Teilnahme |
leave_request | vor der Veranstaltung: Antrag auf Sonderurlaub für den Arbeitgeber |
leave_proof | nach der Veranstaltung: Nachweis über den Sonderurlaub |
Vorlage: kind, name (Pflicht), heading, recipient, intro, body, closing,
show_details, is_active, sort_order. Filter: art, nur_aktive.
Die fertige Bescheinigung einer Person
Sie entsteht nicht hier, sondern bei der Veranstaltung – dort steht die Teilnahme:
GET /veranstaltungen/{id}/teilnehmer/{tid}/bescheinigung/{vorlagenId}
Dieser Endpunkt liefert eine PDF-Datei, kein JSON, und verlangt
veranstaltungen:read und bescheinigungen:read.
curl -H "Authorization: Bearer $KEY" \
-o bescheinigung.pdf \
"$BASIS/veranstaltungen/<event-id>/teilnehmer/<tid>/bescheinigung/<vorlagen-id>"
Die Aussteller-Angaben (Anschrift, Logo, Unterschrift) sind nur lesbar: Das sind bewusst hochgeladene Bilder, kein Feld für ein fremdes Skript.
Hat dies deine Frage beantwortet?