Dokumentation/Entwickler
Zurück
  • Erste Schritte
    • Frontends und App-Typen
    • Umgebungen und Endpunkte
  • OAuth-Clients
    • Client-ID und Client-Secret
    • Redirect-URIs und Start-URL
    • Secret erneuern
  • Login with appsolut
    • Authorization-Code-Flow
    • Tokens und Claims
    • Frontend-Rolle
    • Abmeldung
    • Widerruf und ausgestellte Tokens
    • Fehler des Token-Endpunkts
  • Frontend-Schlüssel
    • Einen Schlüssel ausstellen und aufbewahren
    • Einen Schlüssel senden
    • Wechseln und widerrufen
  • Mitglieder-API
    • Berechtigung aus einem Backend
    • Das angemeldete Mitglied
    • Ergebnisse, Ratenlimits und Fehler
    • Ist ein Antragsteller ein berechtigtes Mitglied?
    • Die Mitgliedschaft des angemeldeten Frontend-Benutzers
  • appsolut Register-API
    • Die API umsetzen
    • Anbinden und testen
    • Ein Mitglied mit seinem Prüfcode verifizieren
    • Alle Mitglieder auflisten
    • Der Status mehrerer Mitglieder
    • Der Status eines Mitglieds
    • Die Personendaten mehrerer Mitglieder
    • Die Personendaten eines Mitglieds
    • Die Claims mehrerer Mitglieder
    • Die Claims eines Mitglieds
    • Health-Check

Die Mitgliedschaft des angemeldeten Frontend-Benutzers

GET /api/v1/members/me

Liest die Organisationsmitgliedschaft des Frontend-Benutzers, der beim aufrufenden Frontend angemeldet ist, um Formulare in seinem Namen vorauszufüllen und abzusenden. Status, Communities und Register sind das, was das Studio aus der letzten Mitgliedschaftsprüfung des Benutzers gespeichert hat, unter Anwendung der Kulanzregel. Nur die Mitgliedsdaten (memberData: Geburtsdatum, Telefon, Postanschrift) werden bei einer gültigen Mitgliedschaft live aus dem Register gelesen, mit dem die Mitgliedschaft verknüpft ist; das Studio speichert nichts davon und protokolliert dafür keine Mitgliedschaftsprüfung.

Nur ein internes Frontend darf diesen Endpunkt aufrufen, mit seinem Frontend-Schlüssel und dem Zugriffstoken des Benutzers aus Login with appsolut, ausgestellt für dieses Frontend (client_id) bei dieser Organisation (tenant_id). Der Benutzer braucht seine Frontend-Aktivierung für das Frontend und, falls er eine Organisationsmitgliedschaft hat, eine, die nicht deaktiviert ist. Ein Benutzer ohne Mitgliedschaft erhält status: null und keine Mitgliedsfelder.

Nie die Mitgliedsnummer, die Definitionsversion, Claims oder den Grund, warum eine Mitgliedschaft nicht gültig ist. 600 Anfragen pro Frontend-Benutzer und Stunde, danach 429: genug für jedes Vorausfüllen und Absenden, es stoppt nur eine außer Kontrolle geratene Schleife.

Authentifizierung

  • Alle zusammen:
    • frontendKey (HTTP-Bearer-Token im Format ofk_<prefix>_<secret>): Der Frontend-Schlüssel des Frontends, im Studio auf der Seite des Frontends ausgestellt und einmal angezeigt: Authorization: Bearer ofk_…. Bis zu zwei sind gleichzeitig aktiv, sodass ein Schlüssel ohne Unterbrechung gewechselt werden kann.
    • frontendUserToken (im Header X-Frontend-User-Token gesendet): Das Zugriffstoken des angemeldeten Frontend-Benutzers aus Login with appsolut (das OAuth-Token, das Ihr Backend für ihn hält), unverändert. Nur zusätzlich zum Frontend-Schlüssel, nie an dessen Stelle.

Antworten

200

Die Mitgliedschaft des Benutzers. status: valid (eine gültige Mitgliedschaft, auch unter der Kulanzregel, solange das Register nicht antworten kann), not_valid (ein Register hat sie bei der letzten Prüfung abgelehnt), unavailable (gültig bei der letzten Prüfung, die ein Register erreicht hat, aber das Register hat seither 7 Tage lang nicht geantwortet) oder null (keine Organisationsmitgliedschaft). memberData sind die Mitgliedsdaten einer gültigen Mitgliedschaft; "unavailable", wenn ihr externes Register gerade nicht erreichbar ist oder nicht antworten kann, auch nicht innerhalb von 1,5 s (der Rest der Antwort gilt; fragen Sie später erneut); null, wenn die Mitgliedschaft nicht gültig ist oder das Register das Mitglied nicht mehr führt (der Eintrag ist weg oder deaktiviert, oder ein externes Register findet es nicht).

