> ## 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 migração

> Os endpoints de bloquear e desbloquear usuários só estão disponíveis no plano Enterprise. Referência para o nível standard da X API v2 sobre blocks.

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>;
};

<Callout icon="/icons/xds/icon-key.svg" color="#22C55E" iconType="regular">
  Os endpoints de bloquear e desbloquear usuários só estão disponíveis no plano Enterprise. Você pode preencher o formulário de interesse Enterprise [aqui](/forms/enterprise-api-interest).
</Callout>

### Consulta de blocks: standard v1.1 comparado com X API v2

Se você tem usado os endpoints standard v1.1 [GET blocks/ids](https://developer.x.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-blocks-ids) e [GET blocks/list](https://developer.x.com/en/docs/twitter-api/v1/accounts-and-users/mute-block-report-users/api-reference/get-blocks-list), o objetivo deste guia é ajudar você a entender as semelhanças e diferenças entre os endpoints de consulta de blocks do standard v1.1 e da X API v2.

* **Semelhanças**
  * Autenticação
* **Diferenças**
  * URLs dos endpoints

  * Limites de usuários por requisição

  * Requisitos de App e Project

  * Formatos de dados da resposta

  * Parâmetros da requisição

#### Semelhanças

**Autenticação**

Tanto os endpoints de consulta de blocks do standard v1.1 quanto da X API v2 utilizam [OAuth 1.0a User Context](/resources/fundamentals/authentication#oauth-1-0a-2). Portanto, se você estava usando um dos endpoints de consulta de blocks do standard v1.1, pode continuar usando o mesmo método de autenticação ao migrar para a versão X API v2.

#### Diferenças

**URLs dos endpoints**

* Endpoints do standard v1.1:
  * GET [https://api.x.com/1.1/blocks/ids.json](https://api.x.com/1.1/blocks/ids.json)
    (lista de IDs de usuários que estão bloqueados pelo usuário especificado)
  * GET [https://api.x.com/1.1/blocks/lists.json](https://api.x.com/1.1/blocks/lists.json)
    (lista de usuários que estão bloqueados pelo usuário especificado)
* Endpoint da X API v2:
  * GET [https://api.x.com/2/users/:id/blocking](https://api.x.com/2/users/:id/blocking)
    (lista de usuários que estão bloqueados pelo ID de usuário especificado)

**Limites de usuários por requisição**

Os endpoints do standard v1.1 permitem retornar até 5000 usuários por requisição. Os novos endpoints v2 permitem retornar até 1000 usuários por requisição. Para retornar até 1000 usuários, você precisa passar max\_results=1000 como parâmetro de consulta; em seguida, pode passar o next\_token retornado no payload da resposta para o parâmetro pagination\_token na próxima requisição.

**Requisitos de App e Project**

Os endpoints da X API v2 exigem que você use credenciais de um [App de desenvolvedor](/resources/fundamentals/developer-apps) que esteja associado a um [Project](/resources/fundamentals/developer-apps) ao autenticar suas requisições. Todos os endpoints da X API v1.1 podem usar credenciais de Apps ou de Apps associados a um Project.

**Formato dos dados da resposta**

Uma das maiores diferenças entre as versões dos endpoints standard v1.1 e X API v2 é como você seleciona quais campos são retornados no seu payload.

Nos endpoints standard, você recebe muitos dos campos de resposta por padrão e depois tem a opção de usar parâmetros para identificar quais campos ou conjuntos de campos devem retornar no payload.

A versão X API v2 entrega, por padrão, apenas os campos id, name e username do usuário. Para solicitar qualquer campo ou objeto adicional, você precisará usar os parâmetros [fields](/x-api/fundamentals/fields) e [expansions](/x-api/fundamentals/expansions). Quaisquer campos de usuário que você solicitar deste endpoint retornarão no objeto de usuário principal. Qualquer objeto Post e campos expandidos retornarão em um objeto includes dentro da sua resposta. Você pode então relacionar quaisquer objetos expandidos ao objeto de usuário combinando os IDs presentes tanto no objeto de usuário quanto no objeto Post expandido.

Recomendamos que você leia mais sobre esses novos parâmetros em seus respectivos guias, ou consultando nosso guia sobre [como usar fields e expansions](/x-api/fundamentals/data-dictionary/reference#how-to-use-fields-and-expansions).

Também elaboramos um [guia de migração do formato de dados](/x-api/migrate/data-format-migration#migrating-from-standard-v1-1s-data-format-to-v2) que pode ajudar a mapear campos do standard v1.1 para os campos mais recentes da v2. Esse guia também informará qual parâmetro específico de expansion e field você precisará passar com sua requisição v2 para retornar certos campos.

Além das mudanças na forma como você solicita determinados campos, a X API v2 também está introduzindo novos designs JSON para os objetos retornados pelas APIs, incluindo os objetos [P](/x-api/fundamentals/data-dictionary/reference#tweet)ost e [user](/x-api/fundamentals/data-dictionary/reference#user).

* No nível raiz do JSON, os endpoints standard retornam objetos Post em um array statuses, enquanto a X API v2 retorna um array data.
* Em vez de se referir a "statuses" Retweeted e Quoted, o JSON da X API v2 refere-se a Retweeted e Quoted Tweets. Muitos campos legados e obsoletos, como contributors e user.translator\_type, estão sendo removidos.
* Em vez de usar tanto favorites (no objeto Post) quanto favourites (no objeto user), a X API v2 usa o termo like.
* A X está adotando a convenção de que valores JSON sem valor (por exemplo, null) não são incluídos no payload. Atributos de Post e user só são incluídos quando têm valores não nulos.

Também introduzimos um novo conjunto de campos no [objeto Post](/x-api/fundamentals/data-dictionary/reference#tweet), incluindo os seguintes:

* Um campo [conversation\_id](/x-api/fundamentals/conversation-id)
* Dois novos campos de [annotations](/x-api/fundamentals/post-annotations), incluindo context e entities
* Vários novos campos de [metrics](/x-api/fundamentals/metrics)
* Um novo campo reply\_setting, que mostra quem pode responder a um determinado Post

**Parâmetros da requisição**

Os seguintes parâmetros de requisição do standard v1.1 aceitavam dois parâmetros de consulta (user\_id ou screen\_name). A X API v2 aceita somente o user ID numérico, e ele deve ser passado como parte do caminho do endpoint.

***

## Exemplos de código

### Obter usuários bloqueados (v2)

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl "https://api.x.com/2/users/123456789/blocking?user.fields=username,verified&max_results=100" \
    -H "Authorization: OAuth ..."
  ```

  ```python title="Python" lines wrap icon="python" theme={null}
  # Requer autenticação OAuth 1.0a User Context
  import requests
  from requests_oauthlib import OAuth1

  auth = OAuth1(
      "API_KEY", "API_SECRET",
      "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET"
  )

  url = "https://api.x.com/2/users/123456789/blocking"
  params = {"user.fields": "username,verified", "max_results": 100}

  response = requests.get(url, auth=auth, params=params)
  print(response.json())
  ```

  ```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)

  # Obter usuários bloqueados com paginação
  for page in client.users.get_blocking(
      "123456789",
      user_fields=["username", "verified"],
      max_results=100
  ):
      for user in page.data:
          print(f"{user.username} - Verified: {user.verified}")
  ```

  ```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 });

  // Obter usuários bloqueados com paginação
  const paginator = client.users.getBlocking("123456789", {
    userFields: ["username", "verified"],
    maxResults: 100,
  });

  for await (const page of paginator) {
    page.data?.forEach((user) => {
      console.log(`${user.username} - Verified: ${user.verified}`);
    });
  }
  ```
</CodeGroup>

### Bloquear um usuário (v2) — Somente Enterprise

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/users/123456789/blocking" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"target_user_id": "2244994945"}'
  ```

  ```python title="Python" lines wrap icon="python" theme={null}
  # Requer autenticação OAuth 1.0a User Context
  import requests
  from requests_oauthlib import OAuth1

  auth = OAuth1(
      "API_KEY", "API_SECRET",
      "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET"
  )

  url = "https://api.x.com/2/users/123456789/blocking"
  response = requests.post(url, auth=auth, json={"target_user_id": "2244994945"})
  print(response.json())
  ```

  ```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)

  # Bloquear um usuário
  response = client.users.block(
      source_user_id="123456789",
      target_user_id="2244994945"
  )
  print(f"Blocking: {response.data.blocking}")
  ```

  ```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 });

  // Bloquear um usuário
  const response = await client.users.block("123456789", {
    targetUserId: "2244994945",
  });
  console.log(`Blocking: ${response.data?.blocking}`);
  ```
</CodeGroup>
