Account Activity API v2
¡Account Activity API v2 ya está disponible en Pro!
Descripción general
Esta API se utiliza comúnmente para crear aplicaciones que necesitan reaccionar al instante a las acciones de los usuarios o mantener un estado actualizado basado en la actividad del usuario. Recibirás todas las actividades relacionadas que se indican a continuación para cada suscripción de usuario en tu registro de webhook:
Tipos de actividad
- Posts (del usuario)
- Eliminaciones de Post (del usuario)
- @menciones (del usuario)
- Respuestas (al usuario o del usuario)
- Reposts (del usuario o sobre el usuario)
- Posts con cita (del usuario o sobre el usuario)
- Reposts de Posts con cita (del usuario o sobre el usuario)
- Likes (del usuario o sobre el usuario)
- Follows (del usuario o sobre el usuario)
- Unfollows (del usuario o sobre el usuario)
- Bloqueos (del usuario o sobre el usuario)
- Desbloqueos (del usuario o sobre el usuario)
- Silenciamientos (del usuario o sobre el usuario)
- Anulación de silenciamiento (del usuario o sobre el usuario)
- Mensajes Directos enviados (por el usuario)
- Mensajes Directos recibidos (por el usuario)
- Indicadores de escritura (para el usuario)
- Confirmaciones de lectura (para el usuario)
- Revocaciones de suscripción (por el usuario)
Resumen de funciones
Nivel | Precio | Número de suscripciones únicas | Número de webhooks |
---|---|---|---|
Pro | $5,000/mes | 3 | 1 |
Enterprise | Contactar a ventas | 5000+ | 5+ |
Administrar suscripciones
1. Crea una X App
- Habilita “Read, Write, and Access direct messages” en la pestaña de permisos de la página de tu App.
- En la pestaña “Keys and Access Tokens”, toma nota del Consumer Key (API Key), Consumer Token (API Secret) y Bearer Token de tu App.
- Genera el Access Token y el Access Token Secret de tu App. Estos son necesarios para suscribirte a cuentas de usuario.
- Revisa Obtaining Access Tokens si no estás familiarizado con X Sign-in y los contextos de usuario.
- Anota el id numérico de tu App desde la página “Apps” en el portal de desarrolladores. Esto es necesario al solicitar acceso a Account Activity API.
2. Obtener acceso a la Account Activity API
3. Registrar un webhook
- Asegúrese de que su webhook esté configurado para aceptar solicitudes POST con cargas de eventos codificadas en JSON.
- Obtenga el webhook_id de la respuesta al registrar el webhook, ya que es necesario para gestionar las suscripciones.
4. Validar la configuración
- Suscribe una cuenta de usuario a tu webhook (consulta “Adding a Subscription” más abajo).
- Marca como favorito un Post publicado por una de las cuentas de X a las que tu App está suscrita.
- Deberías recibir un payload de favorite_events mediante una solicitud POST a la URL de tu webhook.
- Nota: La entrega de eventos puede tardar hasta 10 segundos en comenzar tras agregar una suscripción.
Notas importantes
- Autenticación: Al suscribir usuarios, usa la consumer key, consumer secret, access token y access token secret de la cuenta del usuario.
- Mensajes Directos: Todos los Mensajes Directos entrantes y salientes (enviados mediante POST /2/dm_conversations/with/:participant_id/messages) se entregan por webhooks para mantener tu App al tanto de toda la actividad de MD.
- Duplicación de eventos:
- Si dos usuarios suscritos están en la misma conversación de MD, tu webhook recibe eventos duplicados (uno por usuario). Usa el campo for_user_id para distinguirlos.
- Si varias Apps comparten la misma URL de webhook y el mismo usuario, los eventos se envían varias veces (una por App).
- Tu App debe desduplicar los eventos usando el event ID para manejar duplicados ocasionales.
- Código de ejemplo: Consulta el Account Activity API Setup para una App web que muestra eventos de webhook.
Gestión de usuarios suscritos (API v2)
Description: Suscribe al usuario autenticado para recibir eventos mediante el webhook especificado.
Authentication: OAuthUser (flujo de OAuth de 3 fases requerido, que representa al usuario que se suscribe).
- Consumer Key: p. ej., xvz1evFS…
- Access Token: p. ej., 370773112-GmHxMAgYyLbN…
Parameter | Description |
---|---|
webhook_id | El id del webhook con el que asociar la suscripción. |
bash
- Correcto (200 OK):
- JSON
- Error (400 Bad Request):
Motivo | Descripción |
---|---|
WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado con la App. |
DuplicateSubscriptionFailed | Ya existe una suscripción para este usuario para el webhook_id especificado. |
SubscriptionLimitExceeded | La aplicación alcanzó su límite de suscripciones en todos los webhooks. |
Endpoint: GET /2/account_activity/webhooks/:webhook_id/subscriptions/all
Descripción: Comprueba si el usuario autenticado está suscrito al webhook especificado.
Autenticación: OAuthUser (se requiere flujo de OAuth de 3 fases).
Parámetros de ruta:
Parámetro | Descripción |
---|---|
webhook_id | El id del webhook que se desea comprobar. |
bash
- Correcto (200 OK):
- JSON
- Error (400 Solicitud incorrecta):
Motivo | Descripción |
---|---|
WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado con la App. |
Endpoint: DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all
Description: Desactiva la suscripción para un id de usuario específico y detiene la entrega de eventos al webhook.
Authentication: OAuth2 App only Bearer Token.
- Bearer Token: p. ej., AAAAAAAAAAAA0%2EUifi76ZC9Ub0wn…
Parameter | Description |
---|---|
webhook_id | El id del webhook que contiene la suscripción. |
user_id | El id numérico del usuario al que se dará de baja. |
bash
- Correcto (200 OK):
- JSON
- Fallo (400 Bad Request):
Motivo | Descripción |
---|---|
SubscriptionNotFound | No existe una suscripción para el user_id especificado en el webhook_id indicado. |
WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado con la App. |
Description: Recupera una lista de todos los id de usuarios que actualmente están suscritos al webhook especificado.
Authentication: OAuth2 App only Bearer Token.
Path Parameters:
Parameter | Description |
---|---|
webhook_id | El id del webhook para el que se desean listar las suscripciones. |
bash
- Correcto (200 OK):
- JSON
- Error (400 Bad Request):
Motivo | Descripción |
---|---|
WebhookIdInvalid | El webhook_id proporcionado no se encontró o no está asociado con la App. |
Endpoint: GET /2/account_activity/subscriptions/count
Description: Devuelve el recuento total de suscripciones activas y el límite aprovisionado para la aplicación autenticada.
Authentication: OAuth2 App only Bearer Token.
Request:
bash
- Correcto (200 OK):
- JSON
Parámetro | Descripción |
---|---|
webhook_id | El id del webhook en el que iniciar la reproducción |
Parámetro | Descripción |
---|---|
from_date | La marca de tiempo UTC más antigua (inicial) desde la cual se proporcionarán los eventos; debe estar en el formato ‘yyyymmddhhmm’. La marca de tiempo tiene granularidad de minutos y es inclusiva (p. ej., 12:00 incluye el minuto 00). Los tiempos válidos deben estar dentro de las últimas 24 horas (hora UTC) y no más recientes que 31 minutos antes del momento actual. Se recomienda que from_date y to_date estén dentro de ~2 horas. |
to_date | La marca de tiempo UTC más reciente (final) hasta la cual se proporcionarán los eventos; debe estar en el formato ‘yyyymmddhhmm’. La marca de tiempo tiene granularidad de minutos y es exclusiva (p. ej., 12:30 no incluye el minuto 30 de la hora). Los tiempos válidos deben estar dentro de las últimas 24 horas (hora UTC) y no más recientes que 10 minutos antes del momento actual. |
Reason | Description |
---|---|
QueryParamInvalid | from_date es anterior a 24 horas respecto de la hora actual. |
QueryParamInvalid | from_date es más reciente que to_date. |
QueryParamInvalid | from_date está en el futuro. |
QueryParamInvalid | to_date está en el futuro. |
QueryParamInvalid | from_date o to_date no tiene el formato correcto. |
CrcValidationFailed | Se recibió una respuesta incorrecta desde la URL del webhook durante la validación CRC. |
ReplayConflictError | Ya hay un trabajo de reproducción en curso para el webhook especificado. |
WebhookIdInvalid | El webhook_id proporcionado no es válido o no está asociado con la App. |
Mensajes de finalización de trabajo
Estructura del objeto de datos de actividad de la cuenta
Objeto | Detalles |
---|---|
for_user_id | Identifica la suscripción de usuario a la que está relacionado el evento. |
is_blocked_by | (Condicional) Solo se muestra para eventos de mención de Post si el usuario que menciona está bloqueado por el usuario suscrito. |
source | El usuario que realiza la actividad (p. ej., el usuario que sigue, bloquea o silencia). |
target | El usuario al que se aplica la actividad (p. ej., el usuario al que siguen, bloquean o silencian). |
Actividades disponibles
Tipo de mensaje | Detalles |
---|---|
tweet_create_events | Estado de Post para Posts, Retweets, respuestas, @mentions, Quote Tweets o Retweet de Quote Tweets. |
favorite_events | Evento de like con usuario y objetivo. |
follow_events | Evento de seguir con usuario y objetivo. |
unfollow_events | Evento de dejar de seguir con usuario y objetivo. |
block_events | Evento de bloqueo con usuario y objetivo. |
unblock_events | Evento de desbloqueo con usuario y objetivo. |
mute_events | Evento de silenciar con usuario y objetivo. |
unmute_events | Evento de reactivar sonido con usuario y objetivo. |
user_event | Eventos de revocación cuando un usuario elimina la autorización de la App (suscripción eliminada automáticamente). |
direct_message_events | Estado de mensaje directo (DM) para mensajes enviados o recibidos. |
direct_message_indicate_typing_events | Evento de escritura en DM con usuario y objetivo. |
direct_message_mark_read_events | Evento de lectura en DM con usuario y objetivo. |
tweet_delete_events | Aviso de Posts eliminados para fines de cumplimiento. |
spaces_events | Actualmente no compatible. Próximamente. |
Ejemplos de cargas útiles
tweet_create_events (Posts, Retweets, Respuestas, Quote Tweets)
tweet_create_events (@mentions)
eventos_favoritos
eventos_de_follow
eventos_dejar_de_seguir
block_events
desbloquear_eventos
mute_events
unmute_events
user_event
direct_message_events
direct_message_indicate_typing_events
direct_message_mark_read_events
tweet_delete_events
Compatibilidad con Posts de formato largo
- full_text: El texto completo del Post, incluidos todos los caracteres más allá del límite de 280.
- entities: Cualquier entidad (p. ej., hashtags, URL, menciones de usuario, símbolos) que aparezca en el texto completo, incluidas las que se encuentren después del carácter 280.
- display_text_range: El rango de caracteres que se debe mostrar, considerando el texto completo.
Account Activity API: migración de Enterprise heredado a v2
Preguntas frecuentes
- Velocidad: Entrega datos a la velocidad de X.
- Simplicidad: Proporciona todos los eventos de la cuenta a través de una única conexión de webhook, incluidos Posts, @menciones, respuestas, Reposts, Tweets con cita, likes, MD, follows, blocks y mutes.
- Escala: Admite todas las actividades para cuentas gestionadas sin límites de tasa ni topes de eventos (nivel Enterprise).
Índice de referencia de Account Activity API
Propósito | Endpoint v2 |
---|---|
Suscribe una App a los eventos de una cuenta | POST /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Devuelve el recuento de suscripciones activas actualmente | GET /2/account_activity/subscriptions/count |
Comprueba si un webhook está suscrito a una cuenta | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all |
Devuelve una lista de las suscripciones activas actualmente | GET /2/account_activity/webhooks/:webhook_id/subscriptions/all/list |
Desactiva una suscripción usando OAuth solo de la App | DELETE /2/account_activity/webhooks/:webhook_id/subscriptions/:user_id/all |
Crea un trabajo de reproducción | POST /2/account_activity/replay/webhooks/:webhook_id/subscriptions/all |