API para X / Twitter

API para X / Twitter: Posts do usuário

Obtenha a linha do tempo da aba Posts do perfil de uma conta do X (Twitter) pelo nome de usuário. Os resultados seguem a ordem do perfil: um post fixado pode aparecer primeiro; depois vêm, em ordem cronológica inversa, os posts do autor, reposts, citações e continuações de threads do próprio autor.

US$ 0,45/mil req., pague por requisição, sem assinatura.

@buildwithjonah / X
x.com/buildwithjonah

@buildwithjonah

BFollow

@buildwithjonah

PostsRepliesHighlightsMedia

Pinned

B

@buildwithjonah· Sep 26, 2024

Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.

964123,820
O que a API retornoutweets[0]
{
"id": "1842093771280384512",
"url": "https://x.com/buildwithjonah/status/1842093771280384512",
"text": "Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.",
"createdUtc": 1727366400,
"lang": "en",
"likes": 3820,
"retweets": 412,
"replies": 96,
... 12 campos a mais
}
Disponibilidade
99,99%
30d · 338.831 chamadas
Requisições
339.051
30d · semanal, últimas 12 sem.
Resposta
1,6s
mediana · 30d

Preços e provedores

Preços do endpoint Posts do usuário da API para X / Twitter: uma API, 3 provedores intercambiáveis

O provedor mais barato atende primeiro. Se ele falhar, o próximo assume na mesma chamada.

Você paga
US$ 4,50
US$ 0,45/mil req., só pelo que você usar. Sem plano mensal.
Suas primeiras 222 requisições são grátis com o saldo inicial de US$ 0,10.

Teste

Obtenha Posts do usuário do X / Twitter em uma só requisição

requireFieldsarray
Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `isPinned`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a tweet that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted.
Abrir em
Obter chave grátis
Resposta de exemplo
Execuções grátis retornam só os primeiros 3 resultados. Recarregue uma chave para receber a resposta completa.

Este exemplo mostra 28 de 30 campos. Ver todos os campos

{
  "found": true,
  "data": {
    "tweets": [
      {
        "id": "1842093771280384512",
        "url": "https://x.com/buildwithjonah/status/1842093771280384512",
        "text": "Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.",
        "createdUtc": 1727366400,
        "lang": "en",
        "likes": 3820,
        "retweets": 412,
        "replies": 96,
        "quotes": 28,
        "views": 284000,
        "bookmarks": 1540,
        "isReply": false,
        "isPinned": true,
        "media": [],
        "conversationId": "1842093771280384512",
        "source": "Twitter Web App",
        "authorId": "1401882093771280384",
        "authorName": "Jonah Ruiz",
        "authorHandle": "buildwithjonah",
        "authorImage": "https://pbs.twimg.com/profile_images/1401882093771280384/jonah_400x400.jpg"
      },
      {
        "id": "1841002881044099072",
        "url": "https://x.com/buildwithjonah/status/1841002881044099072",
        "text": "Shipped a small tool today that diffs API response schemas across versions. Saved me from a nasty silent break last week.",
        "createdUtc": 1727280000,
        "lang": "en",
        "likes": 640,
        "retweets": 52,
        "replies": 18,
        "quotes": 2,
        "views": 41200,
        "bookmarks": 210,
        "isReply": false,
        "isPinned": false,
        "media": [
          {
            "type": "photo",
            "url": "https://pbs.twimg.com/media/F9j1QoQWkAA_diff_tool.jpg",
            "width": 1600,
            "height": 1000
          }
        ],
        "conversationId": "1841002881044099072",
        "source": "Twitter for iPhone",
        "authorId": "1401882093771280384",
        "authorName": "Jonah Ruiz",
        "authorHandle": "buildwithjonah",
        "authorImage": "https://pbs.twimg.com/profile_images/1401882093771280384/jonah_400x400.jpg"
      },
      {
        "id": "1839881220337844224",
        "url": "https://x.com/buildwithjonah/status/1839881220337844224",
        "text": "@dataeng_marta Totally agree, cursor pagination beats offset once you get past a few hundred thousand rows.",
        "createdUtc": 1727107200,
        "lang": "en",
        "likes": 88,
        "retweets": 4,
        "replies": 6,
        "quotes": 0,
        "views": 6200,
        "bookmarks": 12,
        "isReply": true,
        "isPinned": false,
        "media": [],
        "conversationId": "1839880002114899968",
        "source": "Twitter Web App",
        "authorId": "1401882093771280384",
        "authorName": "Jonah Ruiz",
        "authorHandle": "buildwithjonah",
        "authorImage": "https://pbs.twimg.com/profile_images/1401882093771280384/jonah_400x400.jpg"
      }
    ],
    "nextCursor": "DAABCgABGZ3xw5A2xVIKAAIY__posts_page2"
  }
}

