Editions
An edition is one period of the programme, such as the autumn holidays of a holiday programme ("Herbstferien 2026") or a term of courses. Every offer, attendance and payment belongs to an edition, and an edition's tasks decide what happens when: when hosts enter offers, when families apply, when participant lists are released.
The edition model
- Name
uuid- Type
- string
- Description
The edition's identifier.
- Name
name- Type
- string
- Description
The name of the edition.
- Name
alias- Type
- string
- Description
A URL-safe name. Accepted wherever an edition is named, as in
?edition=herbstferien-2026.
- Name
emoji- Type
- string
- Description
An emoji the admin shows next to the name, as a short code such as
:fallen_leaf:.
- Name
archived- Type
- boolean
- Description
Whether the edition is archived.
- Name
online- Type
- boolean
- Description
Whether its offers are shown on the public website right now, and so to anonymous API callers.
- Name
editableForHosts- Type
- boolean
- Description
Whether hosts may create, change and delete their offers right now: while a
host_editing_stagetask is active, by its dates or because it isalwaysActive. An edition without ahost_editing_stagetask is closed to them.
- Name
participantListReleased- Type
- boolean
- Description
Whether hosts may see their participant lists right now: while a
publish_liststask is active, by its dates or because it isalwaysActive. An edition without one keeps the lists closed to them.
- Name
hostsCanAssign- Type
- boolean
- Description
Whether hosts may assign participants themselves.
- Name
hostsCanPublish- Type
- boolean
- Description
Whether hosts may approve and publish their own offers.
- Name
usePayments- Type
- boolean
- Description
Whether fees of this edition are collected through fepli.
- Name
holiday- Type
- object
- Description
The period in which the offers take place, with
beginandend.
- Name
tasks- Type
- object[]
- Description
The tasks of the edition, as configured in the admin. Each has a
uuid, atype(such asholiday,host_editing_stage,show_offers,application_system,allocationorpublish_lists), atitle, adescription,periodBeginandperiodEnd,alwaysActive, andactivefor whether it is in effect right now.application_systemtasks also carryapplicationSystem(firstcomeorlot),maxApplications,maxApplicationsDay,maxWaitlistandallowAnonymous. Empty values in tasks are returned asnull.
- Name
hosts- Type
- reference[]
- Description
The hosts the edition is restricted to. Empty means every host can take part.
- Name
offersCount- Type
- integer
- Description
The number of offers in the edition.
- Name
createdAt- Type
- timestamp
- Description
When the edition was created.
/editionsList all editions
Returns a page of editions, newest first. Host users see all editions too.
Optional filters
- Name
archived- Type
- boolean
- Description
truefor archived editions only,falsefor the live ones only.
- Name
q- Type
- string
- Description
Only editions whose name contains this text.
- Name
page, itemsPerPage- Type
- integer
- Description
See Pagination.
curl "https://example.fepli.eu/api/editions?archived=false" \
-H "Authorization: Bearer $FEPLI_TOKEN"
Response
[
{
"uuid": "01913e5c-2b4a-7d10-9f3e-6a1c2e7b4d01",
"name": "Herbstferien 2026",
"alias": "herbstferien-2026",
"emoji": ":fallen_leaf:",
"archived": false,
"online": true,
"editableForHosts": false,
"participantListReleased": false,
"hostsCanAssign": false,
"hostsCanPublish": false,
"usePayments": true,
"holiday": {
"begin": "2026-10-12T00:00:00+02:00",
"end": "2026-10-24T23:59:59+02:00"
},
"tasks": [
{
"uuid": "01913e5d-7a8b-7c9d-8e0f-1a2b3c4d5e17",
"type": "application_system",
"title": "Anmeldephase",
"description": null,
"periodBegin": "2026-09-01T08:00:00+02:00",
"periodEnd": "2026-09-30T23:59:59+02:00",
"alwaysActive": false,
"active": true,
"applicationSystem": "firstcome",
"maxApplications": 5,
"maxApplicationsDay": null,
"maxWaitlist": 2,
"allowAnonymous": false
}
],
"hosts": [],
"offersCount": 86,
"createdAt": "2026-05-04T09:30:00+02:00"
}
]
/editions/{uuid}Retrieve an edition
Returns one edition. The path takes the UUID, not the alias. Every offer and attendance carries its edition's UUID in edition.
curl https://example.fepli.eu/api/editions/01913e5c-2b4a-7d10-9f3e-6a1c2e7b4d01 \
-H "Authorization: Bearer $FEPLI_TOKEN"
/editionsCreate an edition
Creates an edition. Admins only. The alias is made from the name; if another edition has that alias already, the answer is 409, so choose another name.
A new edition has no tasks. They are set up in the admin afterwards, under the edition's Zeiträume. Until then:
- it is
onlineright away, so its published offers show on the website and to anonymous callers, - families can't apply yet, since there is no
application_systemtask, - host users can't create, change or delete offers yet, since there is no
host_editing_stagetask, - host users can't see participant lists yet, since there is no
publish_liststask.
Fees are collected (usePayments is true), the other switches are off, the emoji is picked at random, and every host can take part (hosts is empty; restricting an edition to some hosts is done in the admin). The edition's activity log in the admin records who created it.
Required attributes
- Name
name- Type
- string
- Description
The name, up to 255 characters.
Optional attributes
- Name
emoji- Type
- string
- Description
The emoji as a short code, such as
:sunflower:.nullfor none.
- Name
archived- Type
- boolean
- Description
Whether the edition starts archived. Defaults to
false.
- Name
hostsCanAssign- Type
- boolean
- Description
Whether hosts may assign participants themselves. Defaults to
false.
- Name
hostsCanPublish- Type
- boolean
- Description
Whether hosts may approve and publish their own offers. Defaults to
false.
- Name
usePayments- Type
- boolean
- Description
Whether fees are collected through fepli. Defaults to
true.
curl -X POST https://example.fepli.eu/api/editions \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Sommerferien 2027", "emoji": ":sunflower:"}'
Response (201 Created)
{
"uuid": "0196b2c4-8d1e-7f20-a3b4-5c6d7e8f9a10",
"name": "Sommerferien 2027",
"alias": "sommerferien-2027",
"emoji": ":sunflower:",
"archived": false,
"online": true,
"editableForHosts": false,
"participantListReleased": false,
"hostsCanAssign": false,
"hostsCanPublish": false,
"usePayments": true,
"holiday": null,
"tasks": [],
"hosts": [],
"offersCount": 0,
"createdAt": "2026-09-22T10:15:00+02:00"
}
/editions/{uuid}Update an edition
Changes the general settings of an edition. Admins only. The tasks are managed in the admin.
The alias always follows the name: renaming an edition changes its alias, and links or filters that use the old one, such as ?edition=herbstferien-2026, stop working. Integrations that keep a reference should store the uuid. A name whose alias another edition has already is a 409.
Optional attributes
- Name
name- Type
- string
- Description
The name, up to 255 characters.
- Name
emoji- Type
- string
- Description
The emoji.
nullremoves it.
- Name
archived- Type
- boolean
- Description
Archive or restore the edition.
- Name
hostsCanAssign- Type
- boolean
- Description
Whether hosts may assign participants themselves.
- Name
hostsCanPublish- Type
- boolean
- Description
Whether hosts may approve and publish their own offers.
- Name
usePayments- Type
- boolean
- Description
Whether fees are collected through fepli.
curl -X PATCH https://example.fepli.eu/api/editions/01913e5c-2b4a-7d10-9f3e-6a1c2e7b4d01 \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"hostsCanPublish": true}'
The response holds the changed edition.
/editions/{uuid}Delete an edition
Deletes an edition. Admins only. Responds with 204 No Content.
While the edition still has offers, it can't be deleted (409). Move the offers to another edition (send edition when you update an offer) or delete them first. The admin, unlike the API, deletes an edition's offers along with it.
Its tasks, its activity log, its comments and the notification texts set up for this edition are deleted with it. Consent forms of the edition are kept, without the edition.
curl -X DELETE https://example.fepli.eu/api/editions/0196b2c4-8d1e-7f20-a3b4-5c6d7e8f9a10 \
-H "Authorization: Bearer $FEPLI_TOKEN"
/editions/{uuid}/commit-decisionsCommit held-back decisions
Commits every decision that is held back in the edition, like Anmeldungen festschreiben in the admin. Admins only.
The lot drawn in the admin holds its decisions back, and so does every attendance that is created, transitioned, moved or refilled with commit: false. Such attendances show heldBack: true, and GET /attendances?edition=…&heldBack=true lists them.
The call commits all of them for the whole edition at once, not per offer. For confirmed attendances the fee falls due. It sends no e-mail. To tell the families, send them a mailing with "to": "attendances" and the attendances it returns: each family gets one e-mail with your text and the status of each of its applications.
The attendances are released right away and show heldBack: false after the call; the rest is done in the background, shortly after. The API answers 202 Accepted. As in the admin, committing also ends the edition's allocation task: an active one ends now.
If nothing is held back in the edition, the answer is 409.
The request needs a JSON body: send {}.
Response
- Name
edition- Type
- reference
- Description
The edition committed.
- Name
attendances- Type
- array
- Description
The UUIDs of the attendances committed now. Pass them as
attendancestoPOST /mailings.
curl -X POST https://example.fepli.eu/api/editions/01913e5c-2b4a-7d10-9f3e-6a1c2e7b4d01/commit-decisions \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
Response (202 Accepted)
{
"edition": {
"uuid": "01913e5c-2b4a-7d10-9f3e-6a1c2e7b4d01",
"name": "Herbstferien 2026",
"alias": "herbstferien-2026"
},
"attendances": [
"0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e07",
"0192d0e8-3a4b-7c5d-9e6f-7a8b9c0d1e08"
]
}