Inhaltstyp: application/json

Eine dieser Formen:

Mit Organisationsmitgliedschaft

FeldTypPflichtBeschreibung
statusstringJaErlaubte Werte: valid, not_valid, unavailable.
communitiesstring[]JaDie Namen der Communities der Organisation, in denen die Mitgliedschaft liegt, nach den Angaben ihrer letzten gültigen Prüfung; leer, außer bei valid.
registerstring oder nullJaDas Register, mit dem die Mitgliedschaft verknüpft ist; null, sobald es gelöscht ist.
lastVerifiedAtstring (date-time)JaDie letzte Prüfung, die die Mitgliedschaft als gültig befunden hat.
frontendsUsedobject[]JaDie Frontends der Organisation, bei denen sich der Benutzer angemeldet hat, die letzte Anmeldung zuerst.
frontendsUsed[].namestringJaDer Name des Frontends.
frontendsUsed[].firstActivatedAtstring (date-time)JaWann sich der Benutzer zum ersten Mal dort angemeldet hat.
frontendsUsed[].lastSignedInAtstring (date-time)JaWann sich der Benutzer zuletzt dort angemeldet hat.
memberDataobject oder "unavailable" oder nullJaLive aus dem verknüpften Register gelesen, nur bei einer Mitgliedschaft mit valid (auch unter der Kulanzregel). Die Mitgliedsdaten, wenn das Register das Mitglied führt; "unavailable", wenn ein externes Register nicht erreichbar ist oder nicht innerhalb von 1,5 s antworten kann; null, wenn die Mitgliedschaft nicht valid ist, der Eintrag weg oder deaktiviert ist oder ein externes Register das Mitglied nicht findet.
memberData.birthDatestring (date) oder nullJaDas Geburtsdatum des Mitglieds.
memberData.phonestring oder nullJaSo, wie das Register sie führt, nie normalisiert.
memberData.addressobject oder nullJaNull, wenn Straße, Postleitzahl und Ort alle fehlen.
memberData.address.streetstring oder nullJaStraße und Hausnummer.
memberData.address.zipstring oder nullJaPostleitzahl.
memberData.address.citystring oder nullJaOrt.

Ohne Organisationsmitgliedschaft

FeldTypPflichtBeschreibung
statusnullJa
frontendsUsedobject[]JaDie Frontends der Organisation, bei denen sich der Benutzer angemeldet hat, die letzte Anmeldung zuerst.
frontendsUsed[].namestringJaDer Name des Frontends.
frontendsUsed[].firstActivatedAtstring (date-time)JaWann sich der Benutzer zum ersten Mal dort angemeldet hat.
frontendsUsed[].lastSignedInAtstring (date-time)JaWann sich der Benutzer zuletzt dort angemeldet hat.

Beispiel: Ein gültiges Mitglied eines internen Registers

{
  "status": "valid",
  "communities": [
    "Pensionistinnen und Pensionisten",
    "Gesamte Belegschaft"
  ],
  "register": "Pensionistinnen und Pensionisten",
  "lastVerifiedAt": "2026-10-24T08:15:00.000Z",
  "frontendsUsed": [
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-09-01T07:30:00.000Z",
      "lastSignedInAt": "2026-10-24T08:15:00.000Z"
    }
  ],
  "memberData": {
    "birthDate": "1958-03-14",
    "phone": "+43 660 1234567",
    "address": {
      "street": "Beispielgasse 12",
      "zip": "7000",
      "city": "Eisenstadt"
    }
  }
}

Beispiel: Ein gültiges Mitglied eines externen Registers, das keine Telefonnummer führt

{
  "status": "valid",
  "communities": [
    "Aktive Belegschaft",
    "Gesamte Belegschaft"
  ],
  "register": "SAP HR",
  "lastVerifiedAt": "2026-10-24T08:15:00.000Z",
  "frontendsUsed": [
    {
      "name": "Pannoniqa App",
      "firstActivatedAt": "2026-10-02T18:00:00.000Z",
      "lastSignedInAt": "2026-10-24T08:15:00.000Z"
    },
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-09-01T07:30:00.000Z",
      "lastSignedInAt": "2026-10-20T12:00:00.000Z"
    }
  ],
  "memberData": {
    "birthDate": "1979-02-02",
    "phone": null,
    "address": {
      "street": "Musterweg 3",
      "zip": "7100",
      "city": "Neusiedl am See"
    }
  }
}

