Дані X
Провайдер: Felo · Оплата з балансу платформи
Оберіть операцію для потрібних вам даних. Усі п’ять кінцевих точок використовують POST і повертають JSON у корені, без спільної оболонки data.
У всіх прикладах використовується FELO_API_KEY з огляду. Виклики використовують баланс платформи, а не кредити Felo Pro. Приклади відповідей є ілюстративними; живий контент і необов’язкові поля можуть відрізнятися.
Оберіть операцію
| Потреба | Кінцева точка |
|---|---|
| Профілі для відомих імен користувачів | POST /api/v1/data/x/user/info |
| Знайти користувачів за пошуковим запитом | POST /api/v1/data/x/user/search |
| Дописи одного користувача | POST /api/v1/data/x/user/tweets |
| Дописи, що відповідають запиту | POST /api/v1/data/x/tweet/search |
| Відповіді на відомі дописи | POST /api/v1/data/x/tweet/replies |
1. Отримати профілі користувачів
POST /api/v1/data/x/user/info
| Поле | Тип | Обов’язкове | Значення |
|---|---|---|---|
usernames | масив string | Так | 1–100 імен користувачів; надсилайте хендли без @ |
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"]}'Відповідь містить users і total. Кожен користувач включає user_id, username і display_name; також можуть бути присутніми текст профілю, кількість підписників, верифікація та інші метадані. Пакет може повернути менше профілів, ніж запитано. Зіставляйте за username або ID, а не за позицією в масиві.
{"users":[{"user_id":"example-user-id","username":"example","display_name":"Example"}],"total":1}2. Пошук користувачів
POST /api/v1/data/x/user/search
| Поле | Тип | Обов’язкове | Значення |
|---|---|---|---|
query | string | Так | 1–1,000 символів |
cursor | string | Ні | Курсор пагінації, до 4,000 символів |
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"}'Відповідь містить users, total, has_next і next_cursor. У цій операції немає параметра limit.
{"users":[],"total":0,"has_next":false,"next_cursor":null}3. Отримати стрічку користувача
POST /api/v1/data/x/user/tweets
| Поле | Тип | Обов’язкове | Значення |
|---|---|---|---|
username | string | Потрібен один ідентифікатор | Хендл користувача, до 100 символів |
x_user_id | string | Потрібен один ідентифікатор | ID користувача, до 100 символів; має пріоритет над username |
limit | integer | Ні | 1–1,000; поточна реалізація використовує щонайменше 20, за замовчуванням 20 |
cursor | string | Ні | Курсор пагінації, до 4,000 символів |
include_replies | boolean | Ні | Включати вкладені відповіді; за замовчуванням false |
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}'Відповідь містить tweets, total, has_next і next_cursor. Встановлення limit нижче 20 не гарантує менше повернутих елементів або менший рахунок. Уключення відповідей може додати повернуті дані та результати, що підлягають оплаті.
Ліміти результатів і вкладених відповідей
limit — це цільова кількість постів верхнього рівня для цього запиту, а не гарантована кількість результатів. Поточна реалізація використовує ціль не менше 20: ціль 20 читає одну вхідну сторінку; більші цілі автоматично отримують до 50 сторінок. Перед кожною сторінкою перевіряється минулий час, і отримання наступних сторінок зупиняється, щойно він перевищує 60 секунд. Ця перевірка не гарантує, що весь HTTP-запит завершиться менш ніж за 60 секунд.
Збір також зупиняється, коли досягнуто цілі, на вхідному джерелі немає наступної сторінки, сторінка порожня або курсор відсутній. Успішна відповідь, таким чином, може містити менше постів, ніж limit. Використовуйте has_next і next_cursor, щоб продовжити, коли вони доступні.
При include_replies=true кожен повернутий пост отримує до 5 додаткових сторінок і не більше 100 вкладених відповідей. Збір може зупинитися раніше, якщо немає наступної сторінки, сторінка порожня або курсор не може просунутися далі. Ці вкладені відповіді не входять до верхньорівневого limit і total, але можуть додавати результати, що підлягають оплаті.
Вкладені replies не є повним архівом відповідей і не надають окремого курсора продовження для цього додаткового збору. Щоб виконувати пагінацію відповідей окремо, використовуйте операцію читання відповідей і її повернений курсор. Не повторно використовуйте курсор верхньорівневого поста для відповідей.
4. Пошук дописів
POST /api/v1/data/x/tweet/search
| Поле | Тип | Обов’язкове | Значення |
|---|---|---|---|
query | string | Так | Текст пошуку, 1–1,000 символів |
query_type | string | Ні | Latest (за замовчуванням) або Top |
limit | integer | Ні | 1–1,000; поточна реалізація використовує щонайменше 20, за замовчуванням 20 |
cursor | string | Ні | Курсор пагінації, до 4,000 символів |
since_time | integer or string | Ні | Час початку; використовуйте Unix seconds для однозначного числового значення |
until_time | integer or string | Ні | Час завершення; використовуйте Unix seconds, а не мілісекунди |
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}'Відповідь містить tweets, total, has_next і next_cursor. Об’єкти дописів містять id, content, author, created_at і metrics; відповіді та процитовані/ретвітнуті дописи можуть бути вкладеними. Розглядайте ID як рядки.
Обмеження кількості результатів
limit — це ціль, а не гарантія. Поточна реалізація використовує ціль не менше 20: ціль 20 читає одну вхідну сторінку; більші цілі автоматично отримують до 50 сторінок. Минувший час перевіряється перед кожною сторінкою, і подальші сторінки не отримуються, щойно він перевищує 60 секунд. Запит до вхідного джерела, що вже виконується, все ще може зайняти час, тож це не є загальним HTTP-тайм-аутом.
Збір також зупиняється, коли досягнуто цілі, на вхідному джерелі немає наступної сторінки, сторінка порожня або курсор відсутній. Повернення меншої кількості дописів, ніж limit, не означає, що запит провалився або що всі відповідні дописи було отримано. Перевіряйте has_next і next_cursor перед продовженням.
{
"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. Читати відповіді
POST /api/v1/data/x/tweet/replies
| Поле | Тип | Обов’язкове | Значення |
|---|---|---|---|
tweet_ids | string або масив string | Так | Один ID допису або пакет до 20 ID |
cursor | string | Ні | До 4,000 символів; використовуйте з одним ID допису |
since_time | integer | Ні | Час початку в Unix seconds |
until_time | integer | Ні | Час завершення в Unix seconds |
Замініть заповнювач на реальний ID допису:
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"]}'На відміну від стрічки та пошуку дописів, відповіді згруповані під results. Кожен елемент має власний стан пагінації:
{"results":[{"tweet_id":"POST_ID","replies":[],"total":0,"has_next":false,"next_cursor":null}]}Ліміти відповідей на один запит
Кожен запит читає одну вхідну сторінку відповідей для кожного tweet_id і зберігає не більше 100 відповідей; він не отримує автоматично всі сторінки відповідей. У пакеті до 20 ID обмеження у 100 відповідей застосовується окремо до кожного елемента results. Фактична кількість може бути меншою.
total кожного елемента — це кількість відповідей, повернутих у цьому елементі, а не повна кількість відповідей на допис. Щоб продовжити, використовуйте next_cursor цього елемента та надсилайте в наступному запиті лише один ID допису. Параметра limit для збільшення ліміту на запит немає.
Пагінація та контроль витрат
total рахує відповідний масив у поточній відповіді: дописи верхнього рівня для запитів дописів або відповіді в кожному елементі результату для запитів відповідей. Це не глобальна кількість збігів, не повна кількість відповідей на допис і не кінцева кількість, що підлягає оплаті.
- Надішліть перший запит без
cursor. - Прочитайте
has_nextіnext_cursorу відповіді. Для відповідей читайте їх у кожному елементі результату. - Якщо є ще одна сторінка і курсор непорожній, надішліть його без змін із тим самим запитом. Для пакета відповідей продовжуйте окремо для кожного допису.
- Зупиніться, коли немає наступної сторінки, коли курсор повторюється або коли досягнуто вашого власного ліміту сторінок чи витрат.
Метадані пагінації відображають останню вхідну відповідь; повернута колекція може бути обрізана на ліміті результатів. Навіть has_next=false не гарантує, що вся історія X або всі відповіді були отримані. Відображайте фактично повернену кількість замість того, щоб позначати обмежений набір результатів як усі доступні дані.
Кожна успішна сторінка може спричинити списання. Ці п’ять операцій оплачуються за повернутими результатами, а не фіксованою платою за запит. Вкладені відповіді та інші повернуті записи можуть впливати на кількість, що підлягає оплаті; не оцінюйте вартість лише за довжиною масиву верхнього рівня. Перевіряйте поточні ціни і використання в консолі. Повні поля об’єктів наведено у схемі OpenAPI.