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

# Guia de integração

> Esta página cobre ferramentas e conceitos-chave para integrar os endpoints de gerenciamento de Posts. Referência para o tier standard da X API v2 sobre manage tweets.

export const Button = ({href, children}) => {
  return <div className="not-prose">
    <a href={href}>
      <button className="x-btn">
        <span>{children}</span>
        <svg width="3" height="24" viewBox="0 -9 3 24" class="h-6 rotate-0 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
      </button>
    </a>
  </div>;
};

Esta página cobre ferramentas e conceitos-chave para integrar os endpoints de gerenciamento de Posts ao seu sistema.

## Ferramentas úteis

Antes de mergulharmos em alguns conceitos-chave que ajudarão você a integrar este endpoint, recomendamos que você se familiarize com:

### Postman

O Postman é uma ótima ferramenta que você pode usar para testar um endpoint. Cada requisição do Postman inclui todos os parâmetros de caminho e de corpo para ajudar você a entender rapidamente o que está disponível. Para saber mais sobre nossas coleções do Postman, visite a página ["Usando o Postman"](/tutorials/postman-getting-started).

### Amostras de código

Interessado em começar a usar este endpoint com código na sua linguagem de programação preferida? Temos várias amostras de código diferentes disponíveis que você pode usar como ponto de partida em nossa [página do Github](https://github.com/xdevplatform/Twitter-API-v2-sample-code).

### Bibliotecas de terceiros

Aproveite as [bibliotecas de terceiros](/tools-and-libraries) da nossa comunidade para ajudar você a começar. Você pode encontrar uma biblioteca que funcione com os endpoints v2 procurando pela tag de versão adequada.

## Conceitos-chave

### Autenticação

Todos os endpoints da X API v2 exigem que você autentique suas requisições com um conjunto de credenciais, também conhecidas como chaves e tokens.

Estes endpoints específicos exigem o uso de [OAuth 1.0a User Context](/resources/fundamentals/authentication), o que significa que você deve usar um conjunto de API keys e Access Tokens de usuário para fazer uma requisição bem-sucedida. Os Access Tokens devem estar associados ao usuário em nome do qual você está fazendo a requisição. Se você quiser gerar um conjunto de Access Tokens para outro usuário, ele deve autorizar ou autenticar seu App usando o [fluxo 3-legged OAuth](/resources/fundamentals/authentication#obtaining-access-tokens-using-3-legged-oauth-flow).

Observe que o OAuth 1.0a pode ser difícil de usar. Se você não estiver familiarizado com este método de autenticação, recomendamos que use uma [biblioteca](/tools-and-libraries), uma ferramenta como o Postman ou use OAuth 2.0 para autenticar suas requisições.

O [OAuth 2.0 Authorization Code com PKCE](/resources/fundamentals/authentication#oauth-2-0-authorization-code-flow-with-pkce-2) permite maior controle sobre o escopo de uma aplicação e fluxos de autorização entre múltiplos dispositivos. O OAuth 2.0 permite que você escolha escopos específicos e granulares que concedem permissões específicas em nome de um usuário.

Para habilitar o OAuth 2.0 no seu App, você deve habilitá-lo nas configurações de autenticação do seu App encontradas na seção de configurações do App no Developer Console.

### Developer Console, Projects e Apps de desenvolvedor

Para obter um conjunto de credenciais de autenticação que funcione com os endpoints da X API v2, você deve ter uma \[conta de desenvolvedor]/resources/fundamentals/developer-portal), configurar um [Project](/resources/fundamentals/developer-apps) dentro dessa conta e ter criado um [App de desenvolvedor](/resources/fundamentals/developer-apps) dentro desse Project. Você poderá então encontrar suas chaves e tokens dentro do seu App de desenvolvedor.

### Restrições de criação de Posts (self-serve)

As restrições a seguir se aplicam somente a clientes da API self-serve (Pay Per Use). Clientes da Enterprise API não estão sujeitos a esses limites.

**Restrições de resposta**

Replies via API só são permitidas se a conta que está respondendo tiver sido explicitamente convocada pelo autor do post original. Isso significa que uma das seguintes condições deve ser verdadeira:

* O autor original faz @menção ao usuário/conta que responde no seu post.
* O autor original cita um post do usuário/conta que responde.

Se nenhuma das condições for atendida, a requisição de reply será rejeitada.

**Limite de cashtag**

Posts criados via API são limitados a no máximo 1 cashtag (ex.: `$TICKER`) por post. Requisições que incluírem mais de 1 cashtag serão rejeitadas.

### Rate limits

Todos os dias, muitos milhares de desenvolvedores fazem requisições à X API. Para ajudar a gerenciar o grande volume dessas requisições, [rate limits](https://developer.x.com/x-api/fundamentals/rate-limits) são aplicados em cada endpoint, limitando o número de requisições que você pode fazer em nome do seu app ou em nome de um usuário autenticado.

Estes endpoints têm rate limit no nível do usuário, o que significa que o usuário autenticado em nome do qual você está fazendo a requisição só pode chamar o endpoint um determinado número de vezes em qualquer App de desenvolvedor. Há um rate limit de usuário de 200 requisições por 15 minutos para o método POST. O método DELETE tem um rate limit de 50 requisições por 15 minutos. Além disso, há um limite de [300 requisições por 3 horas](https://blog.x.com/developer/en_us/topics/tools/2018/new-developer-requirements-to-protect-our-platform), incluindo Posts criados com manage Posts ou manage Retweets.

### Source labels

O nome do seu App e a URL do site serão mostrados como o [source label](https://help.x.com/en/using-twitter/how-to-tweet#source-labels) dentro dos metadados de qualquer Post criado programaticamente pela sua aplicação. Se você mudar o caso de uso de um X App, atualize o caso de uso nessas configurações para garantir conformidade com os [Termos de Desenvolvedor](https://developer.x.com/content/developer-twitter/en/developer-terms/agreement-and-policy).

### Configurações de perfil

Você só pode adicionar localização a Posts se tiver o geo habilitado nas configurações do seu perfil. Se você não tem o geo habilitado, ainda pode adicionar um parâmetro de localização no corpo da sua requisição, mas ele não será anexado ao seu Post. O mesmo vale para marcar usuários em imagens. Se o usuário que você está marcando não tem a marcação por foto habilitada, os nomes deles não aparecerão na lista de usuários marcados, mesmo que o Post seja criado com sucesso.

### Adicionando mídia a um Post

Atualmente, não há uma maneira de fazer upload completo de mídia usando a v2 da X API. No entanto, você pode anexar mídia previamente carregada a um Post. Você pode usar media IDs que já foram [enviados usando o endpoint de upload de mídia](/x-api/media/upload-media) ou o [X Media Studio](https://media.x.com/en/articles/products/2018/media-studio). Esses media ids devem ser seus ou de um usuário autenticado.

***

## Exemplos de código

### Criar um Post

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/tweets" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"text": "Hello world!"}'
  ```

  ```python title="Python SDK" lines wrap icon="python" theme={null}
  from xdk import Client
  from xdk.oauth1_auth import OAuth1

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # Criar um Post
  response = client.posts.create(text="Hello world!")
  print(f"Created Post: {response.data.id}")
  ```

  ```javascript title="JavaScript SDK" lines wrap icon="square-js" theme={null}
  import { Client, OAuth1 } from "@xdevplatform/xdk";

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // Criar um Post
  const response = await client.posts.create({ text: "Hello world!" });
  console.log(`Created Post: ${response.data?.id}`);
  ```
</CodeGroup>

### Criar uma reply

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/tweets" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"text": "This is a reply!", "reply": {"in_reply_to_tweet_id": "1234567890"}}'
  ```

  ```python title="Python SDK" lines wrap icon="python" theme={null}
  from xdk import Client
  from xdk.oauth1_auth import OAuth1

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # Criar uma reply
  response = client.posts.create(
      text="This is a reply!",
      reply={"in_reply_to_tweet_id": "1234567890"}
  )
  print(f"Created reply: {response.data.id}")
  ```

  ```javascript title="JavaScript SDK" lines wrap icon="square-js" theme={null}
  import { Client, OAuth1 } from "@xdevplatform/xdk";

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // Criar uma reply
  const response = await client.posts.create({
    text: "This is a reply!",
    reply: { inReplyToTweetId: "1234567890" },
  });
  console.log(`Created reply: ${response.data?.id}`);
  ```
</CodeGroup>

### Excluir um Post

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X DELETE "https://api.x.com/2/tweets/1234567890" \
    -H "Authorization: OAuth ..."
  ```

  ```python title="Python SDK" lines wrap icon="python" theme={null}
  from xdk import Client
  from xdk.oauth1_auth import OAuth1

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # Excluir um Post
  response = client.posts.delete("1234567890")
  print(f"Deleted: {response.data.deleted}")
  ```

  ```javascript title="JavaScript SDK" lines wrap icon="square-js" theme={null}
  import { Client, OAuth1 } from "@xdevplatform/xdk";

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // Excluir um Post
  const response = await client.posts.delete("1234567890");
  console.log(`Deleted: ${response.data?.deleted}`);
  ```
</CodeGroup>

**Próximos passos**

[Referência da API](/x-api/posts/manage-tweets#manage-tweets-api-reference-index)
