Saltar al contenido principal
Cada respuesta en X pertenece a un hilo de conversación. El campo conversation_id te permite identificar, hacer seguimiento y reconstruir árboles de conversación completos.

Cómo funciona

Cuando alguien publica y otras personas responden, todas las respuestas comparten el mismo conversation_id, el identificador de la Publicación original que inició la conversación.
Publicación original (ID: 1234567890)  ← conversation_id para todas las respuestas
├── Respuesta 1 (ID: 1234567891)    → conversation_id: 1234567890
│   └── Respuesta a la Respuesta 1        → conversation_id: 1234567890
└── Respuesta 2 (ID: 1234567892)    → conversation_id: 1234567890
    └── Respuesta a la Respuesta 2        → conversation_id: 1234567890
No importa lo profundo que sea el hilo, todas las Publicaciones comparten el mismo conversation_id.

Solicitar conversation_id

Agrega conversation_id a tus tweet.fields:
curl "https://api.x.com/2/tweets/1234567891?tweet.fields=conversation_id,in_reply_to_user_id,referenced_tweets" \
  -H "Authorization: Bearer $TOKEN"
Respuesta:
{
  "data": {
    "id": "1234567891",
    "text": "@user Great point!",
    "conversation_id": "1234567890",
    "in_reply_to_user_id": "2244994945",
    "referenced_tweets": [{
      "type": "replied_to",
      "id": "1234567890"
    }]
  }
}

Obtener una conversación completa

Usa conversation_id como operador de búsqueda para recuperar todas las publicaciones del hilo:
curl "https://api.x.com/2/tweets/search/recent?\
query=conversation_id:1234567890&\
tweet.fields=author_id,created_at,in_reply_to_user_id&\
expansions=author_id" \
  -H "Authorization: Bearer $TOKEN"
Devuelve todas las respuestas a la Publicación original, ordenadas en orden cronológico inverso.

Casos de uso

Reconstruye el árbol completo de la conversación:
import requests

conversation_id = "1234567890"
url = f"https://api.x.com/2/tweets/search/recent"
params = {
    "query": f"conversation_id:{conversation_id}",
    "tweet.fields": "author_id,in_reply_to_user_id,referenced_tweets,created_at",
    "max_results": 100
}

response = requests.get(url, headers=headers, params=params)
replies = response.json()["data"]

# Ordena por created_at para obtener el orden cronológico
replies.sort(key=lambda x: x["created_at"])

CampoDescripción
conversation_idID de la publicación original que inició el hilo
in_reply_to_user_idID de usuario de la publicación a la que se responde
referenced_tweetsArray con type: "replied_to" y el ID de la publicación principal

Ejemplo: recuperación de todo el hilo

{
  "data": [
    {
      "id": "1234567893",
      "text": "@user2 @user1 I agree with you both!",
      "conversation_id": "1234567890",
      "author_id": "3333333333",
      "created_at": "2024-01-15T12:05:00.000Z",
      "in_reply_to_user_id": "2222222222",
      "referenced_tweets": [{"type": "replied_to", "id": "1234567892"}]
    },
    {
      "id": "1234567892",
      "text": "@user1 That's interesting!",
      "conversation_id": "1234567890",
      "author_id": "2222222222",
      "created_at": "2024-01-15T12:03:00.000Z",
      "in_reply_to_user_id": "1111111111",
      "referenced_tweets": [{"type": "replied_to", "id": "1234567890"}]
    },
    {
      "id": "1234567891",
      "text": "@user1 Great point!",
      "conversation_id": "1234567890",
      "author_id": "4444444444",
      "created_at": "2024-01-15T12:02:00.000Z",
      "in_reply_to_user_id": "1111111111",
      "referenced_tweets": [{"type": "replied_to", "id": "1234567890"}]
    }
  ],
  "meta": {
    "result_count": 3
  }
}

Notas

  • El conversation_id de la Publicación original es igual a su id
  • conversation_id está disponible en todos los endpoints v2 que devuelven Publicaciones
  • Úsalo con filtered stream para supervisar conversaciones en tiempo real
  • Combínalo con pagination para hilos largos

Próximos pasos

Buscar publicaciones

Busca por conversation_id.

Flujo filtrado

Supervisa conversaciones en tiempo real.