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-Tokengesendet): 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.
- frontendKey (HTTP-Bearer-Token im Format
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
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
status | string | Ja | Erlaubte Werte: valid, not_valid, unavailable. |
communities | string[] | Ja | Die Namen der Communities der Organisation, in denen die Mitgliedschaft liegt, nach den Angaben ihrer letzten gültigen Prüfung; leer, außer bei valid. |
register | string oder null | Ja | Das Register, mit dem die Mitgliedschaft verknüpft ist; null, sobald es gelöscht ist. |
lastVerifiedAt | string (date-time) | Ja | Die letzte Prüfung, die die Mitgliedschaft als gültig befunden hat. |
frontendsUsed | object[] | Ja | Die Frontends der Organisation, bei denen sich der Benutzer angemeldet hat, die letzte Anmeldung zuerst. |
frontendsUsed[].name | string | Ja | Der Name des Frontends. |
frontendsUsed[].firstActivatedAt | string (date-time) | Ja | Wann sich der Benutzer zum ersten Mal dort angemeldet hat. |
frontendsUsed[].lastSignedInAt | string (date-time) | Ja | Wann sich der Benutzer zuletzt dort angemeldet hat. |
memberData | object oder "unavailable" oder null | Ja | Live 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.birthDate | string (date) oder null | Ja | Das Geburtsdatum des Mitglieds. |
memberData.phone | string oder null | Ja | So, wie das Register sie führt, nie normalisiert. |
memberData.address | object oder null | Ja | Null, wenn Straße, Postleitzahl und Ort alle fehlen. |
memberData.address.street | string oder null | Ja | Straße und Hausnummer. |
memberData.address.zip | string oder null | Ja | Postleitzahl. |
memberData.address.city | string oder null | Ja | Ort. |
Ohne Organisationsmitgliedschaft
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
status | null | Ja | |
frontendsUsed | object[] | Ja | Die Frontends der Organisation, bei denen sich der Benutzer angemeldet hat, die letzte Anmeldung zuerst. |
frontendsUsed[].name | string | Ja | Der Name des Frontends. |
frontendsUsed[].firstActivatedAt | string (date-time) | Ja | Wann sich der Benutzer zum ersten Mal dort angemeldet hat. |
frontendsUsed[].lastSignedInAt | string (date-time) | Ja | Wann 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
| Name | Typ | Beschreibung |
|---|---|---|
WWW-Authenticate | "Bearer" |
Inhaltstyp: application/json
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
error | string | Ja | Erlaubte 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
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
error | string | Ja | Erlaubte 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
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
error | string | Ja | Erlaubte Werte: invalid_request, unauthenticated, too_large, rate_limited, unavailable. |
Beispiel: Das Studio ist nicht verfügbar
{
"error": "unavailable"
}