Accounts
An account is how a person signs in to fepli. Families use one to apply for their children; members of hosts and admins use one to work in the admin. The API shows accounts the way the admin's Konten 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 within your own tenant, as in
?account=familie.mueller@example.org.
- Name
pendingEmail- Type
- string
- Description
A new sign-in address that waits to be confirmed with the link sent to it.
emailkeeps the current address until then. Missing when no address waits or its link has expired. Read-only; see Update an account.
- Name
firstname- Type
- string
- Description
The first name.
- Name
lastname- Type
- string
- Description
The last name. Where the tenant encrypts end to end, the last name of a family's account is sealed: the field is missing, and the API does not hand it out.
- Name
name- Type
- string
- Description
The full name; the first name alone where the last name is sealed.
- 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 members of hosts,ROLE_ADMINand the admin roles for admins. The admin rolesROLE_PARTICIPANTS_ADMIN,ROLE_PAYMENTS_ADMINandROLE_CMS_ADMINcount on an admin's account only; on any other account they aren't listed.
- 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 hosts this account is a member of.
- Name
participants- Type
- reference[]
- Description
The participants, usually the children, of this account. Without
ROLE_PARTICIPANTS_ADMIN, each has itsuuidonly.
- Name
sharedOffers- Type
- reference[]
- Description
Single offers that were shared with this account directly.
- Name
debtor- Type
- object
- Description
The account's debtor, created with its first attendance: its
uuidandbalancein cents. Only for callers withROLE_PAYMENTS_ADMIN, and not while the app Zahlungen is switched off.
- Name
piiMasked- Type
- boolean
- Description
Whether personal data was left out because you may not see it. See Masked personal data.
/accountsList all accounts
Returns a page of accounts, ordered by last name and first name. Outside your own tenant, they are ordered by creation.
Optional filters
- Name
q- Type
- string
- Description
Only accounts whose name or e-mail address contains this text. Matches nothing outside your own tenant.
- Name
email- Type
- string
- Description
Only the account with exactly this e-mail address. Matches nothing outside your own tenant.
- Name
role- Type
- string
- Description
Only accounts with this role:
member,hostoradmin.
- Name
host- Type
- string
- Description
Only members of this host (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.
curl -G https://example.fepli.eu/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": "030 23125 456",
"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": "Elmsbrück",
"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
}
]
/accounts/{uuid}Retrieve an account
Returns one account.
curl https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
-H "Authorization: Bearer $FEPLI_TOKEN"
/accountsCreate an account
Creates an account. It has no password, and fepli e-mails nobody. The person signs in with a link sent by e-mail where their kind of account may use one, or through an invitation an admin sends from the admin, with which they set up their own sign-in. No endpoint sets a password. Without roles, the account gets 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.super_adminaddsadmin.participants_admin,payments_adminandcms_admingo withadminorsuper_adminonly (422). Only a super admin grantsadmin,super_adminand these three (403).
- Name
hosts- Type
- string[]
- Description
Hosts (UUIDs or aliases) the account is a 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.
curl -X POST https://example.fepli.eu/api/accounts \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "m.schneider@kunstschule.example.fepli.eu",
"firstname": "Mira",
"lastname": "Schneider",
"hosts": ["kunstschule-elmsbrueck"]
}'
Response (201 Created, excerpt)
{
"uuid": "0193c9e4-8f9a-7b0c-9d1e-2f3a4b5c6d21",
"email": "m.schneider@kunstschule.example.fepli.eu",
"name": "Mira Schneider",
"roles": ["ROLE_MEMBER", "ROLE_HOST"],
"hasPassword": false,
"hosts": [
{
"uuid": "0193c9d1-2e3f-7a4b-8c5d-6e7f8a9b0c18",
"name": "Kunstschule Elmsbrück",
"alias": "kunstschule-elmsbrueck"
}
],
"…": "…"
}
/accounts/{uuid}Update an account
Changes an account. The attributes are the same as for creating an account; send only what you want to change.
emailchanges the address the person signs in with once the new address is confirmed. It waits inpendingEmail, and fepli sends it a link, valid for 24 hours. Until the link is used,emailkeeps the current address, in the response too. Another new address replaces the one that waits, and the earlier link stops working. A change of upper and lower case only takes effect at once.- Once the link is used, the account signs in with the new address, sign-in and password links sent before stop working, and fepli tells the previous address. If another account took the address in the meantime, nothing changes.
- When you change another person's address, fepli tells their current address by e-mail right away, and the log under Betroffenenrechte in the admin records Neue Anmelde-Adresse eingetragen, without either address.
"disabled": truesuspends the account: the person can't sign in any more, and an open session of the account ends with its next request.falselifts the suspension. This has nothing to do with a blocked e-mail address; for that, see Unblock an e-mail address.- Where the last name is sealed by the end-to-end encryption, a new
lastnameis refused (422): it can only be written where the record is decrypted. rolesreplaces the account's roles, by the same rules as when creating an account. Changing the roles of an admin's account needs a super admin as well.hostsreplaces the account's memberships. To add or remove a single one, use Add a member and Remove a 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. Changing the email of a family's account (ROLE_MEMBER) needs ROLE_PARTICIPANTS_ADMIN (403). Accounts whose personal data is masked for you can't be changed.
curl -X PATCH https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
-H "Authorization: Bearer $FEPLI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mobile": "030 23125 457"}'
/accounts/{uuid}Delete an account
Deletes an account together with its participants. Their attendances for offers that haven't begun are withdrawn. A withdrawn attendance keeps its fee (payable) where the family's own withdrawal would: past the free cancellation period, and where the settings refuse withdrawals. Unpaid fees don't stop the deletion, though afterwards nobody can be billed for them. Responds with 204 No Content; afterwards, the account and its participants are a 404.
Consents they gave are not revoked and not deleted: each stays in force, as its own record with the name of the person, until it is revoked or over. To revoke along with the deletion, revoke the consents first. See Consents after a deletion.
Deleting a family's account (ROLE_MEMBER) needs ROLE_PARTICIPANTS_ADMIN, an admin's account a super admin (403).
If processing of the account or of one of its participants is restricted (Art. 18 GDPR), the account can't be deleted (409).
curl -X DELETE https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
-H "Authorization: Bearer $FEPLI_TOKEN"
/accounts/{uuid}/pseudonymizePseudonymise an account
Deprecated: does the same as Delete an account. Use DELETE /accounts/{uuid} instead.
The request has no body, and the response is 204 No Content.
curl -X POST https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05/pseudonymize \
-H "Authorization: Bearer $FEPLI_TOKEN"
/accounts/{uuid}/unblock-emailUnblock 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).
curl -X POST https://example.fepli.eu/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,
"…": "…"
}