fepli
DevelopersAPI resources

Consents

A consent records that a family or a host agreed to something, or declined it: a consent form of an edition or an offer, such as permission to take photos, or the general terms. Consents can expire and can be revoked.

All consent endpoints need ROLE_ADMIN.

Every decision is a record of its own and stays the proof of what was declared, by whom and when. Deciding again adds a record; declining a consent in effect revokes it and adds a declined record. A revocation is final: consenting again is a new record. Records can't be deleted one by one.

Consents after a deletion

Deleting an account or a participant is not a revocation. A consent that was given stays in force, because what it allowed may go on: the photos stay published. Its record stays as the proof, without account and participant, and keeps the names of the person and of whoever declared. Declined consents, and consents for offers that haven't begun, are deleted with the person.

To revoke along with a deletion, call Revoke a consent for each consent first, then delete. The website and the admin ask the same question in their deletion dialogs.

A record is deleted once the consent is over (revoked, expired, or done with its offer or edition where its form says so) and the retention period for proofs has passed, three years from the end of that year unless the admin set another.

  • Name
    uuid
    Type
    string
    Description

    The consent's identifier.

  • Name
    type
    Type
    string
    Description

    form_consent for a consent to a form of an edition or an offer, consent for the general one.

  • Name
    form
    Type
    object
    Description

    For consents to a form: the form's uuid, its title, its subject (who it is collected for: participant, account or host), compulsory (compulsory, opt-in or force_decision) and its text. Forms that were opt-out read force_decision: opt-out is no longer offered.

  • Name
    account
    Type
    reference
    Description

    The account that gave the consent. Left out once the account is deleted.

  • Name
    participant
    Type
    reference
    Description

    The participant the consent is for. Left out once the participant is deleted.

  • Name
    offer
    Type
    reference
    Description

    The offer the consent is for.

  • Name
    edition
    Type
    reference
    Description

    The edition the consent is for.

  • Name
    decision
    Type
    integer
    Description

    1 if consent was given, 0 if it was declined.

  • Name
    signedAt
    Type
    timestamp
    Description

    When the consent was given.

  • Name
    signedBy
    Type
    string
    Description

    Who declared, when it wasn't the account holder: a guardian deciding through the link to the attendance, or an admin recording the consent in the admin. Never changes after the record is made.

  • Name
    signedVia
    Type
    string
    Description

    How the decision arrived: link (a guardian through the link to the attendance), account (the family signed in on the website), guest (the application form without an account), admin (in the admin) or api (reserved; no endpoint records a decision yet). Left out for records made before this was recorded.

  • Name
    revokedAt
    Type
    timestamp
    Description

    When the consent was revoked.

  • Name
    revokedBy
    Type
    string
    Description

    Who recorded the revocation: the account holder, an admin, or the API client (a person's name or the service account's). Left out for revocations made before this was recorded.

  • Name
    validUntil
    Type
    timestamp
    Description

    When the consent expires.

  • Name
    valid
    Type
    boolean
    Description

    Whether the record is in effect: not revoked and not expired. Check decision as well: a declined consent can be valid too.

  • Name
    createdAt
    Type
    timestamp
    Description

    When the record was created.


GET/consents

List all consents

Returns a page of consents, newest first.

Optional filters

  • Name
    account
    Type
    string
    Description

    Only consents of this account (UUID, or e-mail address within your own tenant).

  • Name
    participant
    Type
    string
    Description

    Only consents for this participant (UUID).

  • Name
    offer
    Type
    string
    Description

    Only consents to forms of this offer (UUID).

  • Name
    edition
    Type
    string
    Description

    Only consents to forms of this edition (UUID or alias).

  • Name
    revoked
    Type
    boolean
    Description

    true for revoked consents only, false to leave them out.

  • Name
    page, itemsPerPage
    Type
    integer
    Description

    See Pagination.

GET/consents
curl -G https://example.fepli.eu/api/consents \
  -H "Authorization: Bearer $FEPLI_TOKEN" \
  --data-urlencode "account=familie.mueller@example.org" \
  -d revoked=false

Response

[
  {
    "uuid": "0192d0e9-6d7e-7f80-9a1b-2c3d4e5f6a31",
    "type": "form_consent",
    "form": {
      "uuid": "01913e5e-8b9c-7d0e-9f1a-2b3c4d5e6f32",
      "title": "Fotoerlaubnis",
      "subject": "participant",
      "compulsory": "opt-in",
      "text": "Ich bin damit einverstanden, dass Fotos meines Kindes …"
    },
    "account": {
      "uuid": "0191c7b2-4d5e-7f60-8a1b-2c3d4e5f6a05",
      "name": "Anna Müller"
    },
    "participant": {
      "uuid": "0191c7b3-1f2a-7c4d-8e5f-6a7b8c9d0e06",
      "name": "Lena Müller"
    },
    "edition": {
      "uuid": "01913e5c-2b4a-7d10-9f3e-6a1c2e7b4d01",
      "name": "Herbstferien 2026",
      "alias": "herbstferien-2026"
    },
    "decision": 1,
    "signedAt": "2026-09-01T08:02:57+02:00",
    "signedVia": "account",
    "valid": true,
    "createdAt": "2026-09-01T08:02:57+02:00"
  }
]

GET/consents/{uuid}

Returns one consent.

GET/consents/{uuid}
curl https://example.fepli.eu/api/consents/0192d0e9-6d7e-7f80-9a1b-2c3d4e5f6a31 \
  -H "Authorization: Bearer $FEPLI_TOKEN"

POST/consents/{uuid}/revoke

Revokes a consent on the family's behalf, for example after they sent a signed paper form. The request has no body. Returns the revoked consent, with revokedAt and revokedBy set; the record itself stays. The revocation also appears in the admin's Betroffenenrechte log.

Whoever relies on the consent is told by e-mail: the organisers of the offer for a consent to an offer's form, the team and the organisers for a consent to an edition's form.

Only a consent that was given (decision 1) can be revoked; a declined one answers 403. A consent that is already revoked can't be revoked again (409).

POST/consents/{uuid}/revoke
curl -X POST https://example.fepli.eu/api/consents/0192d0e9-6d7e-7f80-9a1b-2c3d4e5f6a31/revoke \
  -H "Authorization: Bearer $FEPLI_TOKEN"

Was this page helpful?