> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sorsa.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Datos históricos

Sorsa API permite consultar el archivo de datos públicos de X (antes Twitter) desde marzo de 2006. La recuperación histórica utiliza los mismos endpoints, autenticación y paginación que los datos recientes. No requiere un nivel separado de acceso al archivo, un contrato Enterprise ni una ventana temporal restringida. Las consultas consumen la misma cuota que las demás llamadas, por lo que puedes probarlas con las 100 solicitudes gratuitas de cada cuenta, sin tarjeta.

Esta página explica los dos endpoints para datos históricos, qué información expone la plataforma y cómo trabajar con grandes volúmenes.

> **Nota:** consulta una comparación de métodos, exportación a CSV y más código en la [guía de datos históricos de Twitter](https://api.sorsa.io/blog/historical-twitter-data).

***

## Endpoints

| Endpoint                 | Uso                                                         | Paginación    | Tamaño de página      |
| :----------------------- | :---------------------------------------------------------- | :------------ | :-------------------- |
| `POST /v3/search-tweets` | Búsqueda histórica por palabras clave, fechas e interacción | `next_cursor` | Unas 20 publicaciones |
| `POST /v3/user-tweets`   | Historial completo de una cuenta                            | `next_cursor` | Unas 20 publicaciones |

`/search-tweets` admite los [operadores de X](https://docs.sorsa.io/es/search-operators), incluidos `since:`, `until:`, `from:`, `to:`, `min_faves:`, `min_retweets:`, `lang:` y `filter:`, dentro de `query`. `/user-tweets` acepta un identificador (`user_link`, `username` o `user_id`) y devuelve la cronología sin filtros de consulta.

***

## Búsqueda histórica por palabras clave

Utiliza `/search-tweets` para buscar publicaciones de cualquier usuario que coincidan con una consulta en un intervalo. Envía la consulta con las fechas en el cuerpo JSON:

```python theme={null}
import requests, time

API_KEY = "YOUR_API_KEY"
URL = "https://api.sorsa.io/v3/search-tweets"

def search_archive(query, max_pages=50):
    all_tweets, next_cursor = [], None
    for _ in range(max_pages):
        body = {"query": query, "order": "latest"}
        if next_cursor:
            body["next_cursor"] = next_cursor

        resp = requests.post(
            URL,
            headers={"ApiKey": API_KEY, "Content-Type": "application/json"},
            json=body,
        )
        resp.raise_for_status()
        data = resp.json()

        all_tweets.extend(data.get("tweets", []))
        next_cursor = data.get("next_cursor")
        if not next_cursor:
            break
        time.sleep(0.1)
    return all_tweets


tweets = search_archive('"climate change" since:2015-06-01 until:2015-12-31 lang:en min_faves:10')
```

`order` acepta `"latest"` (orden cronológico) o `"popular"` (por interacción). Para recopilar un intervalo histórico utiliza `"latest"`; para investigar contenido, `"popular"` muestra primero las publicaciones con más interacción.

***

## Cronología completa de una cuenta

Utiliza `/user-tweets` para obtener el historial de una cuenta de más reciente a más antiguo, sin un límite de 3.200 publicaciones.

```python theme={null}
resp = requests.post(
    "https://api.sorsa.io/v3/user-tweets",
    headers={"ApiKey": API_KEY, "Content-Type": "application/json"},
    json={"user_link": "https://x.com/naval"},
)
```

Proporciona exactamente uno de estos identificadores: `user_link`, `username` o `user_id`. Recorre las páginas con `next_cursor` hasta que sea nulo. El orden es cronológico inverso.

Para un intervalo de fechas de una cuenta, utiliza `/search-tweets` con `from:`, por ejemplo `from:naval since:2020-01-01 until:2021-01-01`. `/user-tweets` no admite filtros de fecha.

***

## Datos que puedes recuperar

Las publicaciones históricas incluyen los mismos campos que las recientes:

* Texto completo, sin recortes ni sustitución de URL.
* Las seis métricas: `likes_count`, `retweet_count`, `reply_count`, `quote_count`, `view_count` y `bookmark_count`.
* Objeto `user` con el perfil completo del autor.
* Array `entities` con URL multimedia (fotos, vídeos y GIF) y vistas previas de enlaces.
* Metadatos de conversación: `conversation_id_str`, `in_reply_to_tweet_id`, `is_reply` e `is_quote_status`.
* Código de idioma: `lang`.

Consulta todos los campos en [Formato de respuesta](https://docs.sorsa.io/es/response-format).

***

## Limitaciones de la plataforma

Son restricciones de X, no específicas de Sorsa. Ninguna API pública puede evitarlas.

* **Las publicaciones eliminadas** desaparecen del índice de búsqueda y no se pueden recuperar.
* **Las cuentas protegidas** se excluyen de búsquedas y cronologías públicas.
* **Los perfiles no son históricos.** Una publicación de 2014 devuelve la biografía, el nombre y los seguidores actuales de su autor, no los de 2014.
* **Las métricas no son instantáneas históricas.** Los contadores de Me gusta, retuits y visualizaciones reflejan los totales actuales. Si necesitas valores de una fecha concreta, recopila y guarda las métricas mediante [Supervisión en tiempo real](https://docs.sorsa.io/es/real-time-monitoring).

***

## Buenas prácticas

### Divide los intervalos grandes

Una consulta que cubre varios años dificulta los reintentos y la auditoría por periodos. Divide por meses las recopilaciones anuales y por semanas los acontecimientos de gran actividad.

```python theme={null}
def monthly_chunks(year):
    out = []
    for month in range(1, 13):
        since = f"{year}-{month:02d}-01"
        nm = month + 1 if month < 12 else 1
        ny = year if month < 12 else year + 1
        until = f"{ny}-{nm:02d}-01"
        out.append((since, until))
    return out

for since, until in monthly_chunks(2020):
    tweets = search_archive(f'bitcoin since:{since} until:{until} lang:en min_faves:50')
```

### Reduce el ruido de los retuits

Las búsquedas históricas populares pueden incluir oleadas de retuits nativos que ocultan el contenido original. Añade `-filter:nativeretweets` para investigar sentimiento, opiniones o patrones de contenido. Utiliza `-filter:retweets` para excluir también los retuits antiguos con `RT @user:`.

### Combina interacción y fechas

Combinar `since:` y `until:` con `min_faves:` o `min_retweets:` reduce el ruido y las solicitudes. Ejemplo:

```text theme={null}
"product launch" since:2022-03-01 until:2022-03-31 min_faves:100 -filter:retweets lang:en
```

### Divide los temas globales por idioma

En acontecimientos mundiales, las consultas separadas por `lang:` generan conjuntos más claros por idioma que las consultas mezcladas.

### Continúa hasta agotar el cursor

Detente solo cuando `next_cursor` sea nulo, vacío o no aparezca. No termines porque una página tenga pocos resultados. Consulta [Paginación](https://docs.sorsa.io/es/pagination).

***

## Guías relacionadas

* [Búsqueda de publicaciones](https://docs.sorsa.io/es/search-tweets): referencia de `/search-tweets`.
* [Operadores de búsqueda](https://docs.sorsa.io/es/search-operators): diccionario completo.
* [Paginación](https://docs.sorsa.io/es/pagination): cursores.
* [Supervisión en tiempo real](https://docs.sorsa.io/es/real-time-monitoring): combina la recuperación histórica con nuevas publicaciones.
* [Seguimiento de menciones](https://docs.sorsa.io/es/search-mentions): menciones históricas de cuentas.
* [Optimización del uso de la API](https://docs.sorsa.io/es/optimizing-api-usage): reduce solicitudes en recopilaciones grandes.
