fepli
EntwicklerAPI-Ressourcen

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.

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 fee des 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: false getroffen 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 applicationQuestions des Angebots): jeweils mit der UUID der Frage (question), ihrer Beschriftung (label), ihrem type (yn, int, txt, choice oder file) und der answer. Die Antwort auf eine choice ist die Beschriftung der Option.

  • Name
    files
    Typ
    object[]
    Beschreibung

    Dateien, die als Antworten hochgeladen wurden: jeweils mit uuid, question, name, mimeType und size in 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 waiting enthält sie außerdem await_email und await_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

StatusBedeutung
waitingAngemeldet; noch keine Entscheidung.
confirmedHat einen Platz.
waitlistedSteht auf der Warteliste.
rejectedHat keinen Platz erhalten.
withdrawnVon der Familie oder einem Admin abgemeldet.
unfulfilledHat bei der Zuteilung der Plätze keinen Platz erhalten.
participatedHat teilgenommen.
noshowHatte einen Platz, ist aber nicht erschienen.
email_unconfirmedOhne Konto angemeldet; die E-Mail-Adresse ist noch nicht bestätigt.
consents_outstandingOhne Konto angemeldet; wartet auf die Einwilligung der Erziehungsberechtigten.

Den Status ändern Sie mit POST /attendances/{uuid}/transition:

ÜbergangVonNach
confirmwaiting, waitlisted, rejected, withdrawn, unfulfilledconfirmed
waitlistwaiting, confirmed, rejected, withdrawn, unfulfilledwaitlisted
rejectalle außer rejected, participated und noshowrejected
withdrawwaiting, confirmed, waitlisted, rejected, email_unconfirmed, consents_outstandingwithdrawn
resetconfirmed, waitlisted, rejected, withdrawn, unfulfilledwaiting
unfulfillwaiting, confirmed, waitlisted, rejected, withdrawnunfulfilled
participatedconfirmed, waitlisted, rejected, withdrawn, unfulfilledparticipated
noshowconfirmednoshow

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.


GET/attendances

Alle 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

    true für bezahlte Anmeldungen, false für unbezahlte.

  • Name
    payable
    Typ
    boolean
    Beschreibung

    true für Anmeldungen, deren Beitrag fällig ist.

  • Name
    heldBack
    Typ
    boolean
    Beschreibung

    true für Anmeldungen, deren Entscheidung zurückgehalten wird, false fü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.

GET/attendances
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
  }
]

GET/offers/{uuid}/attendances

Die 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_lists der Saison aktiv ist (siehe participantListReleased der Saison). Ist diese Phase alwaysActive, endet ihr Zugriff, sobald die Aufbewahrungsfrist nach dem letzten Termin des Angebots abgelaufen ist. Sonst ist die Antwort 403.
  • 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, participated und noshow und die mit withdrawn, die vorher eine Zusage hatten. Dürfen Veranstalter:innen in der Saison Teilnehmer:innen selbst zuteilen (hostsCanAssign), erhalten sie auch die Anmeldungen mit waiting und waitlisted. 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

    true für Anmeldungen, deren Entscheidung zurückgehalten wird, false für die übrigen.

  • Name
    page, itemsPerPage
    Typ
    integer
    Beschreibung

    Siehe Paginierung.

GET/offers/{uuid}/attendances
curl "https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03/attendances?status=confirmed,waitlisted" \
  -H "Authorization: Bearer $FEPLI_TOKEN"

GET/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.

GET/attendances/{uuid}
curl https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07 \
  -H "Authorization: Bearer $FEPLI_TOKEN"

POST/attendances

Eine 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, waitlisted oder waiting, 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. Mit false wird die Entscheidung zurückgehalten, bis die Entscheidungen der Saison festgeschrieben werden. notify muss dann ebenfalls false sein.

  • Name
    allAlternateDates
    Typ
    boolean
    Beschreibung

    Ob die Teilnehmer:in zu jedem Termin kommen kann. Der Standard ist true.

POST/attendances
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.


PATCH/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. false nimmt 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; null entfernt eine Antwort.

PATCH/attendances/{uuid}
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 }
  }'

POST/attendances/{uuid}/transition

Einen Ü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. Mit false wird die Entscheidung zurückgehalten, bis die Entscheidungen der Saison festgeschrieben werden. notify muss dann ebenfalls false sein.

POST/attendances/{uuid}/transition
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"
  ]
}

POST/attendances/{uuid}/transfer

Eine 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), waitlisted oder confirmed. 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ür status den Wert confirmed (sonst 422).

  • Name
    commit
    Typ
    boolean
    Beschreibung

    Die Entscheidung jetzt festhalten. Der Standard ist true. Mit false wird sie zurückgehalten, bis die Entscheidungen der Saison festgeschrieben werden. notify muss dann ebenfalls false sein.

POST/attendances/{uuid}/transfer
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"]
}

DELETE/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.

DELETE/attendances/{uuid}
curl -X DELETE https://example.fepli.eu/api/attendances/0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07 \
  -H "Authorization: Bearer $FEPLI_TOKEN"

War diese Seite hilfreich?