# Kategoriler

Kategoriler, tenant başına kendine referanslı bir ağaç oluşturur. Her kategorinin, tenant içinde benzersiz olan ve adından otomatik üretilen bir slug'ı vardır. Kategori slug'ları, ürün listesinin `filter[category]` query parametresinin kabul ettiği değerlerdir; bu parametre bir kategoriyi ve tüm aktif alt kategorilerini eşleştirir.

## GET /v1/api/commerce/categories

Tenant'ın tam kategori ağacını iç içe JSON olarak döndürür. Yalnızca aktif kategoriler dahil edilir ve her düzeyde `position` değerine göre sıralanır. Pasif bir üst kategori, alt ağacının tamamını gizler: pasif bir üst kategorinin çocukları, kendileri aktif olsa bile sonucun dışında kalır. Yanıt sayfalanmaz.

### Parametreler

Yok. Path, query veya body parametresi yoktur.

### Yanıt alanları

`data` dizisindeki (ve özyinelemeli olarak her `children` dizisindeki) her düğüm:

| Ad | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| id | string (uuid) | her zaman | Kategori ID'si. |
| name | string | her zaman | Kategori adı. |
| slug | string | her zaman | URL slug'ı, tenant başına benzersiz. Ürün listesi endpoint'inde `filter[category]` değeri olarak kullanın. |
| description | string or null | her zaman | Kategori açıklaması. |
| children | array | her zaman | Alt kategoriler, aynı düğüm şekli, position değerine göre sıralı. Yaprak kategoriler için boş dizi. |

```bash title="Request"
curl "https://api.borkol.com/v1/api/commerce/categories" \
  -H "Authorization: Bearer {api_key}" \
  -H "Accept: application/json"
```

```javascript title="Request (JS)"
const res = await fetch("https://api.borkol.com/v1/api/commerce/categories", {
  headers: {
    Authorization: `Bearer ${apiKey}`,
    Accept: "application/json",
  },
});
const { data } = await res.json();
```

```json title="Response"
{
  "data": [
    {
      "id": "7a1b3c5d-2e4f-4a6b-8c0d-1e2f3a4b5c6d",
      "name": "Furniture",
      "slug": "furniture",
      "description": "All furniture",
      "children": [
        {
          "id": "8b2c4d6e-3f5a-4b7c-9d1e-2f3a4b5c6d7e",
          "name": "Chairs",
          "slug": "chairs",
          "description": null,
          "children": []
        }
      ]
    },
    {
      "id": "1f2e3d4c-5b6a-4978-8695-a4b3c2d1e0f9",
      "name": "Verandas",
      "slug": "verandas",
      "description": null,
      "children": []
    }
  ]
}
```

### Hatalar

| Durum | Body | Neden |
| --- | --- | --- |
| 401 | `{"message":"Unauthenticated."}` | API anahtarı eksik veya geçersiz. |
| 403 | `{"message":"Invalid ability provided."}` | Anahtar ne `catalog:read` ne de `commerce:read` scope'una sahip. |
| 403 | `{"error":"Module not enabled: catalog"}` | Tenant'ta catalog modülü etkin değil. `message` yerine `error` anahtarına dikkat edin. |
| 403 | `{"message":"Tenant suspended.","code":"tenant_suspended"}` | Tenant hesabı askıya alınmış. |
| 429 | `{"message":"Too Many Attempts."}` | Dakikada 120 istek rate limit'i aşıldı. |
