Account Activity API v2
Die Account Activity API v2 ist jetzt unter Pro verfügbar!
Überblick
Diese API wird häufig verwendet, um Anwendungen zu entwickeln, die sofort auf Nutzeraktionen reagieren müssen oder einen stets aktuellen Zustand basierend auf der Nutzeraktivität beibehalten. Für jedes Nutzerabonnement erhalten Sie im Rahmen Ihrer Webhook-Registrierung alle nachfolgend aufgeführten zugehörigen Aktivitäten:
Aktivitätstypen
- Posts (vom Nutzer)
- Post-Löschungen (vom Nutzer)
- @Erwähnungen (des Nutzers)
- Antworten (an den oder vom Nutzer)
- Reposts (vom Nutzer oder den Nutzer betreffend)
- Zitat-Posts (vom Nutzer oder den Nutzer betreffend)
- Reposts von Zitat-Posts (vom Nutzer oder den Nutzer betreffend)
- Likes (vom Nutzer oder den Nutzer betreffend)
- Follows (vom Nutzer oder den Nutzer betreffend)
- Unfollows (vom Nutzer oder den Nutzer betreffend)
- Blocks (vom Nutzer oder den Nutzer betreffend)
- Unblocks (vom Nutzer oder den Nutzer betreffend)
- Mutes (vom Nutzer oder den Nutzer betreffend)
- Unmutes (vom Nutzer oder den Nutzer betreffend)
- Direct Messages gesendet (vom Nutzer)
- Direct Messages empfangen (vom Nutzer)
- Tipp-Indikatoren (an den Nutzer)
- Lesebestätigungen (an den Nutzer)
- Widerrufe von Abonnements (vom Nutzer)
data
über die Account Activity API. Verwenden Sie das endpoint
User Posts Timeline by User ID, um diese data
abzurufen.
Funktionsübersicht
Stufe | Preis | Anzahl eindeutiger Abonnements | Anzahl der Webhooks |
---|---|---|---|
Pro | 5.000 $ / Monat | 3 | 1 |
Enterprise | Vertrieb kontaktieren | 5000+ | 5+ |
Abonnements verwalten
1. Erstellen Sie eine X App
- Aktivieren Sie „Lesen, Schreiben und Zugriff auf Direct Messages“ auf der Registerkarte „Berechtigungen“ Ihrer App-Seite.
- Notieren Sie sich auf der Registerkarte „Keys and Access Tokens“ den Consumer Key (API Key), den Consumer Token (API Secret) und das Bearer Token Ihrer App.
- Generieren Sie das Access Token und das Access Token Secret Ihrer App. Diese werden benötigt, um Nutzerkonten zu abonnieren.
- Lesen Sie Obtaining Access Tokens, wenn Sie mit X Sign-in und Nutzerkontexten nicht vertraut sind.
- Notieren Sie sich die numerische id Ihrer App auf der Seite „Apps“ im Entwicklerportal. Diese wird benötigt, wenn Sie Zugriff auf die Account Activity API beantragen.
2. Zugriff auf die Account Activity API erhalten
3. Registrieren Sie einen Webhook
- Stellen Sie sicher, dass Ihr Webhook so konfiguriert ist, dass er POST-Anfragen mit JSON-codierten Ereignis-Payloads verarbeitet.
- Notieren Sie die webhook_id aus der Antwort auf die Webhook-Registrierung; sie wird für die Verwaltung von Abonnements benötigt.
4. Einrichtung überprüfen
- Abonnieren Sie mit einem Benutzerkonto Ihren Webhook (siehe „Hinzufügen eines Abonnements“ unten).
- Markieren Sie einen Post als Favorit, der von einem der X‑Konten veröffentlicht wurde, die Ihre App abonniert hat.
- Sie sollten eine favorite_events-Payload per POST-Anfrage an Ihre Webhook-URL erhalten.
- Hinweis: Es kann bis zu 10 Sekunden dauern, bis nach dem Hinzufügen eines Abonnements Ereignisse zugestellt werden.
Wichtige Hinweise
- Authentifizierung: Beim Abonnieren von Nutzern verwenden Sie den Consumer Key, das Consumer Secret, den Access Token und das Access Token Secret für das Konto des Nutzers.
- Direct Messages: Alle eingehenden und ausgehenden Direct Messages (gesendet via POST /2/dm_conversations/with/:participant_id/messages) werden über Webhooks zugestellt, damit Ihre App über alle DM-Aktivitäten auf dem Laufenden bleibt.
- Duplizierte Ereignisse:
- Befinden sich zwei abonnierte Nutzer in derselben DM-Unterhaltung, erhält Ihr Webhook doppelte Ereignisse (je eines pro Nutzer). Verwenden Sie das Feld for_user_id, um sie zu unterscheiden.
- Wenn mehrere Apps dieselbe Webhook-URL und denselben Nutzer verwenden, werden Ereignisse mehrfach gesendet (einmal pro App).
- Ihre App sollte Ereignisse anhand der event ID deduplizieren, um gelegentliche Duplikate zu verarbeiten.
- Beispielcode: Siehe das Account Activity API Setup für eine Web-App, die Webhook-Ereignisse anzeigt.
Verwalten abonnierter Nutzer (v2 API)
Beschreibung: Abonniert den authentifizierten Benutzer, um Ereignisse über den angegebenen Webhook zu empfangen.
Authentifizierung: OAuthUser (3-legged OAuth-Flow erforderlich, steht für den Benutzer, der abonniert wird).
- Consumer Key: z. B. xvz1evFS…
- Access Token: z. B. 370773112-GmHxMAgYyLbN…
Parameter | Beschreibung |
---|---|
webhook_id | Die id des Webhooks, mit dem das Abonnement verknüpft wird. |
bash
- Erfolg (200 OK):
- JSON
- Fehler (400 Bad Request):
Reason | Description |
---|---|
WebhookIdInvalid | Die angegebene webhook_id wurde nicht gefunden oder ist der App nicht zugeordnet. |
DuplicateSubscriptionFailed | Für diesen Benutzer besteht bereits ein Abonnement für die angegebene webhook_id. |
SubscriptionLimitExceeded | Die Anwendung hat ihr Abonnementlimit für alle Webhooks erreicht. |
Endpoint: GET /2/account_activity/webhooks/:webhook_id/subscriptions/all
Beschreibung: Prüft, ob der authentifizierte Benutzer beim angegebenen Webhook abonniert ist.
Authentifizierung: OAuthUser (3-legged OAuth-Flow erforderlich).
Pfadparameter:
Parameter | Beschreibung |
---|---|
webhook_id | Die ID des zu prüfenden Webhooks. |
bash
- Erfolg (200 OK):
- JSON
- Fehler (400 Bad Request):
Grund | Beschreibung |
---|---|
WebhookIdInvalid | Die angegebene webhook_id wurde nicht gefunden oder ist der App nicht zugeordnet. |
Endpoint: DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all
Beschreibung: Deaktiviert das Abonnement für eine bestimmte Benutzer-ID und beendet die Ereigniszustellung an den Webhook.
Authentifizierung: OAuth2 App only Bearer Token.
- Bearer Token: z. B. AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn…
Parameter | Beschreibung |
---|---|
webhook_id | Die ID des Webhooks, der das Abonnement enthält. |
user_id | Die numerische ID des Benutzers, der abgemeldet werden soll. |
bash
- Erfolg (200 OK):
- JSON
- Fehler (400 Bad Request):
Grund | Beschreibung |
---|---|
SubscriptionNotFound | Es existiert kein Abonnement für die angegebene user_id auf der angegebenen webhook_id. |
WebhookIdInvalid | Die angegebene webhook_id wurde nicht gefunden oder ist nicht mit der App verknüpft. |
Description: Ruft eine Liste aller Benutzer-IDs ab, die derzeit auf den angegebenen Webhook abonniert sind.
Authentication: OAuth2 App only Bearer Token.
Path Parameters:
Parameter | Beschreibung |
---|---|
webhook_id | Die id des Webhooks, für den Subscriptions aufgelistet werden sollen. |
bash
- Erfolg (200 OK):
- JSON
- Fehler (400 Bad Request):
Grund | Beschreibung |
---|---|
WebhookIdInvalid | Die angegebene webhook_id wurde nicht gefunden oder ist nicht der App zugeordnet. |
Endpoint: GET /2/account_activity/subscriptions/count
Beschreibung: Gibt die Gesamtzahl aktiver Abonnements sowie das bereitgestellte Limit für die authentifizierende App zurück.
Authentifizierung: OAuth2 App only Bearer Token.
Request:
bash
- Erfolg (200 OK):
- JSON
Parameter | Beschreibung |
---|---|
webhook_id | Die id des Webhook, für den das Replay gestartet werden soll |
Parameter | Beschreibung |
---|---|
from_date | Der älteste (Start-)UTC-Zeitstempel, ab dem die Ereignisse bereitgestellt werden; muss im Format ‚yyyymmddhhmm‘ vorliegen. Der Zeitstempel hat Minutengenauigkeit und ist inklusiv (d. h. 12:00 umfasst die Minute 00). Gültige Zeiten müssen innerhalb der letzten 24 Stunden (UTC) liegen und dürfen nicht jünger als 31 Minuten vor dem aktuellen Zeitpunkt sein. Es wird empfohlen, dass from_date und to_date innerhalb von ca. 2 Stunden liegen. |
to_date | Der jüngste (End-)UTC-Zeitstempel, bis zu dem die Ereignisse bereitgestellt werden; muss im Format ‚yyyymmddhhmm‘ vorliegen. Der Zeitstempel hat Minutengenauigkeit und ist exklusiv (d. h. 12:30 umfasst nicht die 30. Minute der Stunde). Gültige Zeiten müssen innerhalb der letzten 24 Stunden (UTC) liegen und höchstens 10 Minuten vor dem aktuellen Zeitpunkt liegen. |
Grund | Beschreibung |
---|---|
QueryParamInvalid | from_date liegt mehr als 24 Stunden vor der aktuellen Zeit. |
QueryParamInvalid | from_date ist später als to_date. |
QueryParamInvalid | from_date liegt in der Zukunft. |
QueryParamInvalid | to_date liegt in der Zukunft. |
QueryParamInvalid | from_date oder to_date hat nicht das richtige Format. |
CrcValidationFailed | Während der CRC-Validierung wurde eine falsche Antwort von der Webhook-URL empfangen. |
ReplayConflictError | Für den angegebenen Webhook ist bereits ein Wiederholungsjob aktiv. |
WebhookIdInvalid | Die angegebene webhook_id ist ungültig oder der App nicht zugeordnet. |
Meldungen zum Abschluss eines Jobs
Struktur des Account-Aktivitätsdatenobjekts
Objekt | Details |
---|---|
for_user_id | Identifiziert das Benutzerabonnement, dem das Ereignis zugeordnet ist. |
is_blocked_by | (Bedingt) Wird nur bei Post-Erwähnungen angezeigt, wenn der erwähnende Benutzer vom abonnierten Benutzer blockiert wird. |
source | Der Benutzer, der die Aktivität ausführt (z. B. folgt, blockiert oder stummschaltet). |
target | Der Benutzer, auf den sich die Aktivität bezieht (z. B. der Benutzer, dem gefolgt, der blockiert oder stummgeschaltet wird). |
Verfügbare Aktivitäten
Nachrichtentyp | Details |
---|---|
tweet_create_events | Post-Status für Posts, Retweets, Antworten, @Mentions, Quote Tweets oder Retweets von Quote Tweets. |
favorite_events | like-Ereignis mit Nutzer und Ziel. |
follow_events | Follow-Ereignis mit Nutzer und Ziel. |
unfollow_events | Unfollow-Ereignis mit Nutzer und Ziel. |
block_events | Block-Ereignis mit Nutzer und Ziel. |
unblock_events | Unblock-Ereignis mit Nutzer und Ziel. |
mute_events | Mute-Ereignis mit Nutzer und Ziel. |
unmute_events | Unmute-Ereignis mit Nutzer und Ziel. |
user_event | Widerrufsereignisse, wenn ein Nutzer die App-Autorisierung entfernt (Abonnement wird automatisch gelöscht). |
direct_message_events | DM-Status für gesendete oder empfangene Nachrichten. |
direct_message_indicate_typing_events | DM-Tipp-Ereignis mit Nutzer und Ziel. |
direct_message_mark_read_events | DM-Gelesen-Ereignis mit Nutzer und Ziel. |
tweet_delete_events | Hinweis auf gelöschte Posts für Compliance-Zwecke. |
spaces_events | Derzeit nicht unterstützt. In Kürze verfügbar. |
Beispielpayloads
tweet_create_events (Posts, Retweets, Antworten, QuoteTweets)
tweet_create_events (@Mentions)
favorite_events
follow_events
unfollow_events
block_events
unblock_events
mute_events
unmute_events
user_event
direct_message_events
direct_message_indicate_typing_events
direct_message_mark_read_events
tweet_delete_events
Unterstützung für Longform-Posts
- full_text: Der vollständige Text des Posts, einschließlich aller Zeichen über die 280-Zeichen-Grenze hinaus.
- entities: Alle Entitäten (z. B. Hashtags, URLs, Benutzererwähnungen, Symbole), die im vollständigen Text erscheinen, einschließlich derjenigen nach dem 280. Zeichen.
- display_text_range: Der Bereich der anzuzeigenden Zeichen unter Berücksichtigung des vollständigen Textes.
Account Activity API – Migration von Legacy Enterprise auf v2
Häufig gestellte Fragen
- Geschwindigkeit: Liefert Daten mit der Geschwindigkeit von X.
- Einfachheit: Stellt alle Kontoereignisse über eine einzelne Webhook-Verbindung bereit, einschließlich Posts, @Mentions, Antworten, Reposts, Quote Tweets, Likes, DMs, Follows, Blocks und Mutes.
- Skalierung: Unterstützt alle Aktivitäten für verwaltete Konten ohne Rate Limits oder Ereignisobergrenzen (Enterprise-Tarif).
Account Activity API Referenzindex
Zweck | V2-Endpoint |
---|---|
Abonniert die Kontoereignisse für eine App | POST /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Gibt die Anzahl der aktuell aktiven Abonnements zurück | GET /2/account_activity/subscriptions/count |
Prüft, ob ein Webhook für ein Konto abonniert ist | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Gibt eine Liste der aktuell aktiven Abonnements zurück | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all/list |
Deaktiviert ein Abonnement mit App-only OAuth | DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all |
Erstellt einen Replay-Job | POST /2/account_activity/replay/webhooks/:webhook_id/subscriptions/all |