fepli
DevelopersAPI resources

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. email keeps 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_MEMBER for families, ROLE_HOST for members of hosts, ROLE_ADMIN and the admin roles for admins. The admin roles ROLE_PARTICIPANTS_ADMIN, ROLE_PAYMENTS_ADMIN and ROLE_CMS_ADMIN count 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, city and country. An empty address appears as null in 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 its uuid only.

  • 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 uuid and balance in cents. Only for callers with ROLE_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.


GET/accounts

List 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, host or admin.

  • Name
    host
    Type
    string
    Description

    Only members of this host (UUID or alias).

  • Name
    disabled
    Type
    boolean
    Description

    true for suspended accounts only.

  • Name
    modifiedSince
    Type
    timestamp
    Description

    Only accounts changed since this moment.

  • Name
    page, itemsPerPage
    Type
    integer
    Description

    See Pagination.

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

GET/accounts/{uuid}

Retrieve an account

Returns one account.

GET/accounts/{uuid}
curl https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
  -H "Authorization: Bearer $FEPLI_TOKEN"

POST/accounts

Create 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 de or en.

  • Name
    roles
    Type
    string[]
    Description

    Any of member, host, admin, super_admin, participants_admin, payments_admin, cms_admin, or the ROLE_… names. If none of member, host or admin is given, member is added. super_admin adds admin. participants_admin, payments_admin and cms_admin go with admin or super_admin only (422). Only a super admin grants admin, super_admin and 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, city and country (two letters, defaults to de).

  • Name
    disabled
    Type
    boolean
    Description

    Create the account suspended.

  • Name
    notifyComments
    Type
    boolean
    Description

    Whether the person gets notified about new comments.

POST/accounts
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"
    }
  ],
  "…": "…"
}

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

  • email changes the address the person signs in with once the new address is confirmed. It waits in pendingEmail, and fepli sends it a link, valid for 24 hours. Until the link is used, email keeps 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": true suspends the account: the person can't sign in any more, and an open session of the account ends with its next request. false lifts 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 lastname is refused (422): it can only be written where the record is decrypted.
  • roles replaces 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.
  • hosts replaces the account's memberships. To add or remove a single one, use Add a member and Remove a member.
  • address replaces the first postal address as a whole: send all its fields. null removes 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.

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

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

DELETE/accounts/{uuid}
curl -X DELETE https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05 \
  -H "Authorization: Bearer $FEPLI_TOKEN"

POST/accounts/{uuid}/pseudonymize

Pseudonymise 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.

POST/accounts/{uuid}/pseudonymize
curl -X POST https://example.fepli.eu/api/accounts/0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05/pseudonymize \
  -H "Authorization: Bearer $FEPLI_TOKEN"

POST/accounts/{uuid}/unblock-email

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).

POST/accounts/{uuid}/unblock-email
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,
  "…": "…"
}

Was this page helpful?