Por Sorsa Editorial

Actualizado en julio de 2026: agregada la oferta inicial de 100 solicitudes gratis, reformulado el precio en torno a tarifas por lote por cada 1,000, estandarizada la cifra de ahorro a hasta 50x, ajustado el enlazado interno, y re-verificado cada endpoint contra la API en vivo.

Conclusión clave: Una API de engagement de Twitter devuelve las personas y el contenido detrás de los conteos de like, respuesta, cita y retweet de un tweet. La API oficial de X limita las respuestas a una búsqueda de conversación de siete días y pone un tope de 100 en los retweeters. Los endpoints REST de terceros recuperan respuestas, citas y perfiles de retweeters por URL del tweet, con paginación por cursor y sin límite de antigüedad.

El conteo de likes es un número. Una respuesta es una persona, una opinión, a veces una pregunta que tu equipo de soporte debería estar contestando. Los conteos agregados al pie de un tweet son un resumen; el engagement debajo de ellos es el dato real.

Esta guía extrae ese dato. Recuperarás la instantánea completa de métricas de un tweet, luego profundizarás en los tres tipos de engagement que tienen personas o texto detrás: comentarios (respuestas), tweets citados y retweeters. Los ejemplos usan Sorsa API, un proveedor alternativo de API de Twitter/X, porque el producto Engagement de la API oficial de X está restringido a clientes enterprise y el rodeo público (una búsqueda de conversación filtrada) solo alcanza los últimos siete días. Sorsa expone un endpoint directo de comentarios, citas y retweeters para cualquier tweet público de cualquier antigüedad, detrás de una sola clave API con 20 solicitudes por segundo en todos los planes, y en trabajo intensivo en lectura corre hasta 50 veces más barato que el precio por recurso de la API oficial de X. Sin aprobación de cuenta de desarrollador, sin flujo OAuth: pega una clave y extrae.

Nosotros construimos y operamos Sorsa y hemos servido más de cinco mil millones de solicitudes desde 2022. Los patrones de abajo vienen de trabajo real, desde migrar equipos fuera de la API oficial hasta war-rooms de monitoreo de marca, verificación de campañas a escala e investigación académica de diálogo. Cada ejemplo de código usa requests a secas, así que puedes pegarlo en cualquier proyecto de Python sin una biblioteca envoltorio.


Tabla de contenidos

  1. ¿Qué cuenta como engagement de un tweet?
  2. ¿Por qué es difícil obtener datos de engagement de la API oficial de X?
  3. API oficial de X vs una API de engagement de Twitter dedicada
  4. ¿Qué tipo de engagement te dice más?
  5. ¿Cómo obtener las métricas de engagement de un tweet?
  6. ¿Cómo obtener todas las respuestas a un tweet?
  7. ¿Cómo obtener los tweets citados de un tweet?
  8. ¿Cómo ver quién hizo retweet de un tweet?
  9. Construir un reporte completo de engagement para un tweet
  10. Comparar el engagement entre varios tweets
  11. ¿Cuánto cuesta la extracción de engagement a escala?
  12. ¿Cómo verificar que un usuario específico interactuó?
  13. Exportar datos de engagement
  14. En la práctica: extracción de respuestas para una war-room de lanzamiento
  15. Preguntas frecuentes
  16. Cómo empezar

