Accounts
An account is how a person signs in to fepli. Families use one to apply for their children; organisers' team members and admins use one to work in the admin. The API shows accounts the way the admin's Accounts section does.
All account endpoints need ROLE_ADMIN.
The account model
- Name
uuid- Type
- string
- Description
The account's identifier.
- Name
email- Type
- string
- Description
The e-mail address the person signs in with. Accepted wherever an account is named, as in
?account=familie.mueller@example.org.
- Name
firstname- Type
- string
- Description
The first name.
- Name
lastname- Type
- string
- Description
The last name.
- Name
name- Type
- string
- Description
The full name.
- Name
phone- Type
- string
- Description
The phone number.
- Name
mobile- Type
- string
- Description
The mobile number.
- Name
roles- Type
- string[]
- Description
The account's roles:
ROLE_MEMBERfor families,ROLE_HOSTfor organiser team members,ROLE_ADMINand the admin roles for the team.
- Name
locale- Type
- string
- Description
The language the person uses fepli in, such as
de.
- Name
disabled- Type
- boolean
- Description
Whether the account is suspended and can't sign in.
- Name
activatedAt- Type
- timestamp
- Description
When the person confirmed their e-mail address.
- Name
lastLogin- Type
- timestamp
- Description
When the person last signed in.
- Name
createdAt- Type
- timestamp
- Description
When the account was created.
- Name
modifiedAt- Type
- timestamp
- Description
When the account was last changed.
- Name
blockedEmail- Type
- boolean
- Description
Whether e-mails to this address bounced. fepli stops sending to blocked addresses, which explains many "I never got an e-mail" cases. See Unblock an e-mail address.
- Name
unsubscribed- Type
- boolean
- Description
Whether the person unsubscribed from e-mails sent by fepli.
- Name
hasPassword- Type
- boolean
- Description
Whether the person has set a password. Without one, they sign in with a link sent by e-mail.
- Name
magicLinksDisabled- Type
- boolean
- Description
Whether signing in by e-mail link is switched off for this account.
- Name
addresses- Type
- object[]
- Description
Postal addresses, each with
street,postalCode,cityandcountry. An empty address appears asnullin the list.
- Name
hosts- Type
- reference[]
- Description
The organisers this account is a team member of.
- Name
participants- Type
- reference[]
- Description
The participants, usually the children, of this account.
- Name
sharedOffers- Type
- reference[]
- Description
Single offers that were shared with this account directly.
- Name
debtor- Type
- object
- Description
The family's ledger, created with their first application: its
uuidandbalancein cents.
- Name
piiMasked- Type
- boolean
- Description
Whether personal data was left out because you may not see it. See Masked personal data.
List all accounts
Returns a page of accounts, ordered by last name and first name.
Optional filters
- Name
q- Type
- string
- Description
Only accounts whose name or e-mail address contains this text.
- Name
email- Type
- string
- Description
Only the account with exactly this e-mail address.
- Name
role- Type
- string
- Description
Only accounts with this role:
member,hostoradmin.
- Name
host- Type
- string
- Description
Only team members of this organiser (UUID or alias).
- Name
disabled- Type
- boolean
- Description
truefor suspended accounts only.
- Name
modifiedSince- Type
- timestamp
- Description
Only accounts changed since this moment.
- Name
page, itemsPerPage- Type
- integer
- Description
See Pagination.
Request
curl -G https://ferienpass-musterstadt.de/api/accounts \
-H "Authorization: Bearer $FEPLI_TOKEN" \
--data-urlencode "email=familie.mueller@example.org"
Response
[
{
"uuid": "0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05",
"email": "familie.mueller@example.org",
"firstname": "Anna",
"lastname": "Müller",
"name": "Anna Müller",
"mobile": "0170 1234567",
"roles": ["ROLE_MEMBER"],
"locale": "de",
"disabled": false,
"activatedAt": "2025-06-02T19:14:08+02:00",
"lastLogin": "2026-09-18T07:41:55+02:00",
"createdAt": "2025-06-02T19:12:40+02:00",
"modifiedAt": "2026-09-01T12:00:17+02:00",
"blockedEmail": false,
"unsubscribed": false,
"hasPassword": false,
"magicLinksDisabled": false,
"addresses": [
{
"street": "Lindenallee 12",
"postalCode": "12345",
"city": "Musterstadt",
"country": "de"
}
],
"hosts": [],
"participants": [
{ "uuid": "0191c7b3-1f2a-7c4d-8e5f-6a7b8c9d0e06", "name": "Lena Müller" },
{ "uuid": "0191c7b3-2e3f-7a4b-9c5d-6e7f8a9b0c16", "name": "Paul Müller" }
],
"sharedOffers": [],
"debtor": {
"uuid": "0191c7b4-5a6b-7c8d-9e0f-1a2b3c4d5e09",
"balance": 0
},
"piiMasked": false
}
]
Retrieve an account
Returns one account.
Request
curl https://ferienpass-musterstadt.de/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
-H "Authorization: Bearer $FEPLI_TOKEN"
Create an account
Creates an account. It has no password: the person signs in with a link sent by e-mail, or sets a password later. Without roles, the account is a family account (ROLE_MEMBER).
Only super admins can create admin accounts.
Required attributes
- Name
email- Type
- string
- Description
A valid e-mail address, not used by another account.
Optional attributes
- Name
firstname, lastname- Type
- string
- Description
Up to 255 characters each.
- Name
phone, mobile- Type
- string
- Description
Up to 64 characters each.
- Name
locale- Type
- string
- Description
The language, such as
deoren.
- Name
roles- Type
- string[]
- Description
Any of
member,host,admin,super_admin,participants_admin,payments_admin,cms_admin, or theROLE_…names. If none ofmember,hostoradminis given,memberis added.
- Name
hosts- Type
- string[]
- Description
Organisers (UUIDs or aliases) the account is a team member of. Adds
ROLE_HOST.
- Name
address- Type
- object
- Description
street,postalCode,cityandcountry(two letters, defaults tode).
- Name
disabled- Type
- boolean
- Description
Create the account suspended.
- Name
notifyComments- Type
- boolean
- Description
Whether the person gets notified about new comments.
Request
curl -X POST https://ferienpass-musterstadt.de/api/accounts \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "m.schneider@kunstschule-musterstadt.de",
"firstname": "Mira",
"lastname": "Schneider",
"hosts": ["kunstschule-musterstadt"]
}'
Response (201 Created, excerpt)
{
"uuid": "0193c9e4-8f9a-7b0c-9d1e-2f3a4b5c6d21",
"email": "m.schneider@kunstschule-musterstadt.de",
"name": "Mira Schneider",
"roles": ["ROLE_MEMBER", "ROLE_HOST"],
"hasPassword": false,
"hosts": [
{
"uuid": "0193c9d1-2e3f-7a4b-8c5d-6e7f8a9b0c18",
"name": "Kunstschule Musterstadt",
"alias": "kunstschule-musterstadt"
}
],
"…": "…"
}
Update an account
Changes an account. The attributes are the same as for creating an account; send only what you want to change.
"disabled": truesuspends the account: the person can't sign in any more.falselifts the suspension. This has nothing to do with a blocked e-mail address; for that, see Unblock an e-mail address.rolesreplaces the account's roles. Grantingadminorsuper_adminneeds a super admin; the other admin roles can be granted by any admin.hostsreplaces the account's memberships. To add or remove a single one, use Add a team member and Remove a team member.addressreplaces the first postal address as a whole: send all its fields.nullremoves it.
Changing, deleting or pseudonymising an admin's account needs a super admin; admins may always change their own. Accounts whose personal data is masked for you can't be changed.
Request
curl -X PATCH https://ferienpass-musterstadt.de/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mobile": "0171 7654321"}'
Delete an account
Deletes an account together with its participants and their applications. Responds with 204 No Content.
If a paid receipt refers to one of the family's applications, the account can't be deleted (409): the receipt has to stay complete for bookkeeping. Pseudonymise the account instead.
Request
curl -X DELETE https://ferienpass-musterstadt.de/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
-H "Authorization: Bearer $FEPLI_TOKEN"
Pseudonymise an account
Erases the personal data of the account and its participants. The account and its participants are deleted; their applications are kept under a random pseudonym, and receipts keep their billing address, as bookkeeping requires. Use it when a family asks for their data to be deleted and a paid receipt prevents deleting the account.
The request has no body, and the response is 204 No Content. Afterwards, the account is a 404.
Request
curl -X POST https://ferienpass-musterstadt.de/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05/pseudonymize \
-H "Authorization: Bearer $FEPLI_TOKEN"
Unblock an e-mail address
Asks for e-mails to the account's address to be delivered again after they bounced, as E-Mail freischalten does in the admin. The request has no body.
The block is kept by the mail provider; fepli only mirrors it. fepli asks the provider to lift it, and blockedEmail turns false once the provider has done so. The response is therefore 202 Accepted with the account, which may still show "blockedEmail": true: retrieve the account again a moment later. If the provider refuses, the block stays and so does blockedEmail.
Unblock an address only once the cause is gone, for example a full mailbox that was emptied: an address that still doesn't work bounces again.
An address that isn't blocked is a 409. This endpoint doesn't touch signing in: to stop a person from signing in, suspend the account with "disabled": true (Update an account).
Request
curl -X POST https://ferienpass-musterstadt.de/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05/unblock-email \
-H "Authorization: Bearer $FEPLI_TOKEN"
Response (202 Accepted, excerpt)
{
"uuid": "0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05",
"email": "familie.mueller@example.org",
"blockedEmail": true,
"…": "…"
}