Account Activity API v2
L’Account Activity API v2 est désormais disponible sur Pro !
Présentation
Cette API est couramment utilisée pour créer des applications qui doivent réagir instantanément aux actions des utilisateurs ou maintenir un état à jour basé sur l’activité des utilisateurs. Vous recevrez toutes les activités pertinentes listées ci-dessous pour chaque abonnement d’utilisateur lors de l’enregistrement de votre webhook :
Types d’activité
- Posts (par l’utilisateur)
- Suppressions de Post (par l’utilisateur)
- @mentions (de l’utilisateur)
- Réponses (à ou de l’utilisateur)
- Reposts (par l’utilisateur ou concernant l’utilisateur)
- Posts cités (par l’utilisateur ou concernant l’utilisateur)
- Reposts de Posts cités (par l’utilisateur ou concernant l’utilisateur)
- Likes (par l’utilisateur ou concernant l’utilisateur)
- Abonnements (par l’utilisateur ou concernant l’utilisateur)
- Désabonnements (par l’utilisateur ou concernant l’utilisateur)
- Blocages (par l’utilisateur ou concernant l’utilisateur)
- Déblocages (par l’utilisateur ou concernant l’utilisateur)
- Mises en sourdine (par l’utilisateur ou concernant l’utilisateur)
- Réactivations du son (par l’utilisateur ou concernant l’utilisateur)
- Messages privés envoyés (par l’utilisateur)
- Messages privés reçus (par l’utilisateur)
- Indicateurs de saisie (à l’attention de l’utilisateur)
- Accusés de lecture (à l’attention de l’utilisateur)
- Révocations d’abonnement (par l’utilisateur)
Présentation des fonctionnalités
Niveau | Tarification | Nombre d’abonnements uniques | Nombre de webhooks |
---|---|---|---|
Pro | 5 000 $ par mois | 3 | 1 |
Enterprise | Contacter les ventes | 5 000+ | 5+ |
Gérer les abonnements
1. Créer une X App
- Activez « Read, Write, and Access direct messages » dans l’onglet Permissions de la page de votre App.
- Dans l’onglet « Keys and Access Tokens », notez la Consumer Key (API Key), le Consumer Token (API Secret) et le Jeton Bearer de votre App.
- Générez l’Access Token et l’Access Token Secret de votre App. Ceux-ci sont nécessaires pour vous abonner à des comptes utilisateur.
- Consultez Obtaining Access Tokens si vous n’êtes pas familier avec X Sign-in et les contextes utilisateur.
- Notez l’id numérique de votre App depuis la page « Apps » dans le developer portal. Ceci est requis lors de la demande d’accès à l’Account Activity API.
2. Obtenir l’accès à l’Account Activity API
3. Enregistrer un webhook
- Assurez-vous que votre webhook est configuré pour accepter des requêtes POST avec des charges utiles d’événements encodées en JSON.
- Récupérez le webhook_id depuis la réponse d’enregistrement du webhook, car il est requis pour gérer les abonnements.
4. Valider la configuration
- Abonnez un compte utilisateur à votre webhook (voir « Ajouter un abonnement » ci-dessous).
- Ajoutez en favori un Post publié par l’un des comptes X auxquels votre App est abonnée.
- Vous devriez recevoir une payload favorite_events via une requête POST vers l’URL de votre webhook.
- Remarque : La livraison des événements peut prendre jusqu’à 10 secondes après l’ajout d’un abonnement.
Notes importantes
- Authentification: Lors de l’inscription des utilisateurs, utilisez la consumer key, la consumer secret, l’access token et l’access token secret du compte de l’utilisateur.
- Messages privés: Tous les Messages privés entrants et sortants (envoyés via POST /2/dm_conversations/with/:participant_id/messages) sont transmis via des webhooks afin que votre App reste informée de toute l’activité de MP.
- Duplication d’événements:
- Si deux utilisateurs abonnés participent à la même conversation de MP, votre webhook reçoit des événements en double (un par utilisateur). Utilisez le champ for_user_id pour les distinguer.
- Si plusieurs Apps partagent la même URL de webhook et le même utilisateur, les événements sont envoyés plusieurs fois (une fois par App).
- Votre App doit dédupliquer les événements à l’aide de l’id de l’événement pour gérer les doublons occasionnels.
- Exemple de code: Consultez Account Activity API Setup pour une application web qui affiche les événements de webhook.
Gestion des utilisateurs abonnés (API v2)
Description: Abonne l’utilisateur authentifié à la réception d’événements via le webhook spécifié.
Authentication: OAuthUser (flux OAuth à 3 étapes requis, représentant l’utilisateur à abonner).
- Consumer Key: p. ex. xvz1evFS…
- Access Token: p. ex. 370773112-GmHxMAgYyLbN…
Parameter | Description |
---|---|
webhook_id | L’id du webhook auquel associer l’abonnement. |
bash
- Succès (200 OK) :
- JSON
- Échec (400 Bad Request):
Raison | Description |
---|---|
WebhookIdInvalid | Le webhook_id fourni est introuvable ou n’est pas associé à l’App. |
DuplicateSubscriptionFailed | Un abonnement pour cet utilisateur existe déjà pour le webhook_id spécifié. |
SubscriptionLimitExceeded | L’application a atteint sa limite d’abonnements sur l’ensemble des webhooks. |
Endpoint: GET /2/account_activity/webhooks/:webhook_id/subscriptions/all
Description: Vérifie si l’utilisateur authentifié est abonné au webhook spécifié.
Authentication: OAuthUser (flux OAuth à 3 étapes requis).
Path Parameters:
Parameter | Description |
---|---|
webhook_id | L’id du webhook à contrôler. |
bash
- Réussite (200 OK) :
- JSON
- Échec (400 Bad Request):
Motif | Description |
---|---|
WebhookIdInvalid | Le webhook_id fourni est introuvable ou n’est pas associé à l’App. |
Endpoint: DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all
Description: Désactive l’abonnement pour un id utilisateur spécifique et arrête la livraison des événements au webhook.
Authentication: OAuth2 App only Jeton Bearer.
- Jeton Bearer: p. ex., AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn…
Paramètre | Description |
---|---|
webhook_id | L’id du webhook contenant l’abonnement. |
user_id | L’id numérique de l’utilisateur à désabonner. |
bash
- Succès (200 OK) :
- JSON
- Échec (400 Bad Request):
Raison | Description |
---|---|
SubscriptionNotFound | Aucun abonnement n’existe pour le user_id spécifié sur le webhook_id indiqué. |
WebhookIdInvalid | Le webhook_id fourni est introuvable ou n’est pas associé à l’App. |
Description: Récupère la liste de tous les id d’utilisateurs actuellement abonnés au webhook spécifié.
Authentication: OAuth2 App only Jeton Bearer.
Path Parameters:
Parameter | Description |
---|---|
webhook_id | L’id du webhook pour lequel lister les abonnements. |
bash
- Réussite (200 OK) :
- json
- Échec (400 Bad Request):
Motif | Description |
---|---|
WebhookIdInvalid | Le webhook_id fourni est introuvable ou n’est pas associé à l’App. |
Endpoint: GET /2/account_activity/subscriptions/count
Description: Renvoie le nombre total d’abonnements actifs ainsi que la limite provisionnée pour l’App d’authentification.
Authentication: OAuth2 App only Jeton Bearer.
Request:
bash
- Succès (200 OK) :
- JSON
Parameter | Description |
---|---|
webhook_id | L’id du webhook pour lequel démarrer la relecture |
Parameter | Description |
---|---|
from_date | L’horodatage UTC le plus ancien (début) à partir duquel les événements seront fournis, au format ‘yyyymmddhhmm’. La granularité est à la minute et l’intervalle est inclusif (p. ex., 12:00 inclut la minute 00). Les heures valides doivent se situer dans les dernières 24 heures, en UTC, et ne pas être plus récentes que 31 minutes avant le moment présent. Il est recommandé que from_date et to_date soient espacés d’environ 2 heures. |
to_date | L’horodatage UTC le plus récent (fin) jusqu’auquel les événements seront fournis, au format ‘yyyymmddhhmm’. La granularité est à la minute et l’intervalle est exclusif (p. ex., 12:30 n’inclut pas la 30e minute de l’heure). Les heures valides doivent se situer dans les dernières 24 heures, en UTC, et être au moins 10 minutes avant le moment présent. |
Raison | Description |
---|---|
QueryParamInvalid | from_date est antérieur de plus de 24 heures par rapport à l’heure actuelle. |
QueryParamInvalid | from_date est plus récent que to_date. |
QueryParamInvalid | from_date est dans le futur. |
QueryParamInvalid | to_date est dans le futur. |
QueryParamInvalid | from_date ou to_date n’est pas au format correct. |
CrcValidationFailed | Réponse incorrecte reçue depuis l’URL du webhook lors de la validation CRC. |
ReplayConflictError | Une tâche de relecture est déjà en cours pour le webhook spécifié. |
WebhookIdInvalid | Le webhook_id fourni est invalide ou n’est pas associé à l’App. |
Messages de fin de tâche
Structure de l’objet de données d’activité de compte
Objet | Détails |
---|---|
for_user_id | Identifie l’abonnement utilisateur auquel l’événement est lié. |
is_blocked_by | (Conditionnel) Affiché uniquement pour les événements de mention de Post si l’utilisateur qui mentionne est bloqué par l’utilisateur abonné. |
source | L’utilisateur qui réalise l’activité (par exemple, l’utilisateur qui suit, bloque ou met en sourdine). |
target | L’utilisateur auquel s’applique l’activité (par exemple, l’utilisateur suivi, bloqué ou mis en sourdine). |
Activités disponibles
Type de message | Détails |
---|---|
tweet_create_events | Statut de Post pour les Posts, Retweets, réponses, @mentions, Tweets cités ou Retweets de Tweets cités. |
favorite_events | Événement de like avec l’utilisateur et la cible. |
follow_events | Événement de suivi avec l’utilisateur et la cible. |
unfollow_events | Événement de désabonnement avec l’utilisateur et la cible. |
block_events | Événement de blocage avec l’utilisateur et la cible. |
unblock_events | Événement de déblocage avec l’utilisateur et la cible. |
mute_events | Événement de mise en sourdine avec l’utilisateur et la cible. |
unmute_events | Événement de réactivation du son avec l’utilisateur et la cible. |
user_event | Événements de révocation lorsqu’un utilisateur retire l’autorisation de l’App (abonnement automatiquement supprimé). |
direct_message_events | Statut de DM pour les messages envoyés ou reçus. |
direct_message_indicate_typing_events | Événement de saisie en DM avec l’utilisateur et la cible. |
direct_message_mark_read_events | Événement de lecture en DM avec l’utilisateur et la cible. |
tweet_delete_events | Notification de Posts supprimés à des fins de conformité. |
spaces_events | Actuellement non pris en charge. Bientôt disponible. |
Exemples de charges utiles
tweet_create_events (Posts, Retweets, Réponses, Tweets cités)
tweet_create_events (@mentions)
événements_favoris
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
Prise en charge des Posts longs
- full_text : le texte complet du Post, y compris tous les caractères au‑delà de la limite de 280 caractères.
- entities : toutes les entités (par exemple, hashtags, URL, mentions d’utilisateurs, symboles) apparaissant dans le texte complet, y compris celles après le 280e caractère.
- display_text_range : l’intervalle de caractères à afficher, en tenant compte du texte complet.
Account Activity API Migration depuis l’Enterprise Legacy vers v2
Foire aux questions
- Vitesse : Livre les données à la vitesse de X.
- Simplicité : Fournit tous les événements de compte via une seule connexion webhook, notamment les Posts, @mentions, réponses, reposts, Tweets cités, likes, DMs, follows, blocks et mutes.
- Échelle : Prend en charge toutes les activités des comptes gérés sans limites de taux ni plafonds d’événements (niveau Enterprise).
Index de référence de l’Account Activity API
Objectif | Endpoint v2 |
---|---|
Abonne une application aux événements d’un compte | POST /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Renvoie le nombre d’abonnements actuellement actifs | GET /2/account_activity/subscriptions/count |
Vérifie si un webhook est abonné à un compte | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Renvoie la liste des abonnements actuellement actifs | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all/list |
Désactive un abonnement avec l’authentification OAuth App-only | DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all |
Crée une tâche de relecture | POST /2/account_activity/replay/webhooks/:webhook_id/subscriptions/all |