# Programatik Kullanıcı Erişim Kontrolü Yönetimi

Bu kılavuz, Hub API aracılığıyla organizasyon üye rollerini ve kaynak grubu üyeliklerini nasıl yöneteceğinizi açıklar: bir üyenin organizasyon rolünü ve kaynak grubu atamalarını değiştirme, kaynak gruplarını listeleme, gruplara kullanıcı ekleme ve toplu iş akışları.

**İçindekiler:**

- [API ile üye rolünü değiştirme](#change-member-role-via-api) — Bir üyenin kuruluş rolünü ve kaynak grubu atamalarını ayarlayın (istek başına bir üye).
- [Kaynak Grupları API'si](#resource-groups-api) — Kaynak gruplarını listele ve bunlara kullanıcı ekle.
- [API ile otomatik katılmayı yapılandırın](#configure-auto-join-via-api) — Bir Kaynak Grubu'nda otomatik katılmayı etkinleştirin veya devre dışı bırakın.
- [API üzerinden dış işbirlikçileri davet et](#invite-external-collaborators-via-api) — Organizasyon dışındaki kullanıcıları bir Kaynak Grubu'na davet edin.
- [API ile üye hesap türünü değiştirme](#change-member-account-type-via-api) — Bir üyeyi dış iş birimcisine dönüştürün veya geri alın.

---

## API ile üye rolünü değiştirme

Bir üyenin **organizasyon rolünü** (Erişim Yok / Okuma / Katkıda Bulunan / Yazma / Yönetici) ve isteğe bağlı olarak **kaynak gruplarındaki** rollerini Hub API'si kullanarak değiştirebilirsiniz. API, **istek başına bir üyeyi** günceller. Birden fazla üyenin rollerini değiştirmek için API'yi bir döngü içinde çağırın (aşağıdaki örnekler).

**OpenAPI referansı:** PUT /api/organizations/&#123;name&#125;/members/&#123;username&#125;/role

### Ön koşullar

- Kurumunuzun bir **abonelik planı** (ör. Team veya Enterprise) olmalıdır. Aksi takdirde uç nokta 402 döndürür.
- Organizasyonun **Write** (veya Admin) iznine sahip bir üyesi olarak kimlik doğrulamanız gerekir.
- Hedef kullanıcı, organizasyonun zaten bir **üyesi** olmalıdır.

### Temel URL ve kimlik doğrulama

- **Temel URL:** `https://huggingface.co`
- **Kimlik doğrulama:** Jetonunuzu istek başlığında gönderin:
  ```http
  Authorization: Bearer <your_access_token>
  ```
  [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens) adresinde, organizasyonunuza yönelik "Write access to organizations settings / member management" izniyle ince taneli bir token oluşturun.

### Üye rolü değiştirme uç noktası

**İstek**

```http
PUT /api/organizations/{org_name}/members/{username}/role
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "role": "read",
  "resourceGroups": []
}
```

- **Yol parametreleri**
  - `org_name`: Kurum kimliği (ör. `my-org`).
  - `username`: Rolünü değiştirdiğiniz üyenin Hugging Face **kullanıcı adı**.
- **Gövde**
  - `role` (zorunlu): Üyenin **organizasyon düzeyindeki** rolü. Şunlardan biri: `"no_access"`, `"read"`, `"contributor"`, `"write"` veya `"admin"`.
  - `resourceGroups` (isteğe bağlı): Bu kullanıcı için kaynak grubu atamalarının dizisi. Her öğe:
    - `id`: Kaynak grubu kimliği (24 karakterlik onaltılık dize; kimlikleri [kaynak grupları listesi API'sinden](#list-resource-groups) alın).
    - `role`: O kaynak grubundaki rol: `"read"`, `"contributor"`, `"write"`, `"admin"` veya `"inherit"`.
  - `resourceGroups` parametresini atlar veya `[]` geçirirseniz, kullanıcı tüm kaynak gruplarından kaldırılır. Yalnızca kuruluş rolünü değiştirmek ve kaynak gruplarını değiştirmeden bırakmak için, mevcut kaynak grup üyeliklerini geçirin (gövde her zaman hem kuruluş rolünü hem de kaynak grup listesini ayarlar).

**Örnek (curl) – kuruluş rolünü "read" olarak ayarlayın, kaynak grubu yok (kullanıcının daha önce dahil olduğu tüm grupları kaldırır)**

```bash
curl -s -X PUT \
  -H "Authorization: Bearer $HF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role":"read","resourceGroups":[]}' \
  "https://huggingface.co/api/organizations/my-org/members/member1/role"
```

**Örnek (curl) – kuruluş rolü ve kaynak grubu rollerini ayarla (mevcut tüm grupları yazar)**

```bash
curl -s -X PUT \
  -H "Authorization: Bearer $HF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role":"write","resourceGroups":[{"id":"507f1f77bcf86cd799439011","role":"read"}]}' \
  "https://huggingface.co/api/organizations/my-org/members/member2/role"
```

**Başarılı yanıt:** Durum `200 OK`; gövde: `{ "success": true }`.

**Tipik hatalar**

- `400` — Geçersiz gövde (ör. geçersiz rol veya kaynak grubu `id`).
- `402` — Organizasyonun bir abonelik planı yok.
- `403` — İzin verilmedi (ör. kuruluşta Write yetkiniz yok veya bir kaynak grubu kuruluşta değil).
- `404` — Organizasyon veya kullanıcı bulunamadı.

### Birden fazla üyenin güncellenmesi

API, **istek başına bir üye** değiştirir. Toplu uç noktası yoktur. Birçok üyeyi güncellemek için uç noktayı kullanıcı adı başına bir kez çağırın (ör. bir listeden veya CSV'den).

**Örnek: Bash – kullanıcı adları üzerinde döngü, hepsi için aynı rol**

```bash
ORG_NAME="my-org"
ROLE="read"
for username in member1 member2 member3 member4; do
  echo "Setting $username to $ROLE ..."
  curl -s -w "\n%{http_code}" -X PUT \
    -H "Authorization: Bearer $HF_TOKEN" \
    -H "Content-Type: application/json" \
    -d "{\"role\":\"$ROLE\",\"resourceGroups\":[]}" \
    "https://huggingface.co/api/organizations/$ORG_NAME/members/$username/role"
  echo ""
done
```

**Örnek: Python – kullanıcı adları üzerinde döngü**

```python
import os
import requests

BASE_URL = "https://huggingface.co"
HF_TOKEN = os.environ.get("HF_TOKEN", "")

def change_member_role(org_name: str, username: str, role: str, resource_groups: list | None = None):
    payload = {"role": role, "resourceGroups": resource_groups or []}
    r = requests.put(
        f"{BASE_URL}/api/organizations/{org_name}/members/{username}/role",
        headers={"Authorization": f"Bearer {HF_TOKEN}", "Content-Type": "application/json"},
        json=payload,
    )
    if r.status_code != 200:
        raise RuntimeError(f"{r.status_code}: {r.text}")
    return r.json()

org_name = "my-org"
role = "read"
for username in ["member1", "member2", "member3", "member4"]:
    print(f"Setting {username} to {role} ... ", end="")
    try:
        change_member_role(org_name, username, role)
        print("OK")
    except Exception as e:
        print(f"Failed: {e}")
```

Kullanıcı başına farklı roller için `(username, role)` çiftlerinin (ör. bir CSV'den) üzerinden döngü yapın ve her biri için `change_member_role` çağrısı yapın.

---

## Kaynak Grupları API

Aşağıdaki uç noktalar, kaynak gruplarını **listelemenize** ve bunlara kullanıcı **eklemenize** olanak tanır. Mevcut bir üyenin kuruluş düzeyindeki rolünü veya kaynak grup atamalarını **değiştirmek** için yukarıdaki [API ile üye rolünü değiştirme](#change-member-role-via-api) bölümüne bakın.

**OpenAPI referansı:** [Kaynak grupları](https://huggingface.co/spaces/huggingface/openapi#tag/resource-groups)

**İçindekiler — API yaklaşımları:**

| Hedef                                               | Bölüm                                                                 |
| -------------------------------------------------- | ----------------------------------------------------------------------- |
| Çok sayıda kullanıcıyı **tek** bir kaynak grubuna ekleyin           | [Bir kaynak grubuna kullanıcı ekleme](#add-users-to-a-resource-group)         |
| **Aynı** kullanıcıları **birçok** kaynak grubuna ekleyin | [API üzerinde döngüyle toplu ekleme](#batch-add-by-looping-over-the-api) |
| Grup başına **farklı** kullanıcılar ekleyin                  | [API üzerinde döngüyle toplu ekleme](#batch-add-by-looping-over-the-api) |

### Temel URL ve kimlik doğrulama

- **Temel URL:** `https://huggingface.co`
- **Kimlik doğrulama:** Şunlardan birini kullanın:
  - **Erişim belirteci (betikler için önerilir):** [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens) adresinde, organizasyonunuza yönelik "Write access to organizations settings / member management" iznine sahip ince taneli bir belirteç oluşturun. Bunu istek başlığında gönderin:
    ```http
    Authorization: Bearer <your_access_token>
    ```
  - **Oturum çerezi:** Hub arayüzüyle aynı oturumu paylaşan bir tarayıcıdan veya araçtan çağrı yapılıyorsa, çerez otomatik olarak gönderilir.

### Kaynak gruplarını listele

Organizasyon için yönetebileceğiniz tüm kaynak gruplarını alın. Bu, add-users çağrıları için her grubun `id` değerini almak için kullanılır.

**İstek**

```http
GET /api/organizations/{org_name}/resource-groups
Authorization: Bearer <your_access_token>
```

**Örnek (curl)**

```bash
curl -s -H "Authorization: Bearer $HF_TOKEN" \
  "https://huggingface.co/api/organizations/my-org/resource-groups"
```

**Örnek yanıt (kısaltılmış)**

```json
[
  {
    "id": "507f1f77bcf86cd799439011",
    "name": "Cohort 2024",
    "description": "Members in this group",
    "users": [...],
    "repos": [...]
  }
]
```

Kullanıcılar eklerken her kaynak grubunun `id` değerini kullanın.

### Bir kaynak grubuna kullanıcı ekleme

Tek bir istekte tek bir kaynak grubuna bir veya daha fazla kullanıcı ekleyin. Aynı istekte birden fazla kullanıcı gönderebilirsiniz.

**İstek**

```http
POST /api/organizations/{org_name}/resource-groups/{resource_group_id}/users
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "users": [
    { "user": "member1", "role": "read" },
    { "user": "member2", "role": "read" },
    { "user": "member3", "role": "write" }
  ]
}
```

- **Yol parametreleri**
  - `org_name`: Kurum kimliği (ör. `my-org`).
  - `resource_group_id`: Kaynak grubunun `id` değeri (liste uç noktasından gelen 24 karakterlik onaltılık dize).
- **Gövde**
  - `users`: Nesneler dizisi. Her nesne şunlara sahip olmalıdır:
    - `user`: Hugging Face **kullanıcı adı** (zorunlu).
    - `role`: `"read"`, `"contributor"`, `"write"`, `"admin"` veya `"inherit"` değerlerinden biri.

**Örnek (curl)**

```bash
curl -s -X POST \
  -H "Authorization: Bearer $HF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"users":[{"user":"member1","role":"read"},{"user":"member2","role":"read"}]}' \
  "https://huggingface.co/api/organizations/my-org/resource-groups/507f1f77bcf86cd799439011/users"
```

**Başarılı:** Durum `200 OK`; gövde, güncellenmiş kaynak grubu nesnesidir (`users` içinde yeni kullanıcıları içerir).

**Tipik hatalar:**

- `400` — örn. kullanıcı bulunamadı, kullanıcı adları yineleniyor veya geçersiz gövde.
- `403` — İzin verilmedi (ör. kullanıcı organizasyonda değil veya zaten kaynak grubunda). Mesaj, kullanıcıların organizasyonda olmadığına yoksa grubun zaten içinde olduğuna işaret eder.

### E-posta yoluyla üye ekleme (geçici çözüm)

add-users uç noktası yalnızca **Hugging Face kullanıcı adlarını** kabul eder, e-posta adreslerini değil. Bir **e-posta** listesi (ör. üye e-postaları) varsa, önce e-posta → kullanıcı adı çözümlemesini yapabilir, ardından add-users API'sini çağırabilirsiniz.

E-posta filtrelemenin **sadece** e-postanın alan adının organizasyonun izin verilen alan adlarından biriyle eşleştiğinde çalıştığını unutmayın: **Organization email domain** (Ayarlar → Hesap → Organization email domain) ve/veya organizasyonun **SSO allowed domains** (SSO yapılandırılmışsa).

**Adım 1 – E-postayı kullanıcı adına dönüştür**

```http
GET /api/organizations/{org_name}/members?email={email}&limit=1
Authorization: Bearer <your_access_token>
```

Yanıt, üyelerin bir dizisidir; her üyenin `user` (kullanıcı adı) alanı vardır. Kullanıcı ekleme çağrısı için `user` alanını kullanın.

**Adım 2 – Kaynak grubuna ekle**

1. adımdaki kullanıcı adını normal bir kullanıcı ekleme isteğinde kullanın:

```http
POST /api/organizations/{org_name}/resource-groups/{resource_group_id}/users
Content-Type: application/json
Body: { "users": [{ "user": "<username from step 1>", "role": "read" }] }
```

**Örnek: bir e-posta (bash)**

```bash
ORG_NAME="my-org"
RG_ID="507f1f77bcf86cd799439011"
EMAIL="member@org.com"

# Step 1: look up member by email (domain must match org's Organization email domain or SSO allowed domains)
MEMBERS=$(curl -s -H "Authorization: Bearer $HF_TOKEN" \
  "https://huggingface.co/api/organizations/$ORG_NAME/members?email=$EMAIL&limit=1")
USERNAME=$(echo "$MEMBERS" | jq -r '(.[0] // {} | .user // "")')
if [ -z "$USERNAME" ]; then
  echo "No member found for $EMAIL"
  exit 1
fi
# Step 2: add to resource group
curl -s -X POST -H "Authorization: Bearer $HF_TOKEN" -H "Content-Type: application/json" \
  -d "{\"users\":[{\"user\":\"$USERNAME\",\"role\":\"read\"}]}" \
  "https://huggingface.co/api/organizations/$ORG_NAME/resource-groups/$RG_ID/users"
```

**Örnek: döngüde birden fazla e-posta (Python)**

```python
import os
import requests

BASE = "https://huggingface.co"
ORG = "my-org"
RG_ID = "507f1f77bcf86cd799439011"
ROLE = "read"
headers = {"Authorization": f"Bearer {os.environ['HF_TOKEN']}", "Content-Type": "application/json"}

emails = ["member1@org.com", "member2@org.com"]
for email in emails:
    # Step 1: resolve email → username (email domain must match org's Organization email domain or SSO allowed domains)
    r = requests.get(f"{BASE}/api/organizations/{ORG}/members", params={"email": email, "limit": 1}, headers=headers)
    r.raise_for_status()
    members = r.json()
    if not members:
        print(f"No member found for {email}")
        continue
    username = members[0]["user"]
    # Step 2: add that user to the resource group
    add_r = requests.post(
        f"{BASE}/api/organizations/{ORG}/resource-groups/{RG_ID}/users",
        headers=headers,
        json={"users": [{"user": username, "role": ROLE}]},
    )
    if add_r.status_code == 200:
        print(f"Added {username} ({email})")
    else:
        print(f"Failed {email}: {add_r.status_code} {add_r.text}")
```

Kullanıcı zaten kaynak grubundaysa, add çağrısı `403` döndürür; betik bunu bir hata olarak raporlar ve dilersek bu durumu atlayabilir veya yok sayabiliriz.

**Kısıtlama:** E-posta filtresi yalnızca organizasyonun **Organizasyon e-posta alan adı** ve/veya **SSO'ya izin verilen alan adları** ayarlanmış ve e-postanın alan adının bunlardan biriyle eşleştiği durumda uygulanır. Aksi takdirde, üyeler API'si üzerinden e-posta ile arama yapamazsınız; e-posta → kullanıcı adı eşlemesi için başka bir kaynağa (ör. kendi dizininize) ihtiyacınız olur.

### API üzerinde döngüyle toplu ekleme

Birkaç istekle (örneğin kullanıcı adları listenizi parçalara ayırarak) **tek** bir kaynak grubuna birçok kullanıcı ekleyebilir veya gruplar üzerinde döngü kurarak her biri için kullanıcı ekleme uç noktasını çağırarak **birden fazla** kaynak grubuna kullanıcı ekleyebilirsiniz.

**Örnek: Bash – bir istekte tek grup, çoklu kullanıcı**

```bash
#!/bin/bash
# Add a list of users to a single resource group.
# Usage: ./add-users-to-rg.sh <org_name> <resource_group_id> <role>

ORG_NAME="${1:-my-org}"
RG_ID="${2:-507f1f77bcf86cd799439011}"
ROLE="${3:-read}"

USERS="member1 member2 member3 member4"
USERS_JSON=$(echo "$USERS" | tr ' ' '\n' | while read u; do
  [ -n "$u" ] && echo "{\"user\":\"$u\",\"role\":\"$ROLE\"}"
done | paste -sd ',' -)

curl -s -w "\nHTTP_STATUS:%{http_code}" -X POST \
  -H "Authorization: Bearer $HF_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"users\":[$USERS_JSON]}" \
  "https://huggingface.co/api/organizations/$ORG_NAME/resource-groups/$RG_ID/users"
```

**Örnek: Bash – birden fazla grup üzerinde döngü**

```bash
# Get group IDs and add users to each
curl -s -H "Authorization: Bearer $HF_TOKEN" \
  "https://huggingface.co/api/organizations/my-org/resource-groups" \
  | jq -r '.[].id' \
  | while read -r RG_ID; do
      [ -z "$RG_ID" ] && continue
      echo "Adding users to resource group $RG_ID ..."
      curl -s -X POST -H "Authorization: Bearer $HF_TOKEN" -H "Content-Type: application/json" \
        -d "{\"users\":[$USERS_JSON]}" \
        "https://huggingface.co/api/organizations/my-org/resource-groups/$RG_ID/users"
    done
```

**Örnek: Python – bir veya birden fazla gruba toplu ekleme**

```python
import os
import requests

BASE_URL = "https://huggingface.co"
HF_TOKEN = os.environ.get("HF_TOKEN", "")

def list_resource_groups(org_name: str):
    r = requests.get(
        f"{BASE_URL}/api/organizations/{org_name}/resource-groups",
        headers={"Authorization": f"Bearer {HF_TOKEN}"},
    )
    r.raise_for_status()
    return r.json()

def add_users_to_resource_group(org_name: str, resource_group_id: str, users_with_roles: list):
    """users_with_roles: list of {"user": "username", "role": "read"|"write"|"contributor"|"admin"}"""
    r = requests.post(
        f"{BASE_URL}/api/organizations/{org_name}/resource-groups/{resource_group_id}/users",
        headers={"Authorization": f"Bearer {HF_TOKEN}", "Content-Type": "application/json"},
        json={"users": users_with_roles},
    )
    if r.status_code != 200:
        raise RuntimeError(f"Add users failed {r.status_code}: {r.text}")
    return r.json()

# Example: same users added to every resource group
org_name = "my-org"
role = "read"
usernames = ["member1", "member2", "member3"]
users_with_roles = [{"user": u, "role": role} for u in usernames]

for rg in list_resource_groups(org_name):
    add_users_to_resource_group(org_name, rg["id"], users_with_roles)
```

Uzun bir kullanıcı adı listesi için, büyük istek gövdelerinden veya zaman aşımından kaçınmak adına bunları parçalara ayırın (ör. istek başına 50) ve her parça için API'yi bir kez çağırın.

### Önemli notlar

1. **Sadece kullanıcı adları** — API, e-posta adresleri değil, Hugging Face **kullanıcı adlarını** kabul eder. API'yi çağırmadan önce e-posta → kullanıcı adı eşlemesine (ör. dizininizden veya kuruluş üyeleri listesinden) ihtiyacınız vardır.
2. **Kullanıcılar organizasyonda olmalıdır** — İstekteki her kullanıcı zaten organizasyonun bir üyesi olmalıdır. Aksi takdirde istek, bazı kullanıcıların organizasyonda olmadığına dair bir mesajla `403` döndürür.
3. **Güçsüzlük** — Kullanıcı zaten kaynak grubundaysa, arka uç bu istek için `403` dönebilir. Betiğiniz hataları yakalayıp devam edebilir veya önce grubun `users` listesini getirerek grupta zaten bulunan kullanıcıları atlayabilir.
4. **Hız sınırları** — Büyük toplu işlemler için, hız sınırlarına takılmamak adına istekler arasında kısa bir gecikme (ör. 0,5–1 saniye) eklemeyi düşünün.
5. **Token kapsamı** — Erişim jetonu, organizasyon için yeterli izinlere sahip olmalıdır (genellikle en az "Write access to organizations settings / member management"). Jetonu oluşturun ve güvenli bir şekilde saklayın; sürüm kontrolüne eklemeyin.

---

## API üzerinden otomatik katılmayı yapılandırın

[Otomatik katılım](./security-resource-groups#auto-join), bir kaynak grubuna belirli bir rolde organizasyon üyelerini otomatik olarak ekler. Bunu API üzerinden etkinleştirebilir veya devre dışı bırakabilir ve isteğe bağlı olarak tüm organizasyon üyelerini mi yoksa yalnızca Okuma+ üyelerini mi dahil edeceğinizi seçebilirsiniz.

**Otomatik katılmayı etkinleştir**

```http
POST /api/organizations/{org_name}/resource-groups/{resource_group_id}/settings
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "autoJoin": {
    "enabled": true,
    "role": "read",
    "scope": "read_plus"
  }
}
```

- **Yol parametreleri**
  - `org_name`: Kurum kimliği (ör. `my-org`).
  - `resource_group_id`: Kaynak Grubu'nun kimliği (24 karakterlik onaltılık dize; kimlikleri [kaynak gruplarını listeleme uç noktasından](#list-resource-groups) alın).
- **Gövde**
  - `role`: Otomatik olarak eklenen üyelere atanacak rol. `"read"`, `"contributor"`, `"write"`, `"admin"` veya `"inherit"` değerlerinden biri.
  - `scope` (isteğe bağlı): Otomatik olarak eklenecek org üyeleri. Her org üyesini dahil etmek için `"all"` kullanın. `no_access` org rolüne sahip üyeleri hariç tutmak için `"read_plus"` kullanın. Atlandığında varsayılan olarak `"all"` kullanılır.

Mevcut bir Resource Group üzerinde auto-join özelliğini etkinleştirmek, seçilen kapsamla eşleşen mevcut kuruluş üyelerini anında ekler (backfill).

**Otomatik katılmayı devre dışı bırak**

`"enabled": false` ile aynı isteği gönderin. Devre dışı bırakırken `role` alanı zorunlu değildir:

```http
POST /api/organizations/{org_name}/resource-groups/{resource_group_id}/settings
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "autoJoin": {
    "enabled": false
  }
}
```

> [!NOTE]
> Otomatik katılımın devre dışı bırakılması, daha önce otomatik olarak eklenen üyeleri **kaldırmaz**. Sadece gelecekteki organizasyon üyelerinin otomatik olarak eklenmesini durdurur. Mevcut üyeler Kaynak Grubunda kalmaya devam eder.

## API üzerinden harcama limitleri ayarlayın

[Harcama limitleri](./security-resource-groups#spend-limits), bir Kaynak Grubu'na atfedilen aylık hesaplama harcamasını sınırlar. Bunları güncelleme uç noktası ile ayarlayın:

```http
PATCH /api/organizations/{org_name}/resource-groups/{resource_group_id}
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "spendLimits": {
    "total": 500000,
    "spaces": 100000,
    "jobs": 50000
  }
}
```

- **Yol parametreleri**
  - `org_name`: Kurum kimliği (ör. `my-org`).
  - `resource_group_id`: Kaynak Grubu'nun kimliği (24 karakterlik onaltılık dize; kimlikleri [kaynak gruplarını listeleme uç noktasından](#list-resource-groups) alın).
- **Gövde**
  - `spendLimits`: **sent cinsinden** aylık sınırlar. Yukarıdaki örnek, toplam $5.000'lik bir sınır belirler; bunun $1.000'i Spaces, $500'ü Jobs için ayrılmıştır.
    - `total`: Her ürün için grubun toplam harcamasına uygulanan sınır.
    - `inferenceProviders`, `spaces`, `jobs`, `endpoints`: Toplamın üzerine uygulanan ürün bazlı sınırlar. İkisinin daha sıkı olanı geçerlidir.

Yalnızca gönderdiğiniz anahtarlar güncellenir, diğerleri mevcut değerlerini korur. Bir sınırı kaldırmak için `null` gönderin:

```http
PATCH /api/organizations/{org_name}/resource-groups/{resource_group_id}
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "spendLimits": {
    "jobs": null
  }
}
```

**Örnek (curl)**

```bash
curl -s -X PATCH \
  -H "Authorization: Bearer $HF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"spendLimits": {"total": 500000}}' \
  "https://huggingface.co/api/organizations/my-org/resource-groups/507f1f77bcf86cd799439011"
```

Yanıt, `spendLimits` dahil olmak üzere güncellenmiş kaynak grubudur.

## API aracılığıyla harici işbirlikçileri davet et

[Dış davetler](./security-resource-groups#external-invitations), kaynak grubu yöneticilerinin organizasyon dışındaki kullanıcıları bir Kaynak Grubu'na davet etmesini sağlar. Davet edilenler, `no_access` organizasyon rolüne sahip dış işbirlikçileri olarak katılır. Bu kullanıcılar, organizasyonunuzdaki ücretli koltuk sayısına dahil edilir.

**Dış davetleri etkinleştir**

Org yöneticileri ayarı şu şekilde etkinleştirebilir:

```http
POST /api/organizations/{org_name}/resource-groups/settings
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "allowExternalInvites": true
}
```

- **Gövde**
  - `allowExternalInvites` (isteğe bağlı): Kaynak grubu yöneticilerinin organizasyon dışındaki kullanıcıları davet edip edemeyeceğini belirtir.
  - `minRoleToCreate` (isteğe bağlı): [Resource Group oluşturmak](./security-resource-groups#who-can-create-resource-groups) için gereken minimum organizasyon rolü.

Atlanan alanlar değiştirilmeden bırakılır. Güncel ayarları okumak için `GET /api/organizations/{org_name}/resource-groups/settings` kullanın.

**Bir kullanıcı davet et**

```http
POST /api/organizations/{org_name}/resource-groups/{resource_group_id}/invite
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "username": "partner-user",
  "role": "read"
}
```

- **Yol parametreleri**
  - `org_name`: Kurum kimliği (ör. `my-org`).
  - `resource_group_id`: Kaynak Grubu'nun kimliği (24 karakterlik onaltılık dize; kimlikleri [kaynak gruplarını listeleme uç noktasından](#list-resource-groups) alın).
- **Gövde**
  - `username`: Henüz organizasyonun bir üyesi olmayan mevcut bir Hugging Face kullanıcısının kullanıcı adı. Bir organizasyon üyesi eklemek için bunun yerine [Kaynak grubuna kullanıcı ekleme](#add-users-to-a-resource-group) kullanın.
  - `role`: Davetlinin Kaynak Grubu'nda alacağı rol, `"read"` veya `"write"`.

Kullanıcı kabul ettikten sonra bir e-posta davetiyesi alır ve Resource Group'a erişim sağlanır.

**Bekleyen davetleri yönet**

- **Liste:** `GET /api/organizations/{org_name}/resource-groups/{resource_group_id}/invitations`
- **Tekrar gönder:** `POST /api/organizations/{org_name}/resource-groups/{resource_group_id}/invitation/{invitation_id}/resend`
- **İptal et:** `DELETE /api/organizations/{org_name}/resource-groups/{resource_group_id}/invitation/{invitation_id}`

Ayrıca [tam OpenAPI spesifikasyonuna göz atabilirsiniz](https://huggingface.co/spaces/huggingface/openapi#tag/resource-groups)

**Tipik hatalar:**

- `403` — Organizasyon için dış davetler etkinleştirilmemiştir.
- `409` — Kullanıcı zaten organizasyonun bir üyesi veya zaten bekleyen bir davetiyesi var.

## API ile üye hesap türünü değiştirme

Bir organizasyon üyesini [dış işbirlikçisi](./security-sso-user-management#external-collaborators) (SSO gerektirmez) olarak değiştirin veya onu tekrar üyeye dönüştürün. Bunun için ücretli bir plana ve organizasyonda **Write** (veya Admin) iznine sahip olmak gerekir. Üyelerin SCIM üzerinden sağlandığı, yönetilen kullanıcıya sahip organizasyonlarda bu özellik kullanılamaz.

> [!WARNING]
> Bir kullanıcının hesap türünü değiştirmek, rolünü değiştirmez. Bir kullanıcının rolünü değiştirmek için [API üzerinden üye rolünü değiştirme](https://huggingface.co/docs/hub/main/en/programmatic-user-access-control#change-member-role-via-api) bölümüne bakın.

```http
PUT /api/organizations/{org_name}/members/{username}/account-type
Authorization: Bearer <your_access_token>
Content-Type: application/json

{
  "accountType": "external"
}
```

- **Gövde**
  - `accountType`: Üyeyi harici bir iş birimcisine dönüştürmek için `"external"` veya onu geri dönüştürmek için `"member"`.