Beispiel: Ein gültiges Mitglied, dessen Eintrag keine Mitgliedsdaten enthält

{
  "status": "valid",
  "communities": [
    "Aktive Belegschaft",
    "Gesamte Belegschaft"
  ],
  "register": "Betriebsrat",
  "lastVerifiedAt": "2026-10-24T08:15:00.000Z",
  "frontendsUsed": [
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-09-01T07:30:00.000Z",
      "lastSignedInAt": "2026-10-24T08:15:00.000Z"
    }
  ],
  "memberData": {
    "birthDate": null,
    "phone": null,
    "address": null
  }
}

Beispiel: Ein gültiges Mitglied, dessen externes Register nicht antworten kann

{
  "status": "valid",
  "communities": [
    "Aktive Belegschaft",
    "Gesamte Belegschaft"
  ],
  "register": "SAP HR",
  "lastVerifiedAt": "2026-10-24T08:15:00.000Z",
  "frontendsUsed": [
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-09-01T07:30:00.000Z",
      "lastSignedInAt": "2026-10-24T08:15:00.000Z"
    }
  ],
  "memberData": "unavailable"
}

Beispiel: Ein gültiges Mitglied, das sein Register nicht mehr führt

{
  "status": "valid",
  "communities": [
    "Gesamte Belegschaft"
  ],
  "register": "Pensionistinnen und Pensionisten",
  "lastVerifiedAt": "2026-10-24T08:15:00.000Z",
  "frontendsUsed": [
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-09-01T07:30:00.000Z",
      "lastSignedInAt": "2026-10-24T08:15:00.000Z"
    }
  ],
  "memberData": null
}

Beispiel: Bei der letzten Prüfung abgelehnt

{
  "status": "not_valid",
  "communities": [],
  "register": "Pensionistinnen und Pensionisten",
  "lastVerifiedAt": "2026-08-30T10:00:00.000Z",
  "frontendsUsed": [
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-08-01T09:00:00.000Z",
      "lastSignedInAt": "2026-10-20T12:00:00.000Z"
    }
  ],
  "memberData": null
}

Beispiel: Das Register hat 7 Tage lang nicht geantwortet

{
  "status": "unavailable",
  "communities": [],
  "register": null,
  "lastVerifiedAt": "2026-10-10T09:00:00.000Z",
  "frontendsUsed": [
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-09-15T09:00:00.000Z",
      "lastSignedInAt": "2026-10-24T09:00:00.000Z"
    }
  ],
  "memberData": null
}

Beispiel: Angemeldet, keine Organisationsmitgliedschaft

{
  "status": null,
  "frontendsUsed": [
    {
      "name": "Pannoniqa Portal",
      "firstActivatedAt": "2026-10-24T09:00:00.000Z",
      "lastSignedInAt": "2026-10-24T09:00:00.000Z"
    }
  ]
}

401

Kein Frontend-Schlüssel, oder einer, der fehlerhaft, unbekannt oder widerrufen ist, oder der Schlüssel eines getrennten Frontends; oder das Frontend ist extern; oder kein Benutzertoken, oder eines, das sich nicht verifizieren lässt, abgelaufen ist, einem Studio-Benutzer, einem anderen Frontend oder einer anderen Organisation gehört; oder die Frontend-Aktivierung des Benutzers fehlt, oder seine Mitgliedschaft ist deaktiviert. Jeder Fall erhält dieselbe Antwort.

Header

NameTypBeschreibung
WWW-Authenticate"Bearer"

Inhaltstyp: application/json

FeldTypPflichtBeschreibung
errorstringJaErlaubte Werte: invalid_request, unauthenticated, too_large, rate_limited, unavailable.

Beispiel: Nicht authentifiziert

{
  "error": "unauthenticated"
}

429

Mehr als 600 Anfragen für diesen Frontend-Benutzer in der Stunde, die mit seiner ersten gezählten Anfrage begonnen hat. Abgewiesene Anfragen werden nicht gezählt. Es gibt kein Retry-After.

Inhaltstyp: application/json

FeldTypPflichtBeschreibung
errorstringJaErlaubte Werte: invalid_request, unauthenticated, too_large, rate_limited, unavailable.

Beispiel: Ratenlimit erreicht

{
  "error": "rate_limited"
}

503

Das Studio selbst ist ausgefallen. Versuchen Sie es später erneut; Schlüssel und Token sind in Ordnung.

Inhaltstyp: application/json

FeldTypPflichtBeschreibung
errorstringJaErlaubte Werte: invalid_request, unauthenticated, too_large, rate_limited, unavailable.

Beispiel: Das Studio ist nicht verfügbar

{
  "error": "unavailable"
}