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

# 統合ガイド

> このページでは、manage Posts エンドポイントをシステムに統合するためのツールと重要な概念を扱います。manage tweets を扱う 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>;
};

このページでは、manage Posts エンドポイントをシステムに統合するためのツールと重要な概念を扱います。

## 役立つツール

このエンドポイントの統合に役立つ重要な概念に入る前に、以下について理解しておくことをお勧めします:

### Postman

Postman は、エンドポイントをテストするのに最適なツールです。各 Postman リクエストにはすべてのパスパラメーターとボディパラメーターが含まれており、利用可能なオプションを素早く把握するのに役立ちます。当社の Postman コレクションについて詳しくは、[「Postman を使う」](/tutorials/postman-getting-started)ページをご覧ください。

### コードサンプル

お好みのプログラミング言語でこのエンドポイントをセットアップしてみませんか?出発点として利用できるさまざまなコードサンプルを [GitHub ページ](https://github.com/xdevplatform/Twitter-API-v2-sample-code)で公開しています。

### サードパーティ製ライブラリ

コミュニティによる[サードパーティ製ライブラリ](/tools-and-libraries)を活用して開発を始められます。適切なバージョンタグを探すことで、v2 エンドポイントに対応したライブラリを見つけられます。

## 重要な概念

### 認証

すべての X API v2 エンドポイントでは、キーとトークン(認証情報)を使ってリクエストを認証する必要があります。

これらのエンドポイントでは [OAuth 1.0a User Context](/resources/fundamentals/authentication) の使用が必須です。つまり、リクエストを成功させるには API キーとユーザーアクセストークンのセットを使用する必要があります。アクセストークンは、リクエストの代理として行うユーザーに関連付けられている必要があります。他のユーザーのアクセストークンを生成するには、そのユーザーが [3-legged OAuth フロー](/resources/fundamentals/authentication#obtaining-access-tokens-using-3-legged-oauth-flow)を使用して App を承認または認証する必要があります。

OAuth 1.0a は使いにくい場合がある点にご注意ください。この認証方式に不慣れな場合は、[ライブラリ](/tools-and-libraries) を使用するか、Postman のようなツールを使うか、リクエストの認証に OAuth 2.0 を使用することをお勧めします。

[OAuth 2.0 Authorization Code with PKCE](/resources/fundamentals/authentication#oauth-2-0-authorization-code-flow-with-pkce-2) は、アプリケーションのスコープに対するより詳細な制御を可能にし、複数デバイス間の認可フローに対応します。OAuth 2.0 では、ユーザーの代理としての特定の権限を付与する詳細なスコープを選択できます。

App で OAuth 2.0 を有効にするには、Developer Console の App 設定セクションにある App の認証設定で有効化する必要があります。

### Developer Console、Project、開発者 App

X API v2 エンドポイントで機能する認証情報を取得するには、[開発者アカウント](/resources/fundamentals/developer-portal)を所有し、そのアカウント内に [Project](/resources/fundamentals/developer-apps) を設定し、その Project 内に[開発者 App](/resources/fundamentals/developer-apps) を作成する必要があります。その後、開発者 App 内のキーとトークンを取得できます。

### 投稿作成の制限(セルフサーブ)

以下の制限はセルフサーブ(Pay Per Use)API のお客様にのみ適用されます。Enterprise API のお客様はこれらの制限を受けません。

**返信の制限**

API 経由の返信は、返信するアカウントが元投稿の作成者から明示的に呼び出された場合にのみ許可されます。つまり、以下のいずれかが真である必要があります:

* 元の作成者が投稿内で返信ユーザー/アカウントに @ メンションしている。
* 元の作成者が返信ユーザー/アカウントの投稿を引用している。

いずれの条件も満たされない場合、返信リクエストは拒否されます。

**Cashtag 制限**

API 経由で作成される投稿は、1 投稿あたり最大 1 つの cashtag(例: `$TICKER`)に制限されます。2 つ以上の cashtag を含むリクエストは拒否されます。

### レート制限

毎日、数千人の開発者が X API にリクエストを送信しています。膨大なリクエスト量を管理するため、各エンドポイントには[レート制限](https://developer.x.com/x-api/fundamentals/rate-limits)が設定されており、App または認証済みユーザーの代理として送信できるリクエスト数を制限しています。

これらのエンドポイントはユーザーレベルでレート制限されます。つまり、リクエストの代理として実行される認証ユーザーは、任意の開発者 App を通じて特定回数だけこのエンドポイントを呼び出せます。POST メソッドには、ユーザーごとに 15 分あたり 200 リクエストのレート制限があります。DELETE メソッドには、15 分あたり 50 リクエストのレート制限があります。さらに、manage Posts または manage Retweets で作成された投稿を含めて、[3 時間あたり 300 リクエスト](https://blog.x.com/developer/en_us/topics/tools/2018/new-developer-requirements-to-protect-our-platform)の制限があります。

### Source label

アプリ名とウェブサイト URL は、アプリケーションによってプログラム的に作成された投稿のメタデータで [source label](https://help.x.com/en/using-twitter/how-to-tweet#source-labels) として表示されます。X App のユースケースを変更する場合は、[Developer Terms](https://developer.x.com/content/developer-twitter/en/developer-terms/agreement-and-policy) に準拠していることを確認するため、これらの設定内のユースケースも忘れずに更新してください。

### プロフィール設定

プロフィール設定で geo が有効になっている場合にのみ、投稿に場所を追加できます。geo が有効になっていない場合、リクエストボディに location パラメーターを追加できますが、投稿には添付されません。画像のユーザータグ付けも同様で、タグ付けしようとしているユーザーが写真タグ付けを有効にしていない場合、投稿は正常に作成されても、そのユーザー名はタグ付きユーザーのリストに表示されません。

### 投稿へのメディアの追加

現在、X API の v2 を使ってメディアを完全にアップロードする方法はありません。ただし、以前にアップロードしたメディアを投稿に添付することはできます。[メディアアップロードエンドポイント](/x-api/media/upload-media)または [X Media Studio](https://media.x.com/en/articles/products/2018/media-studio) で既にアップロード済みのメディア ID を使用できます。これらのメディア ID は自分自身のもの、または認証ユーザーのものである必要があります。

***

## コード例

### 投稿を作成する

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

  # 投稿を作成する
  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 });

  // 投稿を作成する
  const response = await client.posts.create({ text: "Hello world!" });
  console.log(`Created Post: ${response.data?.id}`);
  ```
</CodeGroup>

### 返信を作成する

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

  # 返信を作成する
  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 });

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

### 投稿を削除する

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

  # 投稿を削除する
  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 });

  // 投稿を削除する
  const response = await client.posts.delete("1234567890");
  console.log(`Deleted: ${response.data?.deleted}`);
  ```
</CodeGroup>

**次のステップ**

[API リファレンス](/x-api/posts/manage-tweets#manage-tweets-api-reference-index)