Referência completa de parâmetros e resposta - todos os campos, tipos e exemplos deste endpoint.

Referência

Uma requisição, um formato de resposta.

Cada campo que você envia e cada campo que você recebe, cada um com um exemplo real.

Última verificação em 2026-11-14 · disponibilidade e latência medidas em 30d

Corpo da requisição

JSON, enviado via POST para este endpoint.

  • handlestring

    buildwithjonah

    Nome de usuário do Twitter/X sem o @ inicial.

  • cursorstring

    Cursor de paginação opaco do nextCursor de uma resposta anterior. Omita na primeira página.

  • requireFieldsarray

    Optional; omit it and routing is unchanged, with the cheapest source serving. Name the output fields this request must be able to return, for example `isPinned`, and it is served only by a source that returns every one of them. Fields you do not name are still returned whenever the serving source has them. This can raise your price: when the cheapest source cannot return a named field, a dearer source serves, and you are quoted and charged its price. A named field can still be absent on a tweet that genuinely lacks it. Naming a combination that no single source returns together is refused as invalid input, with no charge. On a paginated walk it applies to the first page only; later pages stay with the source that page chose, at the price it was quoted.

Você envia. Um corpo JSON pequeno. Os valores mostrados são exemplos para você trocar pelos seus.

Resposta

JSON, um valor de exemplo por campo.

datadata

The Posts-tab timeline page, or null when the account was not found.

  • nextCursorstring

    DAABCgABGZ3xw5A2xVIKAAIY__posts_page2

    Opaque cursor for the next native Posts-tab page, or null when no more pages are available.

each tweetdata.tweets[]

Posts in profile order. A pinned post may appear before otherwise reverse-chronological results. Populated whenever the provider has data for the entity.

  • authorHandlestring

    buildwithjonah

    Handle of the account that posted.

  • authorIdstring

    1401882093771280384

    Numeric X user id of the account that posted, as a string.

  • authorImagestring

    https://pbs.twimg.com/profile_images/1401882093771280384/jonah_400x400.jpg

    Avatar image URL of the account that posted.

  • authorNamestring

    Jonah Ruiz

    Display name of the account that posted.

  • bookmarksinteger

    1540

    Number of bookmarks.

  • conversationIdstring

    1842093771280384512

    Id of the conversation the post belongs to, as a string.

  • createdUtcnumber

    1727366400

    UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity.

  • idstring

    1842093771280384512

    The post's numeric tweet ID, represented as a string. Populated whenever the provider has data for the entity.

  • isPinnedbooleanpode ser exigido

    true

    Whether X marks the post as pinned on the profile, or null when the serving source does not publish it.

  • isReplyboolean

    false

    Whether X marks the record as a reply. Certified Posts-tab captures use this for self-thread continuations.

  • langstring

    en

    Language code reported for the post, when available.

  • likesinteger

    3820

    Number of likes.

  • quotesinteger

    28

    Number of quote posts.

  • repliesinteger

    96

    Number of replies.

  • retweetsinteger

    412

    Number of reposts or retweets.

  • sourcestring

    Twitter Web App

    Client the post was sent from, e.g. "Twitter Web App".

  • textstring

    Spent the last 6 months building a data pipeline that normalizes 40 scraper APIs into one schema. Here is what broke, and what I would do differently. A thread.

    The post text. Empty for media-only posts. Populated whenever the provider has data for the entity.

  • urlstring

    https://x.com/buildwithjonah/status/1842093771280384512

    Canonical x.com URL of the post. Populated whenever the provider has data for the entity.

  • viewsinteger

    284000

    Number of views.

each mediadata.tweets[].media[]