¿Qué cuenta como engagement de un tweet? {#what-counts-as-tweet-engagement}

El engagement de un tweet cubre cinco acciones distintas, y la superficie de API de cada una es diferente. Los likes y las vistas se exponen solo como conteos. Las respuestas y los tweets citados devuelven objetos de tweet completos con texto, autor y métricas. Los retweets devuelven los perfiles de usuario que amplificaron el tweet, sin texto aparte, porque un retweet es pura redistribución.

Tipo de engagementQué esQué puedes recuperar
LikesToques anónimos de corazónSolo el conteo (la lista de quién dio like ya no se expone públicamente)
Respuestas (comentarios)Respuestas en hilo con textoObjetos de tweet completos: texto, autor, métricas
Tweets citadosRepost con comentario agregadoObjetos de tweet completos: texto, autor, métricas
RetweetsPura amplificación, sin textoSolo perfiles de usuario (sin contenido de tweet)
Vistas / impresionesCuántas veces se renderizó el tweetSolo el conteo, en el tweet original

Los conteos de guardados también existen como un número en el tweet, pero quienes guardan son privados. Los likes solían exponer el feed de quién dio like; X hizo los likes privados para todos los usuarios en junio de 2024. El trabajo interesante ocurre en las tres áreas donde alcanzas a las personas y el texto subyacentes: respuestas, citas y retweeters. El resto de esta guía se enfoca en esas.


¿Por qué es difícil obtener datos de engagement de la API oficial de X? {#why-is-getting-engagement-data-from-the-official-x-api-hard}

Obtener datos de engagement de la API oficial de X es difícil porque los conteos y los datos subyacentes viven en lugares diferentes. Las métricas agregadas (likes, retweets, respuestas, citas, vistas) están disponibles a través del objeto public_metrics de v2 en el acceso de pago, pero las respuestas, los tweets citados y las listas de retweeters reales están restringidos: las respuestas requieren una búsqueda de conversación limitada a los últimos siete días, los retweeters tienen un tope de 100 y el producto Engagement dedicado es solo enterprise.

Así que los conteos son la parte fácil. Aquí están los tres obstáculos con los que chocas en el momento en que quieres más que conteos, en orden creciente de dolor.

Obstáculo 1: la API de Engagement es solo enterprise. La API de Engagement de X devuelve más de 15 métricas de desempeño (impresiones, engagements, favoritos, retweets, citas, respuestas, reproducciones de video) para hasta 250 tweets por solicitud. Pero el acceso tiene que habilitarse para tu app antes de que puedas siquiera llamar a su endpoint público /totals, y esa aprobación pasa por ventas enterprise con precios en los miles por mes. Para la mayoría de los equipos es inviable, e incluso entonces devuelve métricas, no las respuestas y las citas en sí.

Obstáculo 2: obtener las respuestas reales requiere el rodeo de la búsqueda de conversación. No hay un endpoint /tweets/:id/replies en la API pública de X. Para recolectar respuestas consultas la búsqueda reciente con conversation_id:<tweet_id> y filtras por la referencia replied_to. Esto funciona, con dos límites duros: la búsqueda reciente alcanza solo los últimos siete días, y los límites de tasa de pago por uso son apretados. La búsqueda de archivo completo, la única ruta a respuestas más viejas, viene empaquetada con el acceso Enterprise y los niveles legados que X cerró a nuevos registros en 2026, así que para un tweet de más de una semana no puedes obtener las respuestas sin ella. Para contexto sobre esos límites, revisa los límites de tasa de la API de Twitter en 2026.

Obstáculo 3: el endpoint retweeted-by tiene tope y límite de tasa. GET /2/tweets/:id/retweeted_by existe, pero devuelve como máximo los primeros 100 retweeters y está limitado a unas 75 solicitudes por 15 minutos. Para un tweet viral con miles de retweets obtienes una muestra y nada más. El endpoint dedicado de consulta de tweets citados también tiene tope de 100 por página y límite de tasa.

El patrón en los tres: los conteos son baratos, los datos subyacentes están restringidos, acotados en el tiempo, o con tope. Para las razones más profundas detrás de ese precio, revisa por qué la API oficial de X es tan cara.


API oficial de X vs una API de engagement de Twitter dedicada {#official-x-api-vs-a-dedicated-twitter-engagement-api}

La diferencia práctica es la unidad de cobro y el alcance. La API oficial de X cobra por recurso obtenido y restringe las respuestas, las citas y los retweeters subyacentes detrás de ventanas de tiempo, topes y acceso enterprise. Una API de engagement de terceros dedicada cobra por solicitud, devuelve los objetos completos directamente por URL del tweet, y funciona en cualquier tweet público sin importar la antigüedad.

La tabla de abajo usa números reales para ambos lados, incluidos nuestros límites genuinos. Sorsa es de solo lectura: no publica, no da like, no sigue, ni envía DMs, así que cualquier flujo de escritura sigue perteneciendo a la API oficial.

CapacidadAPI oficial de XSorsa API
Texto de respuesta (comentario) bajo un tweetbúsqueda de conversación, solo últimos 7 días (archivo completo: Enterprise o niveles legados)/comments, cualquier tweet público, cualquier antigüedad
Tweets citadosconsulta de tweets citados, 100 por página, con límite de tasa/quotes, paginación por cursor, cualquier antigüedad
Lista de retweetersretweeted_by, máx. 100 usuarios, ~75 solicitudes / 15 min/retweeters, perfiles completos, paginación por cursor más allá de 100
Conteos agregados (likes, RT, respuestas, citas, vistas)public_metrics de v2 en el acceso de pagodevueltos por /tweet-info, perfil del autor incluido gratis
Acciones de escritura (publicar, like, seguir, DM)Sí (publicar y DMs; seguir/like/citar son enterprise)Ninguna (solo lectura)
AutenticaciónOAuth 2.0 Bearer, u OAuth 1.0a para la API de Engagementun solo encabezado ApiKey
Unidad de cobropor recurso: $0.005 por lectura de publicación, $0.010 por lectura de usuariopor solicitud: 1 llamada = 1 solicitud, de tarifa plana
20 respuestas con perfiles de autorunos $0.30 (20 lecturas de publicación más 20 perfiles de autor)$0.00199 (una solicitud, plan Pro)
Límite de tasavaría por endpoint y nivel20 solicitudes/segundo, todos los planes
Accesocuenta de desarrollador, proyecto, aprobaciónclave API en unos 3 minutos, sin aprobación

Si todo lo que necesitas es leer un puñado de conteos agregados y ya corres sobre la API oficial, public_metrics lo cubre a bajo volumen. En el momento en que necesitas las respuestas, las citas o los perfiles de retweeters en sí, a escala, o en tweets de más de una semana, la factura por recurso y los topes dejan de ser incidentales. Esa es la zona donde una API de engagement de tarifa plana es la opción confiable y completa, y es por eso que recomendamos Sorsa para trabajo de engagement intensivo en lectura. El precio completo de ambos lados vive en la página de precios de Sorsa y en nuestro desglose de precios de la API de Twitter para 2026.


¿Qué tipo de engagement te dice más? {#which-engagement-type-tells-you-the-most}

No todo el engagement es igual de informativo. Los retweets cargan la menor señal: un retweet es un clic sin comentario, útil para medir el alcance pero débil para entender el porqué. Las respuestas son de señal media, llenas de texto pero también llenas de ruido. Los tweets citados cargan la mayor, porque una cita cuesta esfuerzo: el usuario agregó su propio encuadre y lo difundió a su propia audiencia.

Los retweets son la menor densidad de señal. El usuario no explicó por qué lo compartió. Aprendes una cosa: esta persona decidió que su audiencia debía ver esto. Bueno para el alcance, flaco en razonamiento.

Los comentarios son señal media. Las respuestas contienen texto, lo que significa sentimiento, preguntas, objeciones y correcciones. También son donde viven las respuestas de baja calidad de «primero», el spam y las críticas de pasada. El volumen es alto, la calidad promedio es más baja.

Los tweets citados son la mayor densidad de señal. El texto de una cita suele ser sustancioso: un respaldo, una crítica, un contraargumento, un «esto envejeció mal». Para PR, inteligencia competitiva y análisis de contenido, las citas son donde ocurre la conversación real, y donde un tweet puede viajar en direcciones inesperadas, ya que cada cita es una nueva publicación de nivel superior en el feed de quien cita.

Cuando construimos dashboards de engagement, ponderamos los tweets citados muy por encima de los comentarios y los retweets para el análisis cualitativo. El ratio exacto no importa; el punto es que el volumen y la importancia corren en direcciones opuestas a lo largo de estos tres tipos.


¿Cómo obtener las métricas de engagement de un tweet? {#how-do-you-get-a-tweets-engagement-metrics}

Las métricas de engagement de un tweet (likes, retweets, respuestas, citas, vistas, guardados) vienen de una sola llamada de consulta de tweet que devuelve el objeto del tweet con sus conteos adjuntos. Los números agregados son el dato más barato de obtener; el trabajo más profundo empieza cuando quieres las personas y el texto detrás de ellos. Obtén la instantánea primero, luego profundiza.

El endpoint de datos de tweet devuelve el objeto de tweet completo, autor incluido; para una mirada más profunda a leer y comparar esos números, revisa la guía de la API de métricas de tweets.

python
import requests

API_KEY = "YOUR_API_KEY"
BASE = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": API_KEY, "Content-Type": "application/json"}


def get_tweet(tweet_link: str) -> dict:
    resp = requests.post(
        f"{BASE}/tweet-info",
        headers=HEADERS,
        json={"tweet_link": tweet_link},
    )
    resp.raise_for_status()
    return resp.json()


tweet = get_tweet("https://x.com/elonmusk/status/1234567890")

print(f"Author:    @{tweet['user']['username']}")
print(f"Text:      {tweet['full_text'][:100]}")
print(f"Likes:     {tweet.get('likes_count', 0):,}")
print(f"Retweets:  {tweet.get('retweet_count', 0):,}")
print(f"Quotes:    {tweet.get('quote_count', 0):,}")
print(f"Replies:   {tweet.get('reply_count', 0):,}")
print(f"Views:     {tweet.get('view_count', 0):,}")
print(f"Bookmarks: {tweet.get('bookmark_count', 0):,}")

Para métricas de muchos tweets a la vez, usa el endpoint de tweets por lote, que acepta hasta 100 IDs de tweet por solicitud y cuenta como una sola llamada. En el plan Pro eso lleva el costo por tweet a aproximadamente $0.00002, lo que importa cuando analizas miles de publicaciones.


¿Cómo obtener todas las respuestas a un tweet? {#how-do-you-get-all-the-replies-to-a-tweet}

Las respuestas a un tweet se recuperan paginando a través del hilo de comentarios bajo ese tweet. La API oficial de X no tiene endpoint de respuestas, así que las respuestas vienen de una búsqueda de conversación limitada a los últimos siete días. Un endpoint de comentarios dedicado, en cambio, devuelve los objetos de respuesta completos (texto, autor, métricas) para cualquier tweet público, página por página, sin límite de antigüedad.

El endpoint Tweet Comments devuelve hasta 20 respuestas por página y acepta un order_by de Relevance, Recency o Likes. Itera sobre next_cursor para extraer todas las respuestas.

python
def get_comments(tweet_link, order="Relevance", max_pages=None):
    comments, cursor, pages = [], None, 0
    while True:
        payload = {"tweet_link": tweet_link, "order_by": order}
        if cursor:
            payload["next_cursor"] = cursor
        data = requests.post(f"{BASE}/comments", headers=HEADERS, json=payload).json()
        comments.extend(data.get("tweets", []))
        cursor = data.get("next_cursor")
        pages += 1
        if not cursor or (max_pages and pages >= max_pages):
            break
    return comments


replies = get_comments("https://x.com/user/status/123", order="Likes", max_pages=10)
print(f"Pulled {len(replies)} replies")

Qué puedes hacer con los datos de respuestas

Cada respuesta es un objeto de tweet completo: texto, métricas de engagement y perfil del autor. Eso desbloquea varios patrones:

  • Clasificación de sentimiento e intención. Pasa el texto de la respuesta por un modelo de sentimiento o un LLM para separar elogios, quejas y preguntas. La guía de análisis de sentimiento de Twitter recorre el pipeline de recolección y clasificación.
  • Triaje de soporte. Filtra las respuestas que contienen un signo de interrogación o una frase de intención conocida y enrútalas a una cola de soporte.
  • Hacer emerger influencers. Ordena a quienes responden por followers_count para encontrar qué cuentas notables interactuaron en el hilo.
  • Filtrado de spam. Descarta antes del análisis las respuestas de cuentas creadas en la última semana con seguidores cercanos a cero; las mismas heurísticas impulsan las auditorías de cuentas falsas y de bots a nivel del grafo de seguidores.

¿Cómo obtener los tweets citados de un tweet? {#how-do-you-get-the-quote-tweets-for-a-tweet}

Los tweets citados se recuperan como objetos de tweet completos, porque una cita es una nueva publicación que incrusta el original y agrega el comentario propio de quien cita. La API oficial de X expone una consulta de tweets citados con tope de 100 por página y límite de tasa. Un endpoint de citas dedicado pagina sin ese tope y funciona en tweets de cualquier antigüedad.

El endpoint Quote Tweets devuelve hasta 20 citas por página; paginación con next_cursor.

python
def get_quotes(tweet_link, max_pages=None):
    quotes, cursor, pages = [], None, 0
    while True:
        payload = {"tweet_link": tweet_link}
        if cursor:
            payload["next_cursor"] = cursor
        data = requests.post(f"{BASE}/quotes", headers=HEADERS, json=payload).json()
        quotes.extend(data.get("tweets", []))
        cursor = data.get("next_cursor")
        pages += 1
        if not cursor or (max_pages and pages >= max_pages):
            break
    return quotes

Analizar tweets citados por alcance y tono

Como cada cita lleva el conteo de seguidores de su autor y su propio texto, puedes ordenar las citas por la audiencia que alcanzaron y leer el encuadre arriba:

python
quotes = get_quotes("https://x.com/user/status/123", max_pages=10)

top = sorted(
    quotes,
    key=lambda q: q.get("user", {}).get("followers_count", 0),
    reverse=True,
)[:10]

for q in top:
    u = q["user"]
    print(f"@{u['username']} ({u.get('followers_count', 0):,} followers): {q['full_text'][:90]}")

Para el monitoreo de marca, este es el lugar correcto para empezar. Una cita de un periodista con 200k seguidores o de un ejecutivo competidor es exactamente el tipo de señal que debería disparar una alerta de Slack. Un patrón común es un umbral (conteo de seguidores de quien cita por encima de 50k, o quien cita en una lista curada de la industria) que enruta esas citas a un canal de revisión para un flujo de monitoreo en vivo.


¿Cómo ver quién hizo retweet de un tweet? {#how-do-you-see-who-retweeted-a-tweet}

Los retweeters de un tweet se devuelven como perfiles de usuario, ya que un retweet no tiene texto independiente. La API oficial de X pone un tope de 100 usuarios por tweet en retweeted_by y lo limita a unas 75 solicitudes por 15 minutos, así que en un tweet viral solo llegas a ver una muestra. Un endpoint de retweeters dedicado pagina más allá de 100 y devuelve perfiles completos en lugar de IDs pelones.

El endpoint Retweeters List devuelve perfiles de usuario, del más nuevo al más viejo, con next_cursor para la siguiente página.

python
def get_retweeters(tweet_link, max_pages=None):
    users, cursor, pages = [], None, 0
    while True:
        payload = {"tweet_link": tweet_link}
        if cursor:
            payload["next_cursor"] = cursor
        data = requests.post(f"{BASE}/retweeters", headers=HEADERS, json=payload).json()
        users.extend(data.get("users", []))
        cursor = data.get("next_cursor")
        pages += 1
        if not cursor or (max_pages and pages >= max_pages):
            break
    return users

Análisis de audiencia a partir de los retweeters

Los retweeters son la forma más limpia de perfilar quién amplifica una cuenta. Cada entrada es un objeto de usuario completo, así que puedes resumir la audiencia que compartió un tweet:

python
retweeters = get_retweeters("https://x.com/user/status/123", max_pages=20)

verified = [u for u in retweeters if u.get("verified")]
big = [u for u in retweeters if u.get("followers_count", 0) > 10_000]

print(f"{len(retweeters)} retweeters, {len(verified)} verified, {len(big)} with 10k+ followers")

Para llevar los mismos perfiles más lejos (geografía, antigüedad de cuenta, solapamiento de seguidores-de-seguidores), empareja esto con los endpoints del grafo completo de seguidores.


Construir un reporte completo de engagement para un tweet {#building-a-full-engagement-report-for-one-tweet}

Un reporte completo de engagement combina una instantánea de métricas con una muestra de cada tipo de engagement, así que el alcance y la reacción de un solo tweet aterrizan en un solo objeto. Extrae los conteos, luego las respuestas, las citas y los retweeters, y resúmelos juntos.

python
def engagement_report(tweet_link):
    tweet = get_tweet(tweet_link)
    comments = get_comments(tweet_link, max_pages=5)
    quotes = get_quotes(tweet_link, max_pages=5)
    retweeters = get_retweeters(tweet_link, max_pages=5)

    print(f"Tweet by @{tweet['user']['username']}")
    print(f"  likes={tweet.get('likes_count', 0):,}  "
          f"retweets={tweet.get('retweet_count', 0):,}  "
          f"quotes={tweet.get('quote_count', 0):,}  "
          f"replies={tweet.get('reply_count', 0):,}")
    print(f"Sampled {len(comments)} replies, {len(quotes)} quotes, "
          f"{len(retweeters)} retweeters")

    top_quotes = sorted(
        quotes,
        key=lambda q: q.get("user", {}).get("followers_count", 0),
        reverse=True,
    )[:5]
    for q in top_quotes:
        u = q["user"]
        print(f"  quote @{u['username']} ({u.get('followers_count', 0):,}): {q['full_text'][:70]}")

    return {
        "tweet": tweet,
        "comments": comments,
        "quotes": quotes,
        "retweeters": retweeters,
    }

Cinco páginas de cada tipo es una muestra, no el hilo completo. Sube max_pages o quítalo para paginar todo. En un plan de tarifa plana eso es una decisión de presupuesto, no una pelea con el límite de tasa: cada página es una solicitud contra el mismo techo de 20 por segundo.


Comparar el engagement entre varios tweets {#comparing-engagement-across-multiple-tweets}

Comparar el engagement entre tweets es más eficiente con una llamada de métricas por lote: una solicitud devuelve los conteos para hasta 100 tweets, y derivas los ratios en memoria. El hallazgo útil rara vez es qué tweet ganó en engagement bruto; es qué tweet tuvo una forma distinta de engagement.

python
def get_metrics_bulk(tweet_links):
    data = requests.post(
        f"{BASE}/tweet-info-bulk",
        headers=HEADERS,
        json={"tweet_links": tweet_links},
    ).json()
    return data.get("tweets", [])


def compare_tweets(tweet_links):
    rows = []
    for t in get_metrics_bulk(tweet_links):
        likes = t.get("likes_count", 0) or 1
        rows.append({
            "id": t["id"],
            "likes": t.get("likes_count", 0),
            "replies": t.get("reply_count", 0),
            "quotes": t.get("quote_count", 0),
            "retweets": t.get("retweet_count", 0),
            "reply_to_like": round(t.get("reply_count", 0) / likes, 3),
            "quote_to_like": round(t.get("quote_count", 0) / likes, 3),
        })
    return sorted(rows, key=lambda r: r["reply_to_like"], reverse=True)

Un tweet con un ratio alto de respuestas a likes es de los que inician conversación. Un ratio alto de citas a likes a menudo señala algo controvertido: bueno para la visibilidad, a veces malo para la marca. Un ratio alto de retweets a respuestas es contenido de difusión, agradable y compartible pero no impulsa la discusión. Esos ratios te dicen más sobre la estrategia de contenido que cualquier conteo individual.


¿Cuánto cuesta la extracción de engagement a escala? {#what-does-engagement-extraction-cost-at-scale}

La extracción de engagement se dispara rápido: un solo tweet viral podría cargar 50,000 respuestas, y auditar la línea de tiempo completa de una marca puede llegar a decenas de miles de llamadas. Dos cosas mantienen eso costeable en un plan de tarifa plana: cada endpoint cuenta como una solicitud sin importar lo que devuelva, y una sola llamada por lote cubre hasta 100 tweets.

En el plan Pro obtienes 100,000 solicitudes por $199 al mes, suficiente para millones de tweets cuando te apoyas en los endpoints por lote, ya que una llamada por lote de hasta 100 tweets cuenta como una sola solicitud. La API oficial de X toma otra forma: las cuentas de pago por uso tienen un tope de 2 millones de lecturas de publicación al mes y cobran $0.005 por lectura de publicación más $0.010 por perfil de autor, así que una carga de engagement intensiva en lectura choca contra un techo duro y una factura que sube rápido. El modelo de tarifa plana no tiene cargo por recurso ni tope de 2 millones.

Un universal de 20 solicitudes por segundo aplica a cada endpoint de Sorsa y a cada plan. Sin ventanas por endpoint, sin reinicios de 15 minutos, sin caídas sorpresa. Chócalo y obtienes un 429; espera un segundo y reintenta. Para una auditoría profunda (paginar a través de 50,000 respuestas, digamos) sostienes eso espaciando las solicitudes a intervalos de 50ms o usando un semáforo pequeño, y hay límites más altos disponibles a pedido.


¿Cómo verificar que un usuario específico interactuó? {#how-do-you-verify-a-specific-user-engaged}

Verificar el engagement de un solo usuario es una pregunta distinta de listar a todos los que interactuaron. Paginar a través de cada retweeter para encontrar un nombre de usuario desperdicia llamadas. Los endpoints de verificación dedicados devuelven un sí/no en una solicitud, que es la herramienta correcta para revisiones de sorteos, cumplimiento de campañas y programas de embajadores.

Para la verificación de sorteos y campañas a escala, tres endpoints responden los casos comunes, cada uno una solicitud sin importar cuántos comentarios, citas o retweets existan:

  • /check-comment: ¿este usuario respondió al tweet?
  • /check-quoted: ¿este usuario citó el tweet?
  • /check-retweet: ¿este usuario hizo retweet del tweet?
python
def did_user_comment(tweet_link, username):
    resp = requests.get(
        f"{BASE}/check-comment",
        headers=HEADERS,
        params={"tweet_link": tweet_link, "username": username},
    )
    return resp.json().get("commented", False)

Para una campaña con 2,000 participantes y tres acciones requeridas, eso son 6,000 llamadas, bien dentro del plan Starter. El patrón completo, incluidas las revisiones de follow, vive en nuestra guía de verificación de engagement de Twitter.


Exportar datos de engagement {#exporting-engagement-data}

Los endpoints de engagement devuelven JSON, pero la mayor parte del análisis ocurre en hojas de cálculo, dataframes o bases de datos. Un exportador de CSV mínimo para respuestas, reutilizable para citas (también objetos de tweet), te lleva a un archivo funcional rápido.

python
import csv


def export_comments_csv(comments, path="comments.csv"):
    fields = [
        "comment_id", "created_at", "full_text",
        "likes", "retweets", "reply_count",
        "author_username", "author_followers", "author_verified",
    ]
    with open(path, "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=fields)
        writer.writeheader()
        for c in comments:
            u = c.get("user", {})
            writer.writerow({
                "comment_id": c["id"],
                "created_at": c["created_at"],
                "full_text": c["full_text"],
                "likes": c.get("likes_count", 0),
                "retweets": c.get("retweet_count", 0),
                "reply_count": c.get("reply_count", 0),
                "author_username": u.get("username", ""),
                "author_followers": u.get("followers_count", 0),
                "author_verified": u.get("verified", False),
            })

Para retweeters, cambia los campos a atributos de usuario (username, display_name, followers_count, verified, created_at). Para trabajos más grandes, escribe a una base de datos en su lugar: Postgres con una columna jsonb para el payload crudo más unas cuantas columnas indexadas (tweet_id, author_id, created_at, likes_count) maneja decenas de millones de filas cómodamente. Si estás uniendo datos de engagement con otras señales sociales a lo largo del tiempo, la guía de datos históricos de Twitter cubre los patrones de archivado.


En la práctica: extracción de respuestas para una war-room de lanzamiento {#in-practice-reply-extraction-for-a-launch-war-room}

Un equipo de analítica social de unas 12 personas llegó a nosotros operando war-rooms de lanzamiento para marcas de consumo. Su dolor era la extracción de respuestas bajo los tweets de sus clientes durante los lanzamientos de producto, el filo en vivo de la escucha social. La búsqueda de conversación oficial solo alcanzaba siete días, así que cualquier retrospectiva de un lanzamiento de más de una semana era imposible, y el cobro por recurso durante un lanzamiento en vivo hacía el gasto diario difícil de pronosticar.

Movieron las extracciones de respuestas, citas y retweeters a tres llamadas de endpoint en un plan de tarifa plana. Dos cosas cambiaron. El historial alcanzable pasó de siete días al archivo público completo, así que las retrospectivas post-lanzamiento dejaron de ser un callejón sin salida. Y como Sorsa cobra por solicitud en lugar de por recurso, la porción de lectura de su factura cayó al rango que el precio de tarifa plana por solicitud produce contra los costos por recurso para este tipo de volumen, hasta 50 veces más barato en trabajo intensivo en lectura. La victoria no fue un truco ingenioso; fue quitar la ventana de tiempo y el medidor por ítem.


Preguntas frecuentes {#frequently-asked-questions}

¿Se pueden obtener todas las respuestas a un tweet con la API de Twitter?

No directamente con la API oficial de X, que no tiene endpoint de respuestas. El rodeo disponible es una consulta de búsqueda reciente sobre conversation_id, limitada a los últimos siete días a menos que tengas acceso Enterprise de archivo completo. Una API de terceros como Sorsa expone un endpoint directo de comentarios que devuelve respuestas para cualquier tweet público con paginación por cursor, sin importar la antigüedad del tweet.

¿Cuál es la diferencia entre un retweet y un tweet citado?

Un retweet redistribuye el tweet original tal cual, sin texto agregado, así que las APIs devuelven solo el perfil de quien hizo retweet. Un tweet citado es un nuevo tweet que incrusta el original y agrega el comentario propio de quien cita, así que regresa como un objeto de tweet completo con su propio texto, conteos de engagement y autor. Para el análisis, las citas son mucho más informativas que los retweets.

¿Cómo ver quién hizo retweet de un tweet?

El endpoint retweeted_by de la API oficial de X devuelve a los retweeters pero pone un tope de 100 usuarios por tweet y limita las llamadas a unas 75 por 15 minutos, así que en tweets virales solo obtienes una muestra. El endpoint de retweeters de Sorsa pagina más allá de ese tope con next_cursor y devuelve perfiles de usuario completos, no solo IDs numéricos.

¿La API de X muestra los comentarios de un tweet?

La API oficial de X no tiene un endpoint de comentarios-de-un-tweet. Las respuestas solo se alcanzan a través del endpoint de búsqueda usando conversation_id, que en el acceso de pago por uso solo alcanza los últimos siete días. Esto sorprende a la mayoría de los desarrolladores que vienen de otras plataformas sociales, donde obtener los comentarios de una publicación es una operación de primera clase.

¿Cuántas respuestas puede devolver la API por solicitud?

Los endpoints de comentarios, citas y retweeters de Sorsa devuelven hasta 20 resultados por página, y la paginación a través de next_cursor no tiene límite, así que puedes obtener cada respuesta de un tweet de cualquier antigüedad en un bucle. La búsqueda reciente de la API oficial de X devuelve hasta 100 resultados por página pero está restringida por los límites de tasa de solicitudes y la ventana de siete días.

¿Se pueden obtener datos de engagement de tweets viejos?

Con Sorsa, sí: los endpoints de comentarios, citas y retweeters funcionan en cualquier tweet público sin importar la antigüedad. Con la API oficial de X, las respuestas solo se pueden recuperar para tweets publicados en los últimos siete días a menos que tengas la búsqueda Enterprise de archivo completo, que requiere aprobación y un costo significativo. Los conteos agregados de un tweet viejo siguen disponibles de cualquier forma.

¿Hay una forma gratuita de obtener datos de engagement de tweets?

La API oficial de X no tiene un nivel gratuito en 2026, y su modelo de pago por uso cobra desde la primera llamada, así que leer datos de engagement (publicaciones más perfiles de autor) suma rápido. Sorsa le da a cada cuenta nueva 100 solicitudes gratis: por única vez, sin tarjeta requerida, nunca expiran y cubren los 40 endpoints, lo que alcanza para extraer respuestas, citas y retweeters en tweets reales antes de comprometerte con un plan. El playground de Sorsa API también corre los endpoints desde tu navegador, así que puedes inspeccionar los datos antes de escribir código.

¿Cómo calcular la tasa de engagement a partir de los datos de la API?

La tasa de engagement suele ser (likes + respuestas + retweets + citas) dividido entre las impresiones, o dividido entre el conteo de seguidores cuando las impresiones no están disponibles. El campo view_count en un objeto de tweet aporta las impresiones para publicaciones desde diciembre de 2022. Para calcularla a lo largo de los tweets recientes de una cuenta sin escribir código, usa la calculadora gratuita de tasa de engagement.


Cómo empezar {#getting-started}

Para probar esto en tus propios tweets:

  1. Regístrate y obtén una clave API en unos tres minutos, sin aprobación de cuenta de desarrollador. Cada cuenta empieza con 100 solicitudes gratis: por única vez, sin tarjeta requerida, nunca expiran y cubren los 40 endpoints, suficiente para hasta 10,000 tweets o 20,000 perfiles vía lote. El uso de pago se mantiene barato por lote, desde $0.02 por cada 1,000 tweets y desde $0.01 por cada 1,000 perfiles, y cada plan incluye todos los endpoints a 20 solicitudes por segundo.
  2. Prueba los endpoints sin código en el playground interactivo de la API, o lee las especificaciones completas en la documentación de Sorsa API.
  3. Pega el código de esta guía en un script de Python, cambia tu URL de tweet, y corre.

Si estás moviendo un pipeline existente fuera de la API oficial de X, la guía de migración mapea los cambios de solicitud endpoint por endpoint. Para volumen por encima de los planes listados, habla con ventas sobre un límite de tasa personalizado. Las preguntas son bienvenidas en Discord o en contacts@sorsa.io.


Revisado por Keksich, fundador de Sorsa, marketer e investigador de la API de X.

Esta guía fue escrita y verificada por el equipo de Sorsa Editorial y revisada por última vez en julio de 2026. Se apoya en nuestro propio trabajo construyendo y operando una API alternativa de Twitter/X en producción desde 2022, en probar los endpoints descritos aquí contra la API en vivo, y en la documentación pública vigente: los docs de Sorsa API para el comportamiento y los límites de los endpoints, y la documentación oficial de desarrolladores de X para la API de Engagement y el endpoint retweeted-by. Las cifras de costo de la API oficial de X se verificaron contra el precio por recurso publicado de X según la actualización de abril de 2026; el modelo de acceso de X y los detalles de historia de la plataforma (sin nivel gratuito, búsqueda de archivo completo ahora solo Enterprise, conteos de vistas públicos desde diciembre de 2022, likes privados en toda la plataforma desde junio de 2024) se verificaron contra los reportes vigentes y la documentación de X; los nombres de endpoints, los parámetros y los campos de respuesta se re-verificaron contra la Sorsa API en vivo. Más sobre el equipo está en nuestra página About.