# X Verileri

X profillerini alın, kullanıcıları ve gönderileri arayın ve desteklenen yerlerde zaman çizelgelerini ile yanıtları sayfalandırın.

İhtiyacınız olan veri için işlemi seçin. Beş uç noktanın tamamı POST kullanır ve ortak bir `data` sarmalayıcısı olmadan JSON’u kökte döndürür.

Tüm örnekler [genel bakış](https://openapi.felo.ai/tr/docs/data-api/guides/felo-overview.md) içindeki `FELO_API_KEY`’i kullanır. Çağrılar Felo Pro kredilerini değil, **platform bakiyesini** kullanır. Yanıt örnekleri açıklayıcıdır; canlı içerik ve isteğe bağlı alanlar değişebilir.

## Bir işlem seçin

| İhtiyaç | Uç nokta |
|---|---|
| Bilinen kullanıcı adları için profiller | `POST /api/v1/data/x/user/info` |
| Bir arama sorgusuyla kullanıcı bulma | `POST /api/v1/data/x/user/search` |
| Tek bir kullanıcının gönderileri | `POST /api/v1/data/x/user/tweets` |
| Bir sorguyla eşleşen gönderiler | `POST /api/v1/data/x/tweet/search` |
| Bilinen gönderilerin yanıtları | `POST /api/v1/data/x/tweet/replies` |

## 1. Kullanıcı profillerini alın

`POST /api/v1/data/x/user/info`

| Alan | Tür | Gerekli | Anlamı |
|---|---|---|---|
| `usernames` | string array | Evet | 1–100 kullanıcı adı; `@` olmadan gönderin |

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/user/info" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"usernames":["OpenAI"]}'
```

Yanıt `users` ve `total` içerir. Her kullanıcı `user_id`, `username` ve `display_name` içerir; profil metni, takipçi sayıları, doğrulama ve diğer meta veriler de bulunabilir. Bir toplu istek, istenenden daha az profil döndürebilir. Dizi konumuna göre değil, kullanıcı adına veya kimliğe göre eşleştirin.

```json
{"users":[{"user_id":"example-user-id","username":"example","display_name":"Example"}],"total":1}
```

## 2. Kullanıcı arayın

`POST /api/v1/data/x/user/search`

| Alan | Tür | Gerekli | Anlamı |
|---|---|---|---|
| `query` | string | Evet | 1–1.000 karakter |
| `cursor` | string | Hayır | Sayfalama cursor’ı, en fazla 4.000 karakter |

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/user/search" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"AI research"}'
```

Yanıt `users`, `total`, `has_next` ve `next_cursor` içerir. Bu işlemde `limit` parametresi yoktur.

```json
{"users":[],"total":0,"has_next":false,"next_cursor":null}
```

## 3. Kullanıcı zaman çizelgesini alın

`POST /api/v1/data/x/user/tweets`

| Alan | Tür | Gerekli | Anlamı |
|---|---|---|---|
| `username` | string | Bir tanımlayıcı gerekli | Kullanıcı adı, en fazla 100 karakter |
| `x_user_id` | string | Bir tanımlayıcı gerekli | Kullanıcı kimliği, en fazla 100 karakter; `username` üzerinde önceliklidir |
| `limit` | integer | Hayır | 1–1.000; mevcut uygulama en az 20 kullanır, varsayılan 20’dir |
| `cursor` | string | Hayır | Sayfalama cursor’ı, en fazla 4.000 karakter |
| `include_replies` | boolean | Hayır | İç içe yanıtları dahil edin; varsayılan `false` |

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/user/tweets" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"username":"OpenAI","limit":20,"include_replies":false}'
```

Yanıt `tweets`, `total`, `has_next` ve `next_cursor` içerir. `limit` değerini 20’nin altına ayarlamak, daha az dönen öğe veya daha küçük bir ücret garanti etmez. Yanıtları dahil etmek, dönen veriyi ve faturalandırılabilir sonuçları artırabilir.

### Sonuç ve iç içe yanıt sınırları

`limit`, bu istek için üst düzey gönderilerin hedef sayısıdır, garanti edilen bir sonuç sayısı değildir. Mevcut uygulama en az 20’lik bir hedef kullanır: 20’lik bir hedef bir üst akış sayfası okur; daha büyük hedefler otomatik olarak 50 sayfaya kadar getirir. Her sayfadan önce geçen süreyi kontrol eder ve bu süre 60 saniyeyi aştığında daha fazla sayfa getirmeyi durdurur. Bu kontrol, tüm HTTP isteğinin 60 saniye içinde tamamlanacağının garantisi değildir.

Toplama ayrıca hedefe ulaşıldığında, üst akışta sonraki sayfa olmadığında, bir sayfa boş olduğunda veya cursor eksik olduğunda durur. Bu nedenle başarılı bir yanıt `limit` değerinden daha az gönderi içerebilir. Mevcut olduğunda devam etmek için `has_next` ve `next_cursor` kullanın.

`include_replies=true` ile, dönen her gönderi en fazla 5 ek sayfa ve en fazla 100 iç içe yanıt alır. Sonraki sayfa olmadığında, bir sayfa boş olduğunda veya cursor ilerletilemediğinde toplama daha erken durabilir. Bu iç içe yanıtlar üst düzey `limit` ve `total` dışındadır, ancak faturalandırılabilir sonuçları artırabilir.

İç içe `replies`, tam bir yanıt arşivi değildir ve bu ek toplama için ayrı bir devam cursor’u göstermez. Yanıtları bağımsız olarak sayfalandırmak için Read replies işlemini ve döndürdüğü cursor’u kullanın. Üst düzey gönderi cursor’unu yanıtlar için yeniden kullanmayın.

## 4. Gönderileri arayın

`POST /api/v1/data/x/tweet/search`

| Alan | Tür | Gerekli | Anlamı |
|---|---|---|---|
| `query` | string | Evet | Arama metni, 1–1.000 karakter |
| `query_type` | string | Hayır | `Latest` (varsayılan) veya `Top` |
| `limit` | integer | Hayır | 1–1.000; mevcut uygulama en az 20 kullanır, varsayılan 20’dir |
| `cursor` | string | Hayır | Sayfalama cursor’ı, en fazla 4.000 karakter |
| `since_time` | integer or string | Hayır | Başlangıç zamanı; belirsiz olmayan sayısal bir değer için Unix saniyelerini kullanın |
| `until_time` | integer or string | Hayır | Bitiş zamanı; milisaniye değil, Unix saniyelerini kullanın |

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/tweet/search" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"retrieval augmented generation","query_type":"Latest","limit":20}'
```

Yanıt `tweets`, `total`, `has_next` ve `next_cursor` içerir. Gönderi nesneleri `id`, `content`, `author`, `created_at` ve `metrics` içerir; yanıtlar ve alıntılanmış/yeniden gönderilmiş gönderiler iç içe olabilir. Kimlikleri string olarak ele alın.

### Sonuç sayısı sınırları

`limit` bir hedeftir, garanti değildir. Mevcut uygulama en az 20’lik bir hedef kullanır: 20’lik bir hedef bir üst akış sayfası okur; daha büyük hedefler otomatik olarak 50 sayfaya kadar getirir. Her sayfadan önce geçen süre kontrol edilir ve 60 saniyeyi aştığında daha fazla sayfa getirilmez. Devam eden bir üst akış isteği yine de zaman alabilir; bu nedenle bu, genel bir HTTP zaman aşımı değildir.

Toplama ayrıca hedefe ulaşıldığında, üst akışta sonraki sayfa olmadığında, bir sayfa boş olduğunda veya cursor eksik olduğunda durur. `limit` değerinden daha az gönderi dönmesi, isteğin başarısız olduğu veya tüm eşleşen gönderilerin alındığı anlamına gelmez. Devam etmeden önce `has_next` ve `next_cursor` kontrol edin.

```json
{
  "tweets": [{
    "id":"example-post-id",
    "content":"Example post content",
    "author":{"user_id":"example-user-id","username":"example","display_name":"Example"},
    "created_at":"2026-11-01T00:00:00Z",
    "metrics":{},
    "replies":[]
  }],
  "total":1,
  "has_next":false,
  "next_cursor":null
}
```

## 5. Yanıtları okuyun

`POST /api/v1/data/x/tweet/replies`

| Alan | Tür | Gerekli | Anlamı |
|---|---|---|---|
| `tweet_ids` | string or string array | Evet | Tek bir gönderi kimliği veya en fazla 20 kimliklik bir toplu istek |
| `cursor` | string | Hayır | En fazla 4.000 karakter; tek bir gönderi kimliğiyle kullanın |
| `since_time` | integer | Hayır | Unix saniyeleri cinsinden başlangıç zamanı |
| `until_time` | integer | Hayır | Unix saniyeleri cinsinden bitiş zamanı |

Yer tutucuyu gerçek bir gönderi kimliğiyle değiştirin:

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/tweet/replies" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tweet_ids":["POST_ID"]}'
```

Zaman çizelgesi ve gönderi aramasının aksine, yanıtlar `results` altında gruplanır. Her girişin kendi sayfalama durumu vardır:

```json
{"results":[{"tweet_id":"POST_ID","replies":[],"total":0,"has_next":false,"next_cursor":null}]}
```

### İstek başına yanıt sınırları

Her istek, her `tweet_id` için bir üst akış yanıt sayfası okur ve en fazla 100 yanıt tutar; tüm yanıt sayfalarını otomatik olarak getirmez. En fazla 20 kimliklik bir toplu istekte, 100 yanıt sınırı her `results` girdisi için ayrı ayrı geçerlidir. Gerçek sayılar daha düşük olabilir.

Her girdinin `total` değeri, o girdide dönen yanıt sayısıdır; gönderinin tam yanıt sayısı değildir. Devam etmek için, o girdinin `next_cursor` değerini kullanın ve sonraki istekte yalnızca tek gönderi kimliğini gönderin. İstek başına sınırı artırmak için bir `limit` parametresi yoktur.

## Sayfalama ve maliyet kontrolü

`total`, geçerli yanıttaki ilgili diziyi sayar: gönderi sorguları için üst düzey gönderiler veya yanıt sorguları için her sonuç girdisindeki yanıtlar. Bu, genel bir eşleşme sayısı, bir gönderinin tam yanıt sayısı ya da nihai faturalandırılabilir sayı değildir.

1. İlk isteği `cursor` olmadan gönderin.
2. Yanıttan `has_next` ve `next_cursor` değerlerini okuyun. Yanıtlar için, bunları her sonuç girdisinde okuyun.
3. Başka bir sayfa varsa ve cursor boş değilse, aynı sorguyla değiştirmeden gönderin. Bir yanıt toplu isteği için her gönderi için ayrı ayrı devam edin.
4. Sonraki sayfa yoksa, bir cursor tekrar ederse veya kendi sayfa ya da harcama sınırınıza ulaşıldıysa durun.

Sayfalama meta verileri, son üst akış yanıtını yansıtır; dönen koleksiyon sonuç sınırında kesilmiş olabilir. `has_next=false` olması bile tüm X geçmişinin veya yanıtlarının alındığının garantisi değildir. Sınırlı bir sonuç kümesini mevcut tüm veri olarak etiketlemek yerine, gerçek dönen sayıyı gösterin.

Her başarılı sayfa bir ücret oluşturabilir. Bu beş işlem dönen sonuçlara göre faturalandırılır, sabit bir istek ücretiyle değil. İç içe yanıtlar ve diğer dönen kayıtlar, faturalandırılan sayımı etkileyebilir; maliyeti yalnızca üst düzey dizinin uzunluğuna göre tahmin etmeyin. [Güncel fiyatları](https://openapi.felo.ai/api/v1/data/prices) ve konsoldaki kullanımı kontrol edin. Tam nesne alanları [OpenAPI şemasında](https://openapi.felo.ai/api/v1/data/openapi.json) yer alır.
