> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flextell.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Sayfalama

> Sayfa ve sayfa boyutu parametrelerini, meta bilgisini ve sınırları anlatır.

Liste endpoint'leri sonuçları sayfalar hâlinde döndürür. Sayfayı `page`, sayfa boyutunu `per_page` ile seçersiniz. Yanıtın `meta` ve `links` alanları toplam kayıt sayısını ve diğer sayfaların adreslerini verir.

<Info>
  Sayfalama **sayfa numarasına** dayanır (offset). Cursor tabanlı sayfalama yoktur.
</Info>

## Parametreler

Sayfalanan her liste endpoint'i aşağıdaki iki sorgu parametresini kabul eder.

| Parametre | Tür | Kural | Varsayılan |
| - | - | - | - |
| `page` | tamsayı | 1 veya daha büyük | `1` |
| `per_page` | tamsayı | 1 ile 100 arasında | `15` |

Bazı listelerin varsayılan sayfa boyutu farklıdır:

| Liste | Varsayılan `per_page` |
| - | - |
| Tatiller | `25` |
| Bir sohbetin mesajları | `50` |
| Diğer tüm sayfalanan listeler | `15` |

Kural dışı bir değer gönderirseniz (örneğin `per_page=500`) istek `422 VALIDATION_FAILED` ile reddedilir. Hata gövdesi için [Hatalar](/api/istekler/hatalar) sayfasına bakın.

```bash theme={null}
curl "https://app.flextell.ai/api/v1/tags?page=2&per_page=50" \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>"
```

## Meta ve bağlantılar

Sayfalanan bir listenin gövdesi `data`, `links` ve `meta` alanlarından oluşur. Bu gövdede `success` alanı yoktur. Diğer yanıt biçimleri için [Yanıt yapısı](/api/istekler/yanit-yapisi) sayfasına bakın.

```json theme={null}
{
  "data": [
    { "id": 7, "name": "VIP" }
  ],
  "links": {
    "first": "https://app.flextell.ai/api/v1/tags?page=1",
    "last": "https://app.flextell.ai/api/v1/tags?page=4",
    "prev": "https://app.flextell.ai/api/v1/tags?page=1",
    "next": "https://app.flextell.ai/api/v1/tags?page=3"
  },
  "meta": {
    "current_page": 2,
    "from": 16,
    "last_page": 4,
    "path": "https://app.flextell.ai/api/v1/tags",
    "per_page": 15,
    "to": 30,
    "total": 52,
    "timezone": "Europe/Istanbul"
  }
}
```

| Alan | Açıklama |
| - | - |
| `meta.current_page` | Dönen sayfanın numarası. |
| `meta.last_page` | Son sayfanın numarası. |
| `meta.per_page` | Bu yanıtta kullanılan sayfa boyutu. |
| `meta.total` | Filtrelere uyan toplam kayıt sayısı. |
| `meta.from`, `meta.to` | Sayfadaki ilk ve son kaydın sıra numarası. |
| `meta.path` | Listenin temel adresi. |
| `meta.links` | Sayfa numaralarından oluşan bağlantı dizisi (`url`, `label`, `active`). Arayüz çizmek için kullanılır; entegrasyonlarda `links` nesnesi yeterlidir. |
| `meta.timezone` | Klinik uç noktalarında eklenen saat dilimi bilgisi. |
| `links.first`, `links.last` | İlk ve son sayfanın adresi. |
| `links.prev`, `links.next` | Önceki ve sonraki sayfanın adresi. İlk sayfada `prev`, son sayfada `next` `null` olur. |

<Warning>
  `links` içindeki adresler yalnızca `?page=N` içerir. Filtrelerinizi, `per_page` değerinizi ve sıralamanızı taşımaz. `links.next` adresini olduğu gibi çağırırsanız filtreleriniz kaybolur. Her istekte `page` dışındaki parametreleri kendiniz yeniden gönderin.
</Warning>

### Sayfalanmayan listeler

Bazı listeler sayfalanmaz. Bu listeler `page` ve `per_page` parametrelerini dikkate almaz ve tüm kayıtları tek yanıtta döndürür. Gövdede `meta.timezone` dışında sayfalama bilgisi bulunmaz. Örnekler: `GET /v1/channels`, `GET /v1/pipelines/{id}/stages`, `GET /v1/oauth/scopes`, `GET /v1/integrations`. Bir endpoint'in sayfalanıp sayfalanmadığını ilgili kaynak sayfasından kontrol edin.

## Sınırlar

| Durum | Sonuç |
| - | - |
| `per_page` 100'den büyük veya 1'den küçük | `422 VALIDATION_FAILED` |
| `page` 1'den küçük | `422 VALIDATION_FAILED` |
| `page`, `meta.last_page` değerinden büyük | `200` yanıtı, boş `data` dizisi ve geçerli `meta` |
| Filtrelere uyan kayıt yok | `200` yanıtı, boş `data` dizisi, `meta.total` değeri `0` |

<Note>
  Bir sayfa boş döndüğünde hata oluşmaz. Döngülerde durma koşulu olarak boş `data` yerine `meta.last_page` değerini kullanın.
</Note>

Sayfa boyutu büyütmek istek sayısını azaltır ama yanıtı büyütür. Çok sayıda sayfa çekerken [Oran sınırları](/api/istekler/oran-sinirlari) sayfasındaki sınırı gözetin.

## Tüm sayfaları gezme

Bir listenin tamamını almak için `page` değerini 1'den başlatın ve `meta.last_page` değerine ulaşana kadar artırın. Her istekte aynı filtreleri ve aynı sıralamayı gönderin. Filtre ve sıralama parametreleri için [Filtreleme ve sıralama](/api/istekler/filtreleme-ve-siralama) sayfasına bakın.

<Steps>
  <Step title="İlk sayfayı isteyin">
    `page=1` ve en büyük sayfa boyutu olan `per_page=100` ile başlayın.
  </Step>

  <Step title="Meta bilgisini okuyun">
    Yanıttaki `meta.last_page` değerini kaydedin.
  </Step>

  <Step title="Sonraki sayfaları isteyin">
    `page` değerini birer birer artırın. Filtreleri ve sıralamayı her istekte yeniden gönderin.
  </Step>

  <Step title="Durun">
    `page` değeri `meta.last_page` değerine ulaşınca döngüyü bitirin.
  </Step>
</Steps>

<CodeGroup>
  ```js JavaScript theme={null}
  async function fetchAll(path, params = {}) {
    const base = "https://app.flextell.ai/api/v1" + path;
    const headers = {
      Authorization: "Bearer <access_token>",
      "X-Tenant": "<tenant_id>",
    };
    const items = [];
    let page = 1;
    let lastPage = 1;

    do {
      const query = new URLSearchParams({ ...params, page, per_page: 100 });
      const res = await fetch(`${base}?${query}`, { headers });
      if (!res.ok) throw new Error(`HTTP ${res.status}`);
      const body = await res.json();
      items.push(...body.data);
      lastPage = body.meta.last_page;
      page += 1;
    } while (page <= lastPage);

    return items;
  }

  const tags = await fetchAll("/tags");
  ```

  ```bash cURL theme={null}
  curl "https://app.flextell.ai/api/v1/tags?page=1&per_page=100" \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>"
  ```
</CodeGroup>

<Tip>
  Sayfaları gezerken kayıt eklenir veya silinirse sayfa sınırları kayabilir ve bir kayıt iki kez gelebilir ya da atlanabilir. Tutarlı bir kopya gerekiyorsa kayıtları `id` ile tekilleştirin.
</Tip>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.