So lesen Sie die Antworten auf einen Tweet programmatisch

Aktualisiert
Ein kostenloser Endpunkt, der die öffentlichen Antworten auf jeden X-Post als JSON oder Markdown liefert, nach Engagement oder Zeit, mit Paging.
Kurz gesagt:
GET https://unifapi.com/tools/x/replies?id=<post id or URL>liefert den Post und die öffentlichen Antworten darunter als JSON. Die Nutzung ist kostenlos, ohne Login, ohne Account und ohne API-Key, und pro Besucher begrenzt.sort=top(Standard) sortiert nach Engagement,sort=recentnach Zeit. Eine Seite umfasst 20 Antworten mit einemnextCursor. Jede Antwort trägt Autor, Text, Metriken, Medien undinReplyToPostId, sodass sich der Thread rekonstruieren lässt. Es ist das eine Stück X-Daten, das keiner der kostenlosen Einzel-Post-Endpoints herausgibt, und der Grund, warum die meisten „lies diesen Thread“-Aufgaben für Agents früher in einem Headless-Browser endeten.
In den Antworten unter einem Post lebt die Reaktion. Der Post selbst sagt, was eine Marke gesagt hat; die Antworten sagen, was die Leute davon halten, was kaputt ist, was sie wollen und welche Beschwerde 4.000 Likes bekommen hat. Für Sentiment-Analysen, Kundenrecherche und Incident-Monitoring sind sie die Daten.
Sie sind zugleich der Teil von X, der ohne Account am schwersten zu lesen ist. FxTwitter und vxTwitter lesen einen Post. Der Syndication-Endpoint liest einen Post. Die Seite von X selbst lädt Antworten nachträglich per JavaScript, curl bekommt also eine leere Hülle. Die offizielle API stellt Antworten über die Conversation-Suche in bezahlten Tarifen bereit.
Die Anfrage
curl -s "https://unifapi.com/tools/x/replies?id=https://x.com/NASA/status/2107237881668313108"
id akzeptiert die numerische Post-ID oder die vollständige URL von x.com / twitter.com. Die Antwort:
{
"post": {
"id": "2107237881668313108",
"text": "Time to bring them home 🌎 …",
"author": { "handle": "NASA", "name": "NASA", "verified": true },
"metrics": {
"likes": 7210,
"reposts": 846,
"replies": 262,
"quotes": 60,
"bookmarks": 197,
"views": 2823329
},
"conversationId": "2107237881668313108"
},
"replies": {
"items": [
{
"id": "2107252849688424504",
"text": "@NASA @Space_Station @SpaceX Those space suits don't look right…",
"createdAt": "2026-10-05T23:33:22.000Z",
"author": {
"handle": "Troyztoys",
"name": "Tee Crenshaw",
"verified": true,
"followers": 1823
},
"metrics": {
"likes": 15,
"reposts": 1,
"replies": 0,
"quotes": 0,
"bookmarks": 0,
"views": 894
},
"media": [],
"conversationId": "2107237881668313108",
"inReplyToPostId": "2107237881668313108"
}
],
"hasMore": true,
"nextCursor": "20@"
}
}
post ist das Original. replies.items sind die öffentlichen Posts in dessen Unterhaltung außer dem Original, direkte wie verschachtelte Antworten. Jede hat inReplyToPostId, sodass eine Antwort auf eine Antwort auf ihr Elternelement zeigt und sich der Thread als Baum nachbauen lässt.
Sortierung
sort=top (der Standard) sortiert nach Likes plus Reposts plus Antworten, ungefähr so wie der Tab „Relevanteste“ von X. sort=recent sortiert neueste zuerst. Für „wie ist die Reaktion“ nimmt man top; für „was ist in der letzten Stunde passiert“ recent.
Die Seite für Menschen, /tools/x-reply-viewer, hat dieselben zwei Optionen als Schalter, und /tools/x-reply-viewer?q=<id>&sort=recent&format=json liefert exakt das, was die API liefert.
Blättern
Antworten kommen zu 20 pro Seite. Zum Weiterblättern nextCursor als cursor zurückgeben. Der erste Cursor sieht oft aus wie 20@, was „die nächsten 20 der bereits geladenen Seite“ bedeutet; spätere sind die opaken Cursor von X selbst. Alle als opake Strings behandeln.
Ein Post mit 262 Antworten sind rund 14 Seiten. Das sind 14 Ihrer 20 kostenlosen Einheiten pro 10 Minuten, also X-RateLimit-Remaining aus den Headern lesen und aufhören, wenn es reicht; die erste Seite in Top-Sortierung enthält meist die Antworten, auf die es ankommt.
Was ein Antwort-Datensatz enthält
| Feld | Bedeutung |
|---|---|
id, url | Die id der Antwort und ihre kanonische x.com-URL |
text | Volltext, mit den führenden @-Erwähnungen, wie X sie speichert |
createdAt | ISO 8601, UTC |
author | handle, name, verified, followers, avatarUrl, … |
metrics | likes, reposts, replies, quotes, bookmarks, views |
media | Fotos und Videos mit Größen und MP4-URLs auf dem CDN von X |
inReplyToPostId | Der Post, auf den diese Antwort antwortet |
conversationId | Der Wurzel-Post der Unterhaltung |
possiblySensitive | Das eigene Flag von X |
Die Form ist derselbe post-Datensatz, den die Such-, Profil- und Medien-Endpoints liefern, sodass eine Funktion, die einen Post bewertet, unverändert auf einer Antwort funktioniert.
Drei Dinge zum Bauen
Eine Reaktionszusammenfassung. Die Top-Seite laden, die 20 Texte zusammen mit dem Originalpost an ein Modell geben und nach den drei häufigsten Stimmungen mit je einem repräsentativen Zitat fragen. Zwanzig Antworten und ein Aufruf; die Top-Sortierung hat das Ranking schon erledigt.
Ein Beschwerde-Feed. Für die Ankündigung einer Marke alle 10 Minuten sort=recent abfragen, die Antworten behalten, deren metrics.likes zwischen zwei Abfragen über eine Schwelle steigt, und diese an einen Menschen weiterleiten. Die steigenden sind die, die als Screenshot herumgehen werden.
Eine Thread-Rekonstruktion. Alle Seiten durchgehen, eine Map von id auf Antwort bauen, dann jede Antwort an ihre inReplyToPostId hängen. Antworten auf das Original haben Tiefe eins; der Rest verschachtelt sich. Als Markdown gerendert ergibt das ein lesbares Transkript der Unterhaltung für einen Bericht.
Grenzen
- Nur öffentliche Antworten. Antworten von geschützten Accounts und gelöschte Antworten sind nicht enthalten, weshalb die
replies-Zahl am Originalpost höher sein kann als das, was sich lesen lässt. - Das kostenlose Limit liegt bei 20 Abfragen pro 10 Minuten und Besucher über alle
/tools/x/*-Endpoints hinweg, und eine Suche zählt doppelt. Ein 429 trägtRetry-Afterund die URL, unter der sich das Limit aufheben lässt. - Volumen, Verlauf und Garantien sind die abgerechnete X / Twitter API, nutzungsbasiert (Pay as you go) mit einem Workspace-Key, mit denselben Feldnamen.
FAQ
Kann ich die Antworten auf einen Tweet ohne die Twitter API bekommen?
Ja. Der Endpoint oben liest öffentliche Antworten kostenlos, ohne Login, Account oder Key, pro Besucher begrenzt. Er liefert standardmäßig JSON und mit format=md Markdown.
Warum zeigt X 262 Antworten, ich sehe aber nur 200?
Manche Antworten stammen von geschützten Accounts, manche wurden gelöscht, manche hat der Autor ausgeblendet. Die Zahl am Originalpost ist die von X, die lesbare Menge ist das, was öffentlich ist.
Sind Zitat-Posts enthalten?
Nein. Zitate sind eigene Posts, keine Antworten. Um sie zu finden, mit /tools/x/search?q=<post url> nach der URL des Posts suchen.
Kann ich Antworten als Text für ein Modell lesen?
Ja. format=md liefert den Originalpost und jede Antwort als Markdown-Block mit Autor, Text, Metriken und URL.