Imposta la data di fine di un'appartenenza
PATCH /fapi/v1/organizations/{org_id}/memberships/{membership_id} · chiamato dall'host di accesso dell'ambiente
Imposta o rimuove la data di fine di un'appartenenza (expires_at), per la schermata del profilo dell'organizzazione. Quando la data passa, l'appartenenza viene rimossa e le sessioni e i token del membro nel contesto di questa organizzazione vengono revocati. Sette giorni prima viene pubblicato un evento membership_expiry_warned. I ruoli si modificano tramite Imposta i ruoli di un membro; questo endpoint modifica solo la data di fine.
Richiede il cookie __Host-idp_session dell'utente autenticato con un Origin esatto, oppure il token di accesso alla front API di un'applicazione first-party (Authorization: DPoP <token> con una prova DPoP; vedi Token di accesso alla front API). L'utente deve essere un membro attivo dell'organizzazione con entrambe le autorizzazioni idp_members:update_roles e idp_members:remove. Un utente che non è membro riceve 404 not_found; un membro senza entrambe le autorizzazioni riceve 403 insufficient_permissions. Non puoi modificare qui la tua stessa appartenenza (403 insufficient_permissions), e solo un membro con il ruolo di amministratore può modificare un membro che ha un ruolo privilegiato (403 role_not_assignable).
Con @keenauth/js: await keenauth.organizations.setMemberExpiry(orgId, membershipId, "2027-03-31T00:00:00Z", { expectedVersion: 3 }); passa null per rimuovere la data.
Richiesta
Header:
| Header | Obbligatorio | Descrizione |
|---|---|---|
Idp-Client |
sì | Identificatore dell'SDK. |
Origin |
sì, con il cookie | https://<host di accesso>. |
If-Match |
no | Una versione, "<version>", dall'elenco dei membri. Una versione che non corrisponde, o più di una versione, restituisce 412 precondition_failed. |
org_id: l'identificatore dell'organizzazione (org_…). membership_id: l'identificatore dell'appartenenza (mem_…).
Corpo: {"expires_at": "<orario RFC 3339>"} oppure {"expires_at": null} per rimuovere la data. expires_at è obbligatorio. L'orario deve essere nel futuro e al massimo 365 giorni dopo la creazione dell'appartenenza.
Risposta
200 OK con l'appartenenza (gli stessi campi di un elemento di l'elenco dei membri) e ETag: "<version>".
Errori
| Stato | Codice | Quando |
|---|---|---|
| 400 | unknown_field |
Il corpo contiene un campo diverso da expires_at. |
| 400 | malformed_request |
If-Match non è valido. |
| 401 | unauthenticated |
Nessun cookie di sessione o token valido. |
| 403 | insufficient_permissions |
L'utente non ha idp_members:update_roles o idp_members:remove, oppure l'appartenenza è la sua. |
| 403 | role_not_assignable |
Il membro ha un ruolo privilegiato e l'utente non ha il ruolo di amministratore. |
| 403 | origin_not_allowed |
Origin non corrisponde. |
| 404 | not_found |
Nessuna organizzazione o appartenenza di questo utente; un identificatore sconosciuto, non valido o non suo ottiene la stessa risposta. |
| 409 | organization_disabled |
L'organizzazione è disattivata o in attesa di eliminazione (organization_pending_deletion). |
| 412 | precondition_failed |
If-Match non indica la versione attuale dell'appartenenza. |
| 422 | validation_failed |
expires_at manca, non è un orario RFC 3339, è nel passato o più di 365 giorni dopo la creazione dell'appartenenza. |
| 503 | service_unavailable |
Temporaneamente non disponibile; riprova dopo Retry-After. |
Esempio
curl -X PATCH "https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a/memberships/mem_01jbz6x8kq3m2n4p5r6s7t8v9b" \
-H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
-H "Origin: https://example.keenauth.app" \
-H 'If-Match: "3"' \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{"expires_at": "2027-03-31T00:00:00Z"}'
{
"id": "mem_01jbz6x8kq3m2n4p5r6s7t8v9b",
"user_id": "usr_01jbz6x8kq3m2n4p5r6s7t8v9c",
"status": "active",
"roles": [{ "role_id": "rol_01jbz6x8kq3m2n4p5r6s7t8v9w", "source": "admin_api" }],
"created_at": "2026-11-03T09:00:00Z",
"activated_at": "2026-11-03T09:00:00Z",
"updated_at": "2026-11-03T11:00:00Z",
"version": 4
}
Dati personali
Questo endpoint contiene dati personali: appartenenze e inviti alle organizzazioni. Dati personali nelle API di KeenAuth descrive cosa viene memorizzato, per quanto tempo viene conservato e come viene eliminato. Non inviare categorie particolari di dati personali (salute, dati biometrici, religione, opinioni politiche, orientamento sessuale) in nessun campo.