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

# v1 から v2 へ

> これまで standard v1.1 の GET lists/statuses エンドポイントを利用してきた方に向けたガイドです。X API v2 スタンダード階層の移行に関するリファレンスドキュメントです。

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

### List Posts lookup: Standard v1.1 と X API v2 の比較

これまで standard v1.1 の [GET lists/statuses](https://developer.x.com/en/docs/twitter-api/v1/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses) エンドポイントを利用してきた方向けに、standard v1.1 と X API v2 エンドポイントの類似点と相違点を理解するのに役立つことを目的としたガイドです。

* **類似点**
  * 認証方式
  * レート制限
* **相違点**
  * エンドポイント URL
  * App と Project の要件
  * リクエストあたりのデータオブジェクト数上限
  * レスポンスデータ形式
  * リクエストパラメータ

#### 類似点

**認証**

いずれのエンドポイントバージョンも [OAuth 1.0a User Context](/resources/fundamentals/authentication#oauth-2-0) をサポートしています。したがって、以前 standard v1.1 の List Posts lookup エンドポイントのいずれかを利用していた場合、X API v2 版へ移行しても同じ認証方式を継続して利用できます。

利用している認証ライブラリ/パッケージによりますが、App only 認証はおそらく最も簡単に開始できる方法で、シンプルなリクエストヘッダーで設定できます。App only アクセストークンの生成方法については、[App only ガイド](/resources/fundamentals/authentication#bearer-token-also-known-as-app-only)をご確認ください。

**レート制限**

|                                                                                                                         |                                                                                                                                                                                          |
| :---------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Standard v1.1**                                                                                                       | **X API v2**                                                                                                                                                                             |
| /1.1/lists/statuses.json<br /><br />OAuth 1.0a User Context で 15 分あたり 900 リクエスト<br /><br />App only で 15 分あたり 900 リクエスト | /2/lists/:id/tweets<br /><br />OAuth 1.0a User Context で 15 分あたり 900 リクエスト<br /><br />OAuth 2.0 Authorization Code with PKCE で 15 分あたり 900 リクエスト<br /><br />App only で 15 分あたり 900 リクエスト |

#### 相違点

**エンドポイント URL**

* Standard v1.1 エンドポイント:
  * GET [https://api.x.com/1.1/lists/statuses.json](https://api.x.com/1.1/lists/statuses.json)
    (指定した List から Tweet をルックアップ)
* X API v2 エンドポイント:
  * GET [https://api.x.com/2/lists/:id/tweets](https://api.x.com/2/lists/:id/tweets)
    (指定した List から Tweet をルックアップ)

**App と Project の要件**

X API v2 エンドポイントでは、リクエスト認証時に [Project](/resources/fundamentals/developer-apps) に紐づく [developer App](/resources/fundamentals/developer-apps) の認証情報の使用が必須です。すべての X API v1.1 エンドポイントは、App または Project に関連する App の認証情報を利用できます。

**リクエストあたりのデータオブジェクト数上限**

standard v1.1 の /lists/statuses エンドポイントでは、1 リクエストあたり最大 5000 の Post を返せます。新しい v2 エンドポイントでは、1 リクエストあたり最大 100 の Post を返せます。デフォルトでは 100 ユーザーオブジェクトが返され、返却件数を変更したい場合は、クエリパラメータ max\_results= に 1 - 100 の数値を渡す必要があります。次に、レスポンスペイロードで返された next\_token を、次のリクエストの pagination\_token クエリパラメータに渡します。

**レスポンスデータ形式**

standard v1.1 と X API v2 のエンドポイントバージョンにおける最も大きな違いのひとつは、ペイロードに返すフィールドをどう選ぶかです。

standard エンドポイントではデフォルトで多くのレスポンスフィールドを受け取り、パラメータを使ってペイロードに追加で返すフィールドやフィールドセットを指定するオプションがあります。

X API v2 版では、デフォルトでは Post の id と text フィールドのみが返されます。追加のフィールドやオブジェクトをリクエストするには、[fields](/x-api/fundamentals/fields) と [expansions](/x-api/fundamentals/expansions) パラメータを使用する必要があります。このエンドポイントからリクエストした Post フィールドはすべて、プライマリの Post オブジェクトに含まれて返されます。展開されたオブジェクトのフィールドは、レスポンス内の includes オブジェクトに返されます。展開されたオブジェクトは、プライマリオブジェクトと展開されたオブジェクトに含まれる ID を突き合わせることで、プライマリの Post オブジェクトに関連付けられます。

利用可能な Post フィールドと expansions の例:

* attachments
* author\_id
* context\_annotations
* created\_at
* geo
* lang

|                     |               |
| :------------------ | :------------ |
| **Endpoint**        | **Expansion** |
| /2/lists/:id/tweets | author\_id    |

これらの新しいパラメータについては、各ガイドや、[fields と expansions の使い方](/x-api/fundamentals/data-dictionary/reference#how-to-use-fields-and-expansions)についてのガイドをぜひご覧ください。

standard v1.1 のフィールドを新しい v2 のフィールドにマッピングするのに役立つ[データ形式の移行ガイド](/x-api/migrate/data-format-migration)もご用意しています。このガイドでは、特定のフィールドを v2 リクエストで返すために渡す必要がある具体的な expansion と field パラメータも提供されます。

特定フィールドのリクエスト方法の変更に加えて、X API v2 では API が返すオブジェクト ([Post](/x-api/fundamentals/data-dictionary/reference#tweet) や [user](/x-api/fundamentals/data-dictionary/reference#user) オブジェクトを含む) の新しい JSON 設計も導入されています。

* JSON のルートレベルでは、standard エンドポイントは Post オブジェクトを **statuses** 配列で返しますが、X API v2 では **data** 配列で返します。

* Retweeted や Quoted「statuses」ではなく、X API v2 の JSON では Retweeted / Quoted Tweets を参照します。**contributors** や **user.translator\_type** など、多くのレガシー・非推奨フィールドは削除されています。

* Post オブジェクトでは **favorites**、user オブジェクトでは **favourites** という別々の表記が使われていましたが、X API v2 では **like** という用語に統一しています。

* X では、値が存在しない JSON 値 (たとえば **null**) はペイロードに書き出さないという慣習を採用しています。Post とユーザーの属性は、非 null の値を持つ場合のみ含まれます。

**リクエストパラメータ**

以下の standard v1.1 リクエストパラメータには X API v2 に相当するものがあります:

|                     |                                         |
| :------------------ | :-------------------------------------- |
| Standard v1.1       | X API v2                                |
| list\_id            | id                                      |
| slug                | 相当なし                                    |
| owner\_screen\_name | 相当なし                                    |
| owner\_id           | 値 author\_id を持つ expansions パラメータでリクエスト |
| since\_id           | 相当なし                                    |
| max\_id             | 相当なし                                    |
| include\_entities   | 値 entities を持つ tweet.fields パラメータでリクエスト |
| include\_rts        | 相当なし                                    |
| count               | max\_results                            |

***

## コード例

### List から Post を取得 (v2)

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl "https://api.x.com/2/lists/84839422/tweets?tweet.fields=created_at,public_metrics&max_results=100" \
    -H "Authorization: Bearer $BEARER_TOKEN"
  ```

  ```python title="Python" lines wrap icon="python" theme={null}
  import requests

  bearer_token = "YOUR_BEARER_TOKEN"
  url = "https://api.x.com/2/lists/84839422/tweets"

  params = {
      "tweet.fields": "created_at,public_metrics",
      "max_results": 100
  }
  headers = {"Authorization": f"Bearer {bearer_token}"}

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

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

  client = Client(bearer_token="YOUR_BEARER_TOKEN")

  # List から Post を取得
  for page in client.lists.get_tweets(
      "84839422",
      tweet_fields=["created_at", "public_metrics"],
      max_results=100
  ):
      for post in page.data:
          print(f"{post.created_at}: {post.text[:50]}...")
  ```

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

  const client = new Client({ bearerToken: "YOUR_BEARER_TOKEN" });

  // List から Post を取得
  const paginator = client.lists.getTweets("84839422", {
    tweetFields: ["created_at", "public_metrics"],
    maxResults: 100,
  });

  for await (const page of paginator) {
    page.data?.forEach((post) => {
      console.log(`${post.created_at}: ${post.text?.slice(0, 50)}...`);
    });
  }
  ```
</CodeGroup>