Photo, video, and GIF attachments on the post. Empty when the post has none.

  • heightinteger
  • typestring

    One of photo, video, or gif.

  • urlstring

    Image URL. For a video or GIF this is the poster/thumbnail frame. X media URLs on pbs.twimg.com are publicly fetchable without authentication; append ?name=orig for the full-resolution original.

  • videoUrlstring

    Playable video file URL. Present only for video and gif items.

  • widthinteger
top level
  • foundboolean

    true

    Whether the account's Posts-tab timeline was returned.

  • reason"not_found" | "suspended"

    Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. `suspended`: the platform has suspended the account. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.

Você recebe. Campos nomeados e tipados, no mesmo formato, seja qual for a fonte que responder.

Vende esta API? Veja o schema completo que o seu endpoint precisa retornar.

Dúvidas frequentes

Sobre o endpoint Posts do usuário da API para X / Twitter

O endpoint Posts do usuário da AnyAPI para X / Twitter retorna dados de X / Twitter em JSON normalizado com uma chamada POST para /v1/run/twitter.user_posts. Obtenha a linha do tempo da aba Posts do perfil de uma conta do X (Twitter) pelo nome de usuário. Os resultados seguem a ordem do perfil: um post fixado pode aparecer primeiro; depois vêm, em ordem cronológica inversa, os posts do autor, reposts, citações e continuações de threads do próprio autor. A AnyAPI distribui cada requisição entre 3 fontes, com failover automático quando uma falha. Custa a partir de US$ 0,45 por mil requisições, em dólares, sem assinatura e sem mínimo mensal. Nos últimos 30 dias, 100,0% das chamadas ao endpoint Posts do usuário da API para X / Twitter feitas pela AnyAPI tiveram sucesso, com tempo de resposta mediano de 1,6 segundos, em 338.831 chamadas medidas.

Custa a partir de US$ 0,45 por mil requisições, em dólares, sem assinatura e sem mínimo mensal. Você recarrega uma carteira em dólares e cada chamada desconta dela. Algumas requisições pagas pela carteira que falham geram cobranças de processamento, que repassamos pelo custo, sem margem; a resposta de erro mostra o valor cobrado.

Obtenha a linha do tempo da aba Posts do perfil de uma conta do X (Twitter) pelo nome de usuário. Os resultados seguem a ordem do perfil: um post fixado pode aparecer primeiro; depois vêm, em ordem cronológica inversa, os posts do autor, reposts, citações e continuações de threads do próprio autor. A resposta é JSON normalizado, com o mesmo envelope que todo endpoint da AnyAPI retorna, então processar um segundo endpoint é só trocar a URL, e nada mais.

Nos últimos 30 dias, 100,0% das chamadas ao endpoint Posts do usuário da API para X / Twitter feitas pela AnyAPI tiveram sucesso, com tempo de resposta mediano de 1,6 segundos, em 338.831 chamadas medidas. Estas são medições da própria AnyAPI sobre o tráfego que passa pelo gateway, recalculadas continuamente, e não uma meta de nível de serviço publicada.

Sim. Uma conta nova da AnyAPI começa com US$ 0,10 de saldo grátis, sem cartão, o que cobre 222 chamadas de Posts do usuário do X / Twitter a US$ 0,00045 cada.

A AnyAPI consulta a próxima das suas 3 fontes na mesma requisição, começando pela mais barata, então a queda de uma fonte não derruba sua chamada.

Envie uma requisição POST para https://api.getanyapi.com/v1/run/twitter.user_posts com sua chave da AnyAPI em um cabeçalho "Authorization: Bearer" e a entrada como corpo JSON. A mesma chave e a mesma carteira funcionam em todos os endpoints da AnyAPI.

Não. Você adiciona dólares a um único saldo pré-pago da AnyAPI e cada requisição desconta dele. Não há plano mensal nem mínimo, e o mesmo saldo paga todos os endpoints da AnyAPI.

Sim. Instale @getanyapi/sdk pelo npm para TypeScript ou getanyapi pelo pip para Python. Os dois chamam todos os endpoints da AnyAPI com a mesma chave, e qualquer cliente HTTP também funciona.

Sim. Um agente pode se conectar ao servidor MCP da AnyAPI em https://api.getanyapi.com/mcp, ou criar a própria chave de teste grátis com um único POST sem autenticação para https://api.getanyapi.com/agent/signup e chamar este endpoint por HTTP.