Offers
An offer is one activity of an edition: a course, an excursion, a workshop, run by one or more hosts on one or more dates. Offers are the one part of the API that is public: the published offers can be read without a token.
- GET
/offersList all offers - GET
/offers/{uuid}Retrieve an offer - GET
/offer-placesList the free places - POST
/offersCreate an offer - PATCH
/offers/{uuid}Update an offer - DELETE
/offers/{uuid}Delete an offer - POST
/offers/{uuid}/transitionApply a transition - POST
/offers/{uuid}/copyCopy an offer - POST
/offers/{uuid}/variantsCreate a variant - POST
/offers/{uuid}/refillRefill from the waitlist
The offer model
Fields marked with a token are returned to authenticated callers only. Fields without a value are left out of responses.
Properties
- Name
uuid- Type
- string
- Description
The offer's identifier.
- Name
name- Type
- string
- Description
The title of the offer.
- Name
alias- Type
- string
- Description
A URL-safe version of the name.
- Name
edition- Type
- reference
- Description
The edition the offer belongs to.
- Name
hosts- Type
- reference[]
- Description
The hosts who run the offer.
- Name
status- Type
- string[]
- Description
The states of the workflow the offer is in:
draft,finalized,reviewed,published,cancelled,completed. Usually one. A published offer keepspublishedwhen it is cancelled or completed, so a cancelled offer reads["published", "cancelled"].
- Name
teaser- Type
- string
- Description
A one-line summary.
- Name
description- Type
- string
- Description
The full description, formatted as Markdown.
- Name
dates- Type
- object[]
- Description
The dates of the offer. Each has a
uuid, abeginand usually anendtimestamp, and for recurring dates an iCalendarrecurrencerule (RRULE).
- Name
fee- Type
- integer
- Description
The fee in cents. Missing or
0means the offer is free.
- Name
currency- Type
- string
- Description
The currency of
fee, as ISO 4217:EURorCHF, whichever the organisation bills in. Read-only; the default isEUR.
- Name
minAge- Type
- integer
- Description
The minimum age of participants, in years.
- Name
maxAge- Type
- integer
- Description
The maximum age of participants, in years.
- Name
minParticipants- Type
- integer
- Description
How many participants the offer needs to take place.
- Name
maxParticipants- Type
- integer
- Description
How many participants the offer takes. Missing when unlimited.
- Name
vacancies- Type
- integer
- Description
Places left:
maxParticipantsminus confirmed and waitlisted attendances. Missing when places are unlimited, and withplaces=false.
- Name
fullyBooked- Type
- boolean
- Description
Whether no places are left. Missing with
places=false.
- Name
requiresApplication- Type
- boolean
- Description
Whether participants have to apply. If not, they just turn up.
- Name
onlineApplication- Type
- boolean
- Description
Whether families can apply on the fepli website.
- Name
applicationDeadline- Type
- timestamp
- Description
The last moment to apply.
- Name
meetingPoint- Type
- string
- Description
A short label for where to meet, such as "Haupteingang Stadtpark".
- Name
meetingAddress- Type
- string
- Description
The street address of the meeting point.
- Name
meetingLat- Type
- number
- Description
The latitude of the meeting point (WGS 84).
- Name
meetingLng- Type
- number
- Description
The longitude of the meeting point (WGS 84).
- Name
bring- Type
- string
- Description
What participants should bring.
- Name
applyText- Type
- string
- Description
Extra information shown when applying, formatted as Markdown.
- Name
wheelchairAccessible- Type
- boolean
- Description
Whether the offer is wheelchair accessible.
- Name
accessibility- Type
- string[]
- Description
Further accessibility features.
- Name
categories- Type
- reference[]
- Description
The offer categories the offer is filed under.
- Name
url- Type
- string
- Description
The offer's page on the fepli website, where families apply.
- Name
media- Type
- string[]
- Description
Absolute URLs of the offer's images, scaled to at most 3000 × 3000 pixels. Where the tenant has the app Bilder über Bunny, they point to the hostname of its Pull Zone or the tenant's own hostname (
https://<hostname>/<path>?width=…). On an installation set tooriginal, they point to the file as uploaded (/storage/<tenant>/media/<path>?v=…). The URLs of an image are public.
- Name
thumbnails- Type
- string[]
- Description
The same images, cropped to 800 × 600 pixels: the size for a card or a list. The URLs take the same forms as in
media.
- Name
createdAt- Type
- timestamp
- Description
When the offer was created.
- Name
modifiedAt- Type
- timestamp
- Description
When the offer was last changed.
- Name
publish- Type
- string
- Access
- with a token
- Description
public, orprivate_linkfor an offer that can only be reached through its private link.
- Name
comment- Type
- string
- Access
- with a token
- Description
An internal note, never shown publicly.
- Name
contact- Type
- object[]
- Access
- with a token
- Description
The contact persons for the offer's page on the fepli website, as entered: objects with
name,emailandphone.
- Name
collectDateOfBirth- Type
- boolean
- Access
- with a token
- Description
Whether the application form asks for the participant's date of birth.
- Name
disableOnlinePayment- Type
- boolean
- Access
- with a token
- Description
Whether online payment is switched off for this offer.
- Name
attendances- Type
- object
- Access
- with a token
- Description
How many attendances the offer has, by state:
confirmed,waitlisted,waiting,withdrawnandrejected.totalcounts every attendance except withdrawn and unfulfilled ones.
- Name
applicationQuestions- Type
- object[]
- Access
- with a token
- Description
The extra questions the application form asks for this offer: first those of the offer's edition, then the offer's own. Each has a
uuid, thequestion, itstype(ynyes/no,intnumber,txttext,choicechoice,fileupload), whether it isrequiredand whether it comes from the edition (season). Uploads list the acceptedfileTypes(image,pdf). A choice lists itsoptions, each with alabeland apricein cents that is added to the fee;priceisnullfor an option without a surcharge.
- Name
variantOf- Type
- reference
- Access
- with a token
- Description
The offer this one is a variant of, for example another date of the same course.
- Name
variants- Type
- reference[]
- Access
- with a token
- Description
The variants of this offer. Create one with
POST /offers/{uuid}/variants.
- Name
transitions- Type
- string[]
- Access
- with a token
- Description
The workflow transitions you may apply right now.
The offer workflow
An offer moves through the same states as in the admin. A host user drafts it and submits it (finalize); admins review it (approve) and publish it (publish). Apply a transition with POST /offers/{uuid}/transition.
| Transition | From | To | Who may apply it |
|---|---|---|---|
finalize | draft | finalized | anyone who can see the offer |
to_draft | finalized or reviewed | draft | admins; host users if the edition lets them publish |
approve | finalized, unless completed | reviewed | admins; host users if the edition lets them publish |
unapprove | reviewed | finalized | admins; host users if the edition lets them publish |
publish | reviewed | published | admins; host users if the edition lets them publish |
unpublish | published | reviewed | admins; host users if the edition lets them publish |
cancel | published and not cancelled, before its last date has ended | adds cancelled | admins; host users if the installation lets them edit their participant lists, their participant list is released and open, they are members of one of the offer's hosts, and they have signed the edition's confidentiality declaration, where it asks for one |
relaunch | cancelled, before its last date has ended | published | as for cancel |
complete | published, after its last date has ended | adds completed | admins; host users who can see the offer |
A completed offer can't be cancelled or relaunched any more. Where a host user may not apply cancel or relaunch, the offer's transitions leave it out.
/offersList all offers
Returns a page of offers, ordered by their first date.
- Without a token: the published, public offers of the editions that are online, with the public fields.
- With a token: every offer you could open in the admin, in any state, with all fields. Admins see all offers; host users see their hosts' offers and offers shared with them. A token whose owner is neither an admin nor a member of a host sees no offers at all, not even the published ones: leave the token out to read those.
Optional filters
- Name
q- Type
- string
- Description
Only offers whose name contains this text.
- Name
edition- Type
- string
- Description
Only offers of this edition (UUID or alias).
- Name
key- Type
- string
- Description
A public key, for a page of another website. Without a token only.
- Name
places- Type
- boolean
- Description
falseleaves outvacanciesandfullyBooked. Without a token, fepli then caches the answer until an offer changes instead of for 30 seconds. Read the places from/offer-places.
- Name
host- Type
- string
- Description
Only offers of this host (UUID or alias).
- Name
category- Type
- string
- Description
Only offers in this offer category (UUID or alias).
- Name
status- Type
- string
- Description
Only offers in these states, comma-separated:
draft,finalized,reviewed,published,cancelled,completed.publishedalso matches offers that were cancelled after publication.
- Name
from- Type
- date
- Description
Only offers with a date that begins on or after this day.
- Name
until- Type
- date
- Description
Only offers with a date that begins on or before this day. Combined with
from, an offer with several dates matches if one date is on or afterfromand one (not necessarily the same) is on or beforeuntil.
- Name
modifiedSince- Type
- timestamp
- Description
Only offers changed since this moment.
- Name
sort- Type
- string
- Description
begin(default, the first date),name,createdAtormodifiedAt.
- Name
order- Type
- string
- Description
asc(default) ordesc.
- Name
page, itemsPerPage- Type
- integer
- Description
See Pagination.
curl -G https://example.fepli.eu/api/offers \
-d edition=herbstferien-2026 \
-d from=2026-10-12
Response
[
{
"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"
},
"hosts": [
{
"uuid": "01905a7e-8c21-7b3f-a0d4-3e9f1c6b2a02",
"name": "Stadtjugendring Elmsbrück e.V.",
"alias": "stadtjugendring-elmsbrueck"
}
],
"status": ["published"],
"teaser": "Mit dem Rad durch den Park – mit Picknick am See.",
"description": "Eine **geführte Fahrradtour** für Kinder ab 8 Jahren.",
"dates": [
{
"uuid": "0192a4f2-0a11-7e6c-9d38-2b7f5c1e8a04",
"begin": "2026-10-14T09:00:00+02:00",
"end": "2026-10-14T12:00:00+02:00"
}
],
"fee": 750,
"currency": "EUR",
"minAge": 8,
"maxAge": 12,
"maxParticipants": 15,
"vacancies": 4,
"fullyBooked": false,
"requiresApplication": true,
"onlineApplication": true,
"applicationDeadline": "2026-09-30T23:59:59+02:00",
"meetingPoint": "Haupteingang Stadtpark",
"meetingAddress": "Parkstraße 1, 12345 Elmsbrück",
"meetingLat": 52.520008,
"meetingLng": 13.404954,
"bring": "Fahrrad und Helm",
"wheelchairAccessible": false,
"categories": [
{
"uuid": "018f2c3d-4e5f-7a6b-8c7d-9e0f1a2b3c12",
"name": "Sport & Bewegung",
"alias": "sport-bewegung"
}
],
"url": "https://example.fepli.eu/angebote/herbstferien-2026/1C8wV6pQk2Tz9RfXh4MbNd-fahrradtour-durch-den-stadtpark",
"media": [
"https://example.fepli.eu/assets/images/f/fahrradtour-3000x2000.jpg"
],
"thumbnails": [
"https://example.fepli.eu/assets/images/a/fahrradtour-800x600.jpg"
],
"createdAt": "2026-08-03T10:12:44+02:00",
"modifiedAt": "2026-09-15T16:40:02+02:00"
}
]
/offers/{uuid}Retrieve an offer
Returns one offer. The same visibility rules apply as for the list: without a token, only a published, public offer of an online edition can be retrieved. Anything else is a 404.
A page of another website passes its public key as key, as on the list. places=false leaves out the places, as on the list.
With a token, the offer includes the internal fields, among them the attendance counts and the transitions you may apply.
curl https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03 \
-H "Authorization: Bearer $FEPLI_TOKEN"
Response (with a token, excerpt)
{
"uuid": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03",
"name": "Fahrradtour durch den Stadtpark",
"status": ["published"],
"…": "…",
"publish": "public",
"comment": "Leihräder beim ADFC angefragt.",
"contact": [
{
"name": "Jonas Becker",
"email": "j.becker@sjr.example.fepli.eu",
"phone": "0123 456789"
}
],
"collectDateOfBirth": false,
"disableOnlinePayment": false,
"attendances": {
"confirmed": 11,
"waitlisted": 0,
"waiting": 2,
"withdrawn": 1,
"rejected": 0,
"total": 13
},
"applicationQuestions": [
{
"uuid": "0192a4f4-1b2c-7d3e-8f4a-5b6c7d8e9f13",
"question": "Kann Ihr Kind sicher Fahrrad fahren?",
"type": "yn",
"required": true,
"fileTypes": [],
"options": [],
"season": true
},
{
"uuid": "0192a4f4-1b2c-7d3e-8f4a-5b6c7d8e9f14",
"question": "Mittagessen",
"type": "choice",
"required": false,
"fileTypes": [],
"options": [
{ "label": "vegetarisch", "price": 4000 },
{ "label": "ohne Mittagessen", "price": null }
],
"season": false
}
],
"variants": [],
"transitions": ["cancel", "unpublish"]
}
/offer-placesList the free places
Returns the free places of the offers, and nothing else: one entry per offer that /offers returns to the same caller, with the same filters and the same visibility rules. Not paginated.
The places change with every application, the rest of an offer rarely. Without a token, fepli caches this answer for 5 seconds. Read the offers with places=false, which fepli caches until an offer changes, and the places from here. The embeds do so.
Optional filters
The filters of /offers apply, except places, sort, order, page and itemsPerPage: q, edition, host, category, status, from, until, modifiedSince and key. Any other parameter is a 400.
- Name
edition- Type
- string
- Description
Only offers of this edition (UUID or alias).
- Name
key- Type
- string
- Description
A public key, for a page of another website. Without a token only.
Fields
- Name
uuid- Type
- string
- Description
The offer.
- Name
vacancies- Type
- integer
- Description
Places left, as on the offer. Missing when places are unlimited.
- Name
fullyBooked- Type
- boolean
- Description
Whether no places are left.
- Name
waiting- Type
- integer
- Description
How many attendances wait on the waiting list.
curl -G https://example.fepli.eu/api/offer-places \
-d edition=herbstferien-2026
Response
[
{
"uuid": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b01",
"vacancies": 1,
"fullyBooked": false,
"waiting": 0
},
{
"uuid": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b02",
"vacancies": 0,
"fullyBooked": true,
"waiting": 3
}
]
/offersCreate an offer
Creates an offer in the state draft. Admins can create offers in any edition. Host users can create them for their own hosts, in editions whose host_editing_stage task is active.
When a person creates the offer, they get the e-mails that link to its participant list before the event (manual). The API neither shows nor sets who gets those e-mails; that is chosen in the admin, under Listen-Empfänger:innen. When a host user is a member of exactly one host, that host is added automatically.
Without contact, the offer takes its contact from the profile of its first host: the host's name, e-mail address and phone number. A host whose profile has neither an e-mail address nor a phone number leaves the offer without a contact, and so does an offer without hosts. Send contact to name other contact persons, or [] for none.
Required attributes
- Name
name- Type
- string
- Description
The title of the offer.
- Name
edition- Type
- string
- Description
The edition, as UUID or alias. Host users must name one; without it the answer is
403.
Optional attributes
- Name
hosts- Type
- string[]
- Description
Hosts, as UUIDs or aliases. Host users may only name their own.
- Name
dates- Type
- object[]
- Description
Dates, each with
begin, and optionallyendandrecurrence.
- Name
categories- Type
- string[]
- Description
Offer categories, as UUIDs or aliases.
- Name
publish- Type
- string
- Description
public(the default), orprivate_linkfor an offer that can only be reached through its private link.
- Name
contact- Type
- object[]
- Description
Contact persons: objects with
name,emailandphone. Defaults to the contact details of the first host's profile.
You can also send teaser, description, fee, minAge, maxAge, minParticipants, maxParticipants, requiresApplication, onlineApplication, applicationDeadline, meetingPoint, meetingAddress, meetingLat, meetingLng, bring, applyText, wheelchairAccessible, accessibility, comment, collectDateOfBirth and disableOnlinePayment, as described in the model.
Ages range from 0 to 99, fees and participant numbers can't be negative, and short texts such as meetingPoint, bring, applyText and comment are limited to 255 characters.
curl -X POST https://example.fepli.eu/api/offers \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Töpfern für Anfänger",
"edition": "herbstferien-2026",
"hosts": ["stadtjugendring-elmsbrueck"],
"dates": [
{ "begin": "2026-10-20T14:00:00+02:00", "end": "2026-10-20T16:30:00+02:00" }
],
"fee": 500,
"minAge": 6,
"maxAge": 10,
"maxParticipants": 8,
"requiresApplication": true,
"onlineApplication": true,
"categories": ["kreativ"]
}'
Response (201 Created, excerpt)
{
"uuid": "0193c8a2-5d6e-7f70-9a8b-1c2d3e4f5a14",
"name": "Töpfern für Anfänger",
"alias": "toepfern-fuer-anfaenger",
"status": ["draft"],
"…": "…",
"transitions": ["finalize"]
}
/offers/{uuid}Update an offer
Changes an offer. Send only the attributes you want to change. The attributes are the same as for creating an offer. null clears a field, except for name, edition, hosts, dates, categories, publish and the yes/no fields, which ignore it. An empty body is a 422.
Dates are replaced as a whole when you send dates. To keep an existing date, include its uuid; dates you leave out are deleted, and dates without a uuid are added.
Admins can change any offer. Host users can change their offers until they are reviewed or published, and only while the edition is open for editing (see the edition's editableForHosts). Otherwise the answer is 403.
Host users cannot change who runs an offer: hosts must name the same hosts as before, in any order, or the answer is 403. A change of edition needs the permission to create offers in the new edition, as for creating an offer; otherwise the answer is 403.
curl -X PATCH https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03 \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"maxParticipants": 18,
"dates": [
{
"uuid": "0192a4f2-0a11-7e6c-9d38-2b7f5c1e8a04",
"begin": "2026-10-14T09:00:00+02:00",
"end": "2026-10-14T12:30:00+02:00"
},
{ "begin": "2026-10-16T09:00:00+02:00", "end": "2026-10-16T12:30:00+02:00" }
]
}'
The response holds the changed offer.
/offers/{uuid}Delete an offer
Deletes an offer with its attendances. Responds with 204 No Content.
The deletion is refused with 409 while a paid receipt refers to one of the offer's attendances. Reverse the receipt first, or cancel the offer instead. Host users can only delete offers that are neither reviewed nor published and have no attendances yet, and only while the edition is open for editing (see the edition's editableForHosts).
If the offer has variants, the next one takes its place as the main offer.
curl -X DELETE https://example.fepli.eu/api/offers/0193c8a2-5d6e-7f70-9a8b-1c2d3e4f5a14 \
-H "Authorization: Bearer $FEPLI_TOKEN"
/offers/{uuid}/transitionApply a transition
Moves the offer through its workflow. The offer's transitions list the ones you may apply right now. Anything else, including a transition you lack the permission for, is a 409 that names the possible transitions.
cancel and relaunch e-mail the families with a place when you pass a notifyText, the same as in the admin. Without one, nobody is e-mailed.
Required attributes
- Name
transition- Type
- string
- Description
One of
finalize,to_draft,approve,unapprove,publish,unpublish,cancel,relaunch,complete.
Optional attributes
- Name
notifyText- Type
- string
- Description
For
cancelandrelaunch: the text of the e-mail to the families with a place. Leave it out and no e-mail goes out.
curl -X POST https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03/transition \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"transition": "cancel",
"notifyText": "Leider muss die Fahrradtour wegen Sturmwarnung ausfallen."
}'
Response (excerpt)
{
"uuid": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03",
"status": ["published", "cancelled"],
"…": "…",
"transitions": ["relaunch", "unpublish"]
}
/offers/{uuid}/copyCopy an offer
Copies an offer into a new offer in the state draft, like Angebot kopieren in the admin. Responds with 201 Created and the copy. The original is left as it is.
Without edition, the copy is made in the offer's own edition, dates included. With edition, it is made in that edition, and the dates and the application deadline stay behind: they belonged to the old holidays. Add the new ones with PATCH /offers/{uuid}. This also applies when you name the offer's own edition.
You need to see the original (404 otherwise) and be allowed to create an offer in the edition the copy lands in: admins always are, host users while that edition's host_editing_stage task is active (403 otherwise). An edition that doesn't exist is a 422.
What a copy carries over
The copy takes the texts and settings of the original: name, teaser, description, fee, ages, participant numbers, the settings for applying and the application questions, meeting point, what to bring, accessibility, offer categories, hosts, contact persons, the accounts that get the e-mails about the participant list, the internal comment, publish and consent forms. Images and attachments are carried over too; the copy refers to the same files.
It doesn't take what the original has gathered: attendances, comments, the history, variants, and the accounts the offer was shared with directly. A copy is always an offer of its own, even when the original is a variant. It gets a new uuid and its own private link. Its createdAt and modifiedAt are the moment of the copy.
Optional attributes
- Name
edition- Type
- string
- Description
The edition to copy into, as UUID or alias. Leave it out to copy within the offer's own edition, dates included.
The request needs a JSON body: send {} to copy within the edition.
Copying a whole edition
There is no call for that. List the offers with GET /offers?edition=… and copy each into the new edition. The admin's Aus Vorjahr kopieren leaves out the variants (offers with variantOf), so they don't turn into offers of their own; do the same if you want its result.
curl -X POST https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03/copy \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"edition": "herbstferien-2027"}'
Response (201 Created, excerpt)
{
"uuid": "019a3b1e-7c2d-7e4f-8a5b-6c7d8e9f0a21",
"name": "Fahrradtour durch den Stadtpark",
"edition": {
"uuid": "019a3b10-2c3d-7e4f-9a5b-6c7d8e9f0a20",
"name": "Herbstferien 2027",
"alias": "herbstferien-2027"
},
"status": ["draft"],
"dates": [],
"fee": 750,
"currency": "EUR",
"…": "…",
"attendances": {
"confirmed": 0,
"waitlisted": 0,
"waiting": 0,
"withdrawn": 0,
"rejected": 0,
"total": 0
},
"transitions": ["finalize"]
}
/offers/{uuid}/variantsCreate a variant
Creates a variant of an offer: the same activity for another group of participants, usually on other dates. Like Neuen Termin erstellen in the admin. Responds with 201 Created and the new variant.
A variant is a copy in the state draft, in the same edition and with the same dates, that is linked to the main offer: its variantOf names the main offer, and the main offer lists it in variants. Change its dates with PATCH /offers/{uuid}. A variant of a variant is linked to the same main offer.
The request has no body. The same permissions apply as for a copy: 404 if you can't see the offer, 403 if you may not create an offer in its edition.
curl -X POST https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03/variants \
-H "Authorization: Bearer $FEPLI_TOKEN"
Response (201 Created, excerpt)
{
"uuid": "019a3b2f-1d2e-7f30-8b4c-5d6e7f8a9b22",
"name": "Fahrradtour durch den Stadtpark",
"status": ["draft"],
"dates": [
{
"uuid": "019a3b2f-1d2f-7a41-9c5d-6e7f8a9b0c23",
"begin": "2026-10-14T09:00:00+02:00",
"end": "2026-10-14T12:00:00+02:00"
}
],
"…": "…",
"variantOf": {
"uuid": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03",
"name": "Fahrradtour durch den Stadtpark",
"alias": "fahrradtour-durch-den-stadtpark"
}
}
/offers/{uuid}/refillRefill from the waitlist
Fills the free places of an offer from its waitlist, like Teilnahmeliste auffüllen in the admin. Families move up in the order of the waitlist (first come, first served), whatever application system the edition uses. Each family that moves up is confirmed, and its fee falls due as for any confirmation.
The work is done in the background, shortly after the call. The API answers 202 Accepted with the offer as it is at that moment; fetch its participant list a little later to see who moved up.
To add places, raise maxParticipants with PATCH /offers/{uuid}, then call this endpoint. That is what Anzahl Plätze erhöhen does in the admin.
The call is refused with 409 when there is nothing to do: the offer has no dates or its first date has begun, nobody is on the waitlist, or every place is taken. It needs the permission to change the offer: admins always have it; host users only until the offer is reviewed or published, while the edition is open for editing (403 otherwise).
Optional attributes
The request needs a JSON body: send {} for the defaults.
- Name
notify- Type
- boolean
- Description
E-mail the families who move up that they have a place. Defaults to
false.
- Name
commit- Type
- boolean
- Description
Record the confirmations now. Defaults to
true. Withfalse, they are held back until the edition's decisions are committed;notifythen has to befalsetoo (422otherwise).
curl -X POST https://example.fepli.eu/api/offers/0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03/refill \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"notify": true}'
Response (202 Accepted, excerpt)
{
"uuid": "0192a4f1-6e3b-7c85-b1d2-8f4e6a9c3b03",
"maxParticipants": 18,
"…": "…",
"attendances": {
"confirmed": 15,
"waitlisted": 5,
"waiting": 0,
"withdrawn": 1,
"rejected": 0,
"total": 20
}
}