Anmeldungen
Eine Anmeldung hält fest, dass sich eine Teilnehmer:in für ein Angebot angemeldet hat. In der API ist sie eine attendance. Sie durchläuft mehrere Status: vom Warten über die Zusage oder die Warteliste bis zur Teilnahme. Außerdem weiß jede Anmeldung, ob ihr Beitrag fällig und bezahlt ist.
- GET
/attendancesAlle Anmeldungen abrufen - GET
/offers/{uuid}/attendancesDie Teilnahmeliste eines Angebots abrufen - GET
/attendances/{uuid}Eine Anmeldung abrufen - POST
/attendancesEine Anmeldung anlegen - PATCH
/attendances/{uuid}Eine Anmeldung ändern - POST
/attendances/{uuid}/transitionEinen Übergang anwenden - POST
/attendances/{uuid}/transferEine Anmeldung auf ein anderes Angebot übertragen - DELETE
/attendances/{uuid}Eine Anmeldung löschen
Das Modell der Anmeldung
- Name
uuid- Typ
- string
- Beschreibung
Die Kennung der Anmeldung.
- Name
status- Typ
- string
- Beschreibung
Der Status, in dem die Anmeldung steht.
- Name
offer- Typ
- reference
- Beschreibung
Das Angebot, für das die Anmeldung gilt.
- Name
edition- Typ
- reference
- Beschreibung
Die Saison des Angebots.
- Name
participant- Typ
- reference
- Beschreibung
Die Teilnehmer:in, die sich angemeldet hat. Fehlt, sobald die Teilnehmer:in gelöscht wurde.
- Name
account- Typ
- reference
- Beschreibung
Das Konto der Teilnehmer:in, falls es eines gibt.
- Name
createdAt- Typ
- timestamp
- Beschreibung
Wann die Anmeldung angelegt wurde.
- Name
modifiedAt- Typ
- timestamp
- Beschreibung
Wann die Anmeldung zuletzt geändert wurde.
- Name
statusChangedAt- Typ
- timestamp
- Beschreibung
Wann sich der Status zuletzt geändert hat.
- Name
confirmedAt- Typ
- timestamp
- Beschreibung
Wann die Anmeldung eine Zusage erhielt.
- Name
paid- Typ
- boolean
- Beschreibung
Ob der Beitrag bezahlt ist.
- Name
payable- Typ
- boolean
- Beschreibung
Ob der Beitrag fällig ist. Fällige, unbezahlte Anmeldungen sind die offenen Zahlungen der Familie.
- Name
fee- Typ
- integer
- Beschreibung
Der Beitrag, den diese Teilnehmer:in für dieses Angebot zahlt, in Cent. Er kann vom
feedes Angebots abweichen, zum Beispiel bei einer Ermäßigung.
- Name
sorting- Typ
- integer
- Beschreibung
Die Position in der Teilnahmeliste des Angebots.
- Name
userPriority- Typ
- integer
- Beschreibung
Die Priorität, die die Familie dieser Anmeldung gegeben hat, für Saisons, die Plätze per Los zuteilen.
- Name
allAlternateDates- Typ
- boolean
- Beschreibung
Ob die Teilnehmer:in zu jedem Termin des Angebots kommen kann.
- Name
consentOutstanding- Typ
- boolean
- Beschreibung
Ob eine erforderliche Einwilligung noch fehlt.
- Name
heldBack- Typ
- boolean
- Beschreibung
Ob die Entscheidung über diese Anmeldung zurückgehalten wird. Sie wurde per Los oder mit
commit: falsegetroffen und wartet, bis die Entscheidungen der Saison festgeschrieben werden. Bis dahin ist ihr Beitrag nicht fällig, und die Familie ist nicht informiert.
- Name
decisionReason- Typ
- string
- Beschreibung
Warum die Anmeldung in ihrem Status gelandet ist, sofern festgehalten, zum Beispiel durch das Losverfahren.
- Name
createdByAdmin- Typ
- boolean
- Beschreibung
Ob das Team die Anmeldung angelegt hat und nicht die Familie: eine Teammitglied oder ein Service-Account.
- Name
answers- Typ
- object[]
- Beschreibung
Die Antworten auf die Zusatzfragen des Angebots, die der Saison zuerst (siehe
applicationQuestionsdes Angebots): jeweils mit der UUID der Frage (question), ihrer Beschriftung (label), ihremtype(yn,int,txt,choiceoderfile) und deranswer. Die Antwort auf einechoiceist die Beschriftung der Option.
- Name
files- Typ
- object[]
- Beschreibung
Dateien, die als Antworten hochgeladen wurden: jeweils mit
uuid,question,name,mimeTypeundsizein Byte.
- Name
receipts- Typ
- string[]
- Beschreibung
Die UUIDs der bezahlten Belege, die diese Anmeldung abdecken.
- Name
transitions- Typ
- string[]
- Beschreibung
Die Übergänge, die der aktuelle Status erlaubt. Die Liste prüft Ihre Berechtigungen nicht. Für Anmeldungen im Status
waitingenthält sie außerdemawait_emailundawait_consents. Das System wendet sie an, über die API lassen sie sich nicht senden.
- Name
piiMasked- Typ
- boolean
- Beschreibung
Ob der Name der Teilnehmer:in oder des Kontos fehlt, weil Sie ihn nicht sehen dürfen.
Die Status einer Anmeldung
| Status | Bedeutung |
|---|---|
waiting | Angemeldet; noch keine Entscheidung. |
confirmed | Hat einen Platz. |
waitlisted | Steht auf der Warteliste. |
rejected | Hat keinen Platz erhalten. |
withdrawn | Von der Familie oder einem Admin abgemeldet. |
unfulfilled | Hat bei der Zuteilung der Plätze keinen Platz erhalten. |
participated | Hat teilgenommen. |
noshow | Hatte einen Platz, ist aber nicht erschienen. |
email_unconfirmed | Ohne Konto angemeldet; die E-Mail-Adresse ist noch nicht bestätigt. |
consents_outstanding | Ohne Konto angemeldet; wartet auf die Einwilligung der Erziehungsberechtigten. |
Den Status ändern Sie mit POST /attendances/{uuid}/transition:
| Übergang | Von | Nach |
|---|---|---|
confirm | waiting, waitlisted, rejected, withdrawn, unfulfilled | confirmed |
waitlist | waiting, confirmed, rejected, withdrawn, unfulfilled | waitlisted |
reject | alle außer rejected, participated und noshow | rejected |
withdraw | waiting, confirmed, waitlisted, rejected, email_unconfirmed, consents_outstanding | withdrawn |
reset | confirmed, waitlisted, rejected, withdrawn, unfulfilled | waiting |
unfulfill | waiting, confirmed, waitlisted, rejected, withdrawn | unfulfilled |
participated | confirmed, waitlisted, rejected, withdrawn, unfulfilled | participated |
noshow | confirmed | noshow |
Admins dürfen jeden Übergang anwenden. Veranstalter:innen dürfen die übrigen Übergänge nur auf Anmeldungen für ihre eigenen Angebote anwenden, und nur, wenn die Installation ihnen erlaubt, ihre Teilnahmelisten zu bearbeiten. withdraw dürfen sie nicht anwenden.
/attendancesAlle Anmeldungen abrufen
Liefert eine Seite mit Anmeldungen, die neuesten zuerst.
Admins sehen alle Anmeldungen. Veranstalter:innen müssen mit offer ein Angebot nennen und sehen dessen Anmeldungen nach den Regeln seiner Teilnahmeliste. Ohne offer erhalten sie ein 400. Ein Angebot, das zu keiner Saison gehört, hat keine Teilnahmeliste: Es zu nennen, ist ein 403, auch für Admins.
Optionale Filter
- Name
offer- Typ
- string
- Beschreibung
Nur Anmeldungen für dieses Angebot (UUID). Die Liste steht dann in der Reihenfolge der Teilnahmeliste.
- Name
participant- Typ
- string
- Beschreibung
Nur Anmeldungen dieser Teilnehmer:in (UUID).
- Name
account- Typ
- string
- Beschreibung
Nur Anmeldungen der Teilnehmer:innen dieses Kontos (UUID, oder E-Mail-Adresse innerhalb Ihres eigenen Mandanten).
- Name
edition- Typ
- string
- Beschreibung
Nur Anmeldungen in dieser Saison (UUID oder Alias).
- Name
host- Typ
- string
- Beschreibung
Nur Anmeldungen für Angebote dieser Veranstalter:in (UUID oder Alias).
- Name
status- Typ
- string
- Beschreibung
Nur Anmeldungen in diesen Status, durch Kommas getrennt. Ein unbekannter Status ist ein
400.
- Name
paid- Typ
- boolean
- Beschreibung
truefür bezahlte Anmeldungen,falsefür unbezahlte.
- Name
payable- Typ
- boolean
- Beschreibung
truefür Anmeldungen, deren Beitrag fällig ist.
- Name
heldBack- Typ
- boolean
- Beschreibung
truefür Anmeldungen, deren Entscheidung zurückgehalten wird,falsefür die übrigen.
- Name
modifiedSince- Typ
- timestamp
- Beschreibung
Nur Anmeldungen, die seit diesem Zeitpunkt geändert wurden.
- Name
page, itemsPerPage- Typ
- integer
- Beschreibung
Siehe Paginierung.
curl -G https://example.fepli.eu/api/attendances \
-H "Authorization: Bearer $FEPLI_TOKEN" \
--data-urlencode "account=familie.mueller@example.org" \
-d edition=herbstferien-2026
Antwort
[
{
"uuid": "0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07",
"status": "confirmed",
"offer": {
"uuid": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03",
"name": "Fahrradtour durch den Stadtpark",
"alias": "fahrradtour-durch-den-stadtpark"
},
"edition": {
"uuid": "01913e5c-2b4a-7d10-9f3e-6a1c2e7b4d01",
"name": "Herbstferien 2026",
"alias": "herbstferien-2026"
},
"participant": {
"uuid": "0191c7b3-1f2a-7c4d-8e5f-6a7b8c9d0e06",
"name": "Lena Müller"
},
"account": {
"uuid": "0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05",
"name": "Anna Müller"
},
"createdAt": "2026-09-01T08:03:12+02:00",
"modifiedAt": "2026-09-01T08:03:13+02:00",
"statusChangedAt": "2026-09-01T08:03:13+02:00",
"confirmedAt": "2026-09-01T08:03:13+02:00",
"paid": false,
"payable": true,
"fee": 750,
"sorting": 4,
"userPriority": 1,
"allAlternateDates": true,
"consentOutstanding": false,
"createdByAdmin": false,
"answers": [
{
"question": "0192a4f4-1b2c-7d3e-8f4a-5b6c7d8e9f13",
"label": "Kann Ihr Kind sicher Fahrrad fahren?",
"type": "yn",
"answer": true
}
],
"files": [],
"receipts": [],
"transitions": [
"waitlist",
"withdraw",
"reset",
"reject",
"unfulfill",
"noshow",
"participated"
],
"piiMasked": false
}
]
/offers/{uuid}/attendancesDie Teilnahmeliste eines Angebots abrufen
Liefert die Teilnahmeliste eines Angebots: seine Anmeldungen in der Reihenfolge der Liste. Das ist dasselbe wie GET /attendances?offer={uuid}.
Veranstalter:innen lesen die Liste so, wie das Admin-Panel sie ihnen zeigt:
- Sie können die Liste ihrer eigenen Angebote lesen, solange die Phase
publish_listsder Saison aktiv ist (sieheparticipantListReleasedder Saison). Ist diese PhasealwaysActive, endet ihr Zugriff, sobald die Aufbewahrungsfrist nach dem letzten Termin des Angebots abgelaufen ist. Sonst ist die Antwort403. - Verlangt die Saison von Veranstalter:innen eine Vertraulichkeitserklärung, lesen sie keine Liste, bevor sie sie unterschrieben haben. Bis dahin ist die Antwort
403, mit einer Meldung, die die Saison nennt. - Sie erhalten die Anmeldungen mit
confirmed,participatedundnoshowund die mitwithdrawn, die vorher eine Zusage hatten. Dürfen Veranstalter:innen in der Saison Teilnehmer:innen selbst zuteilen (hostsCanAssign), erhalten sie auch die Anmeldungen mitwaitingundwaitlisted. Erlaubt die Installation ihnen, ihre Teilnahmelisten zu bearbeiten, erhalten sie jede Anmeldung des Angebots.
Optionale Filter
- Name
status- Typ
- string
- Beschreibung
Nur Anmeldungen in diesen Status, durch Kommas getrennt.
- Name
heldBack- Typ
- boolean
- Beschreibung
truefür Anmeldungen, deren Entscheidung zurückgehalten wird,falsefür die übrigen.
- Name
page, itemsPerPage- Typ
- integer
- Beschreibung
Siehe Paginierung.
curl "https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03/attendances?status=confirmed,waitlisted" \
-H "Authorization: Bearer $FEPLI_TOKEN"
/attendances/{uuid}Eine Anmeldung abrufen
Liefert eine Anmeldung.
Veranstalter:innen erhalten die Anmeldungen, die ihre Teilnahmeliste ihnen zeigt. Jede andere Anmeldung ist ein 404. Hat eine Veranstalter:in die Vertraulichkeitserklärung einer Saison noch nicht unterschrieben, ist eine Anmeldung dieser Saison ein 403. Dasselbe gilt, wenn sie eine Anmeldung ändern, einen Übergang anwenden, sie auf ein anderes Angebot übertragen oder ihre Kommentare lesen und schreiben.
curl https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07 \
-H "Authorization: Bearer $FEPLI_TOKEN"
/attendancesEine Anmeldung anlegen
Meldet eine Teilnehmer:in für ein Angebot an, wie Neue Anmeldung im Admin-Panel.
Ohne status entscheidet das Anmeldeverfahren der aktiven Phase application_system der Saison: firstcome (Windhundverfahren) sagt der Anmeldung sofort zu oder setzt sie auf die Warteliste. Bei lot (Losverfahren) wartet sie auf die Zuteilung. Mit status können Sie den Status stattdessen direkt festlegen.
Hat sich die Teilnehmer:in für das Angebot schon angemeldet, wird diese Anmeldung wiederverwendet und neu zugeteilt. Die Antwort ist wie bei einer neuen Anmeldung 201.
Anmeldungen anzulegen, erfordert ROLE_ADMIN: Die Teilnehmer:in wird nach den Regeln der Endpunkte der Teilnehmer:innen gesucht, die Veranstalter:innen nicht erfüllen.
Pflichtattribute
- Name
offer- Typ
- string
- Beschreibung
Das Angebot (UUID).
- Name
participant- Typ
- string
- Beschreibung
Die Teilnehmer:in (UUID).
Optionale Attribute
- Name
status- Typ
- string
- Beschreibung
confirmed,waitlistedoderwaiting, um den Status direkt festzulegen.
- Name
notify- Typ
- boolean
- Beschreibung
Der Familie die übliche E-Mail zur Anmeldung senden. Der Standard ist
false.
- Name
commit- Typ
- boolean
- Beschreibung
Die Entscheidung jetzt festhalten. Der Standard ist
true. Mitfalsewird die Entscheidung zurückgehalten, bis die Entscheidungen der Saison festgeschrieben werden.notifymuss dann ebenfallsfalsesein.
- Name
allAlternateDates- Typ
- boolean
- Beschreibung
Ob die Teilnehmer:in zu jedem Termin kommen kann. Der Standard ist
true.
curl -X POST https://example.fepli.eu/api/attendances \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"offer": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03",
"participant": "0191c7b3-2e3f-7a4b-9c5d-6e7f8a9b0c16",
"notify": true
}'
Die Antwort (201 Created) enthält die neue Anmeldung mit dem Status, den sie erhalten hat.
/attendances/{uuid}Eine Anmeldung ändern
Ändert die Angaben einer Anmeldung. Den Status ändern Sie stattdessen mit einem Übergang. Veranstalter:innen dürfen eine Anmeldung nur ändern, wenn die Installation ihnen erlaubt, ihre Teilnahmelisten zu bearbeiten.
Optionale Attribute
- Name
payable- Typ
- boolean
- Beschreibung
Ob der Beitrag fällig ist.
falsenimmt die Anmeldung aus den offenen Zahlungen der Familie. Eine bezahlte Anmeldung lässt sich nicht auf nicht fällig setzen (409). Stornieren Sie stattdessen ihren Beleg.
- Name
allAlternateDates- Typ
- boolean
- Beschreibung
Ob die Teilnehmer:in zu jedem Termin kommen kann.
- Name
userPriority- Typ
- integer
- Beschreibung
Die Priorität der Familie für diese Anmeldung. Negative Werte werden zu
0.
- Name
answers- Typ
- object
- Beschreibung
Antworten auf die Zusatzfragen, nach UUID der Frage. Die Werte sind Strings, Booleans oder ganze Zahlen;
nullentfernt eine Antwort.
curl -X PATCH https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07 \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"answers": { "0192a4f4-1b2c-7d3e-8f4a-5b6c7d8e9f13": false }
}'
/attendances/{uuid}/transitionEinen Übergang anwenden
Ändert den Status der Anmeldung. Die transitions der Anmeldung nennen die Übergänge, die ihr Status erlaubt. Ein Übergang, der vom aktuellen Status aus nicht möglich ist, ergibt ein 409, das die möglichen nennt. Fehlt Ihnen die Berechtigung, ist die Antwort 403.
Ein Übergang hat dieselben Folgen wie im Admin-Panel: Wer eine Anmeldung mit Zusage abmeldet, gibt den Platz frei, und die Teilnahmeliste wird neu sortiert.
Pflichtattribute
- Name
transition- Typ
- string
- Beschreibung
Einer von
confirm,waitlist,reject,withdraw,reset,unfulfill,participated,noshow.
Optionale Attribute
- Name
notify- Typ
- boolean
- Beschreibung
Der Familie die übliche E-Mail zur Änderung senden. Der Standard ist
false.
- Name
commit- Typ
- boolean
- Beschreibung
Die Entscheidung jetzt festhalten. Der Standard ist
true. Mitfalsewird die Entscheidung zurückgehalten, bis die Entscheidungen der Saison festgeschrieben werden.notifymuss dann ebenfallsfalsesein.
curl -X POST https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07/transition \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"transition": "withdraw", "notify": true}'
Antwort (Auszug)
{
"uuid": "0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07",
"status": "withdrawn",
"…": "…",
"transitions": [
"confirm",
"waitlist",
"reset",
"reject",
"unfulfill",
"participated"
]
}
/attendances/{uuid}/transferEine Anmeldung auf ein anderes Angebot übertragen
Überträgt eine Teilnehmer:in auf ein anderes Angebot, wie Teilnehmer:innen übertragen im Admin-Panel. Die Teilnehmer:in erhält für das Zielangebot eine neue Anmeldung im Status Ihrer Wahl. Diese Anmeldung wird mit ihrem Verlauf, ihren Antworten, hochgeladenen Dateien und Kommentaren gelöscht. Die Antwort ist 201 Created mit der neuen Anmeldung, die eine neue uuid hat.
Das Geld folgt der Teilnehmer:in: Die Positionen dieser Anmeldung auf den Belegen wechseln zur neuen Anmeldung, und eine bezahlte Anmeldung bleibt bezahlt. Die Beträge werden nicht neu berechnet. Haben die beiden Angebote unterschiedliche Beiträge, gleichen Sie die Differenz von Hand aus, zum Beispiel mit einer Freien Buchung.
Wie bei jeder neuen Anmeldung wird danach die Teilnahmeliste des Zielangebots im Hintergrund neu sortiert: Verwendet die aktive Phase application_system der Saison firstcome, werden freie Plätze dort von der Warteliste aufgefüllt, und die betroffenen Familien erhalten eine E-Mail. Der Platz, der in diesem Angebot frei wird, wird nicht wieder gefüllt. Dafür rufen Sie POST /offers/{uuid}/refill auf.
Admins dürfen jede Anmeldung übertragen. Veranstalter:innen dürfen das nur, wenn die Installation ihnen erlaubt, Teilnehmer:innen zu übertragen, und sie die Teilnahmeliste dieses Angebots sehen. Sonst ist die Antwort 403. Ein Zielangebot, das Sie nicht sehen, ergibt ein 404.
Die Übertragung wird mit 409 abgelehnt, wenn das Ziel das eigene Angebot der Anmeldung ist, wenn die Teilnehmer:in für das Zielangebot schon eine Anmeldung hat (auch eine abgemeldete: Ändern Sie diese stattdessen mit einem Übergang) oder wenn die Teilnehmer:in gelöscht wurde.
Pflichtattribute
- Name
offer- Typ
- string
- Beschreibung
Das Angebot, auf das die Teilnehmer:in übertragen wird (UUID).
Optionale Attribute
- Name
status- Typ
- string
- Beschreibung
Der Status der neuen Anmeldung:
waiting(der Standard),waitlistedoderconfirmed. Er ersetzt den Status der alten Anmeldung. Das Anmeldeverfahren des Ziels entscheidet nicht.
- Name
notify- Typ
- boolean
- Beschreibung
Der Familie die Zusage per E-Mail schicken. Der Standard ist
false. Es wird nur eine Zusage verschickt, deshalb erfordert dies fürstatusden Wertconfirmed(sonst422).
- Name
commit- Typ
- boolean
- Beschreibung
Die Entscheidung jetzt festhalten. Der Standard ist
true. Mitfalsewird sie zurückgehalten, bis die Entscheidungen der Saison festgeschrieben werden.notifymuss dann ebenfallsfalsesein.
curl -X POST https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07/transfer \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"offer": "0192b7c4-8d9e-7f10-a2b3-4c5d6e7f8a19",
"status": "confirmed",
"notify": true
}'
Antwort (201 Created, Auszug)
{
"uuid": "019a3c05-6e7f-7a80-9b1c-2d3e4f5a6b24",
"status": "confirmed",
"offer": {
"uuid": "0192b7c4-8d9e-7f10-a2b3-4c5d6e7f8a19",
"name": "Fahrradtour durch den Stadtpark II",
"alias": "fahrradtour-durch-den-stadtpark-ii"
},
"participant": {
"uuid": "0191c7b3-1f2a-7c4d-8e5f-6a7b8c9d0e06",
"name": "Lena Müller"
},
"paid": true,
"…": "…",
"receipts": ["0192e1a7-4b5c-7d6e-8f7a-9b0c1d2e3f25"]
}
/attendances/{uuid}Eine Anmeldung löschen
Löscht eine Anmeldung endgültig, als wäre sie nie angelegt worden. Nur für Admins. Die Antwort ist 204 No Content.
Verweist ein bezahlter Beleg auf die Anmeldung, lässt sie sich nicht löschen (409). Melden Sie sie stattdessen ab oder stornieren Sie zuerst den Beleg. In den meisten Fällen ist das Abmelden ohnehin die bessere Wahl: Es erhält den Verlauf.
curl -X DELETE https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07 \
-H "Authorization: Bearer $FEPLI_TOKEN"