
# Üyeliğin bitiş tarihini ayarlama

`PATCH /fapi/v1/organizations/{org_id}/memberships/{membership_id}` · ortamın giriş ana makinesinden çağrılır

Kuruluş profil ekranı için üyeliğin sona erdiği tarihi (`expires_at`) ayarlar veya temizler. Tarih geçtiğinde üyelik kaldırılır ve üyenin bu kuruluş bağlamındaki oturumları ile belirteçleri iptal edilir. Yedi gün önce bir `membership_expiry_warned` olayı yayımlanır. Roller [Bir üyenin rollerini ayarlama](/docs/api/fapi/organizations/memberships/set-roles) üzerinden değiştirilir; bu uç nokta yalnızca bitiş tarihini değiştirir.

Bir `__Host-idp_session` çerezi ve tam eşleşen bir `Origin` gerekir ya da birinci taraf bir uygulamanın Front API erişim belirteci (DPoP kanıtıyla birlikte `Authorization: DPoP <token>`; bkz. [Front API erişim belirteci](/docs/api/fapi/front-api-token)) kullanılmalıdır. Kimlik doğrulaması yapılmış kullanıcının kuruluşun etkin bir üyesi olması ve hem `idp_members:update_roles` hem de `idp_members:remove` iznine sahip olması gerekir. Üye olmayan bir kullanıcı `404 not_found` yanıtı alır; bu iki izne de sahip olmayan bir üye ise `403 insufficient_permissions` yanıtı alır. Kendi üyeliğinizi burada değiştiremezsiniz (`403 insufficient_permissions`); ayrıcalıklı bir rolü olan bir üyeyi yalnızca yönetici rolüne sahip bir üye değiştirebilir (`403 role_not_assignable`).

`@keenauth/js` ile: `await keenauth.organizations.setMemberExpiry(orgId, membershipId, "2027-03-31T00:00:00Z", { expectedVersion: 3 })`; tarihi temizlemek için `null` değerini geçirin.

## İstek

Başlıklar:

| Başlık | Zorunlu | Açıklama |
| --- | --- | --- |
| `Idp-Client` | evet | SDK tanımlayıcısı. |
| `Origin` | evet, çerezle birlikte | `https://<giriş ana makinesi>`. |
| `If-Match` | hayır | Üye listesinden alınan tek bir sürüm, `"<sürüm>"`. Eşleşmeyen bir sürüm veya birden fazla sürüm `412 precondition_failed` döndürür. |

`org_id`: kuruluş tanımlayıcısı (`org_…`). `membership_id`: üyelik tanımlayıcısı (`mem_…`).

Gövde: `{"expires_at": "<RFC 3339 zamanı>"}` veya tarihi temizlemek için `{"expires_at": null}`. `expires_at` zorunludur. Zaman gelecekte olmalı ve üyelik oluşturulduktan sonra en fazla 365 gün içinde olmalıdır.

## Yanıt

`200 OK` ile birlikte üyelik ve `ETag: "<sürüm>"` döner. Üyelik alanları, [üye listesindeki](/docs/api/fapi/organizations/memberships/list) bir öğenin alanlarıyla aynıdır.

## Hatalar

| Durum | Kod | Ne zaman |
| --- | --- | --- |
| 400 | `unknown_field` | Gövdede `expires_at` dışında bir alan var. |
| 400 | `malformed_request` | `If-Match` hatalı biçimde. |
| 401 | `unauthenticated` | Geçerli bir oturum çerezi veya belirteci yok. |
| 403 | `insufficient_permissions` | Kullanıcının `idp_members:update_roles` veya `idp_members:remove` izni yok ya da üyelik kullanıcının kendi üyeliği. |
| 403 | `role_not_assignable` | Üye ayrıcalıklı bir role sahip ve kullanıcının yönetici rolü yok. |
| 403 | `origin_not_allowed` | `Origin` eşleşmiyor. |
| 404 | `not_found` | Bu kullanıcı için böyle bir kuruluş veya üyelik yok; bilinmeyen, hatalı biçimli veya başkasına ait bir tanımlayıcı aynı yanıtı verir. |
| 409 | `organization_disabled` | Kuruluş devre dışı veya silme beklemede (`organization_pending_deletion`). |
| 412 | `precondition_failed` | `If-Match`, üyeliğin mevcut sürümünü göstermiyor. |
| 422 | `validation_failed` | `expires_at` eksik, RFC 3339 zamanı değil, geçmişte veya üyelik oluşturulduktan sonra 365 günden fazla. |
| 503 | `service_unavailable` | Geçici olarak kullanılamıyor; `Retry-After` süresinden sonra yeniden deneyin. |

## Örnek

```bash
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"}'
```

```json
{
  "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
}
```

## Kişisel veriler

Bu uç nokta kişisel veri içerir: kuruluş üyelikleri ve davetler. [KeenAuth API'lerinde kişisel veriler](/docs/policies/personal-data) bölümünde neyin saklandığı, ne kadar süreyle tutulduğu ve nasıl silindiği açıklanmaktadır. Hiçbir alanda özel nitelikli kişisel verileri (sağlık, biyometrik veriler, din, siyasi görüşler, cinsel yönelim) göndermeyin.
