> ## 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.

# Artigos do X

Obtenha conteúdo e metadados de um artigo público do X em uma chamada. Artigos são posts longos, com capa, texto formatado de até aproximadamente 100.000 caracteres e métricas próprias, separadas da publicação que os anuncia.

> **Teste grátis:** `/article` funciona com as primeiras 100 requisições, sem cartão nem validade. Cada artigo custa uma chamada, sem cobrança por caractere: até 100 artigos completos gratuitamente.

> Veja o [guia de artigos do X](https://api.sorsa.io/blog/x-articles-api).

## Início rápido

```bash theme={null}
curl -X POST https://api.sorsa.io/v3/article \
  -H "ApiKey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tweet_link": "https://x.com/SorsaApp/status/1234567890"}'
```

```python theme={null}
import requests

API_KEY = "YOUR_API_KEY"

def get_article(tweet_link):
    resp = requests.post(
        "https://api.sorsa.io/v3/article",
        headers={"ApiKey": API_KEY, "Content-Type": "application/json"},
        json={"tweet_link": tweet_link},
        timeout=30,
    )
    resp.raise_for_status()
    return resp.json()


article = get_article("https://x.com/SorsaApp/status/1234567890")
print(f"Author: @{article['author']['username']}")
print(f"Published: {article['published_at']}")
print(f"Views: {article['views_count']:,}")
print(f"Body length: {len(article['full_text'])} characters")
```

## Endpoint

```text theme={null}
POST /v3/article
```

### Corpo da requisição

| Parâmetro    | Tipo   | Obrigatório | Descrição                                        |
| :----------- | :----- | :---------- | :----------------------------------------------- |
| `tweet_link` | string | Sim         | URL da publicação de anúncio ou seu ID numérico. |

### Resposta

```json theme={null}
{
  "full_text": "this isn't a cosmetic rebrand. it's a response to how crypto twitter actually works in 2026...",
  "preview_text": "this isn't a cosmetic rebrand. it's a response to how crypto twitter actually works in 2026.\nthe old model was simple...",
  "cover_image_url": "https://pbs.twimg.com/media/G-t2hYTaIAAstc8.jpg",
  "published_at": "2026-01-15T16:24:02Z",
  "views_count": 36538,
  "likes_count": 315,
  "bookmark_count": 38,
  "quote_count": 37,
  "reply_count": 80,
  "retweet_count": 41,
  "author": {
    "id": "1934538036466810880",
    "username": "SorsaApp",
    "display_name": "Sorsa",
    "description": "Crypto social analytics made simple...",
    "followers_count": 6050,
    "verified": false
  }
}
```

### Campos

| Campo             | Tipo              | Descrição                                                       |
| :---------------- | :---------------- | :-------------------------------------------------------------- |
| `full_text`       | string            | Texto completo, que pode ter dezenas de milhares de caracteres. |
| `preview_text`    | string            | Trecho mostrado na timeline antes de Read more.                 |
| `cover_image_url` | string ou null    | URL da capa; null se não houver.                                |
| `published_at`    | string (ISO 8601) | Publicação do artigo, distinta de `created_at` do anúncio.      |
| `likes_count`     | integer           | Curtidas.                                                       |
| `retweet_count`   | integer           | Repostagens.                                                    |
| `reply_count`     | integer           | Respostas.                                                      |
| `quote_count`     | integer           | Citações.                                                       |
| `bookmark_count`  | integer           | Salvamentos.                                                    |
| `views_count`     | integer           | Total de visualizações.                                         |
| `author`          | object            | Perfil completo do autor, com os campos de User.                |

> **Nomes de campos:** as métricas coincidem com Tweet, exceto `views_count` no artigo e `view_count` no Tweet. Normalize essa chave se processar ambos no mesmo pipeline. Veja [formato de resposta](https://docs.sorsa.io/pt-BR/response-format).

## Distinguir artigos de publicações comuns

Se souber o tipo, chame o endpoint correto diretamente. Para entradas mistas, a função tenta `/article` e recorre a Tweet quando recebe 404 ou texto de artigo vazio. Um 404 também pode indicar indisponibilidade, e a alternativa pode falhar. Erros de autenticação, cota, limite e servidor são propagados, não tratados como posts comuns.

```python theme={null}
def get_content(tweet_link):
    """Fetch a tweet or article, returning the appropriate object."""
    try:
        article = get_article(tweet_link)
        if article.get("full_text"):
            return {"type": "article", "data": article}
    except requests.HTTPError as error:
        if error.response is None or error.response.status_code != 404:
            raise

    resp = requests.post(
        "https://api.sorsa.io/v3/tweet-info",
        headers={"ApiKey": API_KEY, "Content-Type": "application/json"},
        json={"tweet_link": tweet_link},
        timeout=30,
    )
    resp.raise_for_status()
    return {"type": "tweet", "data": resp.json()}
```

## Próximos passos

* [Busca](https://docs.sorsa.io/pt-BR/search-tweets): encontre artigos por palavra-chave.
* [Engajamento](https://docs.sorsa.io/pt-BR/tweet-engagement): respostas, citações e repostagens do anúncio.
* [Histórico](https://docs.sorsa.io/pt-BR/historical-data): artigos antigos.
* [Referência](https://docs.sorsa.io/pt-BR/api-reference-guide): especificação completa.
