3行でいうと
- 入口は、console.x.ai でのアカウント作成とクレジットの追加、APIキーの作成、環境変数
XAI_API_KEY、そしてhttps://api.x.ai/v1への呼び出しです。公式の最初の例は、新しい Responses API(/v1/responses)で書かれています。 - OpenAIのSDKは、
base_urlをhttps://api.x.ai/v1に向けるだけで使えます。ただし、古い Chat Completions は公式が「Legacy」「Deprecated」と書き、新機能は Responses API に先に入ります。両者は、会話の保存、推論の扱い、ツールの範囲が違います。 - 既定では、Responses API の入力と出力はサーバーに30日間保存されます(
storeの既定がtrue)。APIの入力と出力は、明示の許可なしには学習に使わない、と公式は書いています。保存を止める手段は、リクエストごとのstore: falseと、チーム全体のゼロデータ保持(ZDR)です。ZDRを入れると使えなくなる機能が多くあります。 - 上限は、チームごと・モデルごとの「1秒あたりの要求数」と「1分あたりのトークン数」で、累計の支払額で段階が上がります。超えると429です。公式は、費用を見る道具として、応答の
usage.cost_in_usd_ticksを用意しています。
この記事は、実際に使って確かめた記録ではありません。運営者はGrokを入れていますが、使い心地はこの記事には書いていません。この記事は、2026年10月24日に公式ドキュメントを読んでまとめたものです。コードは、公式ページの例を読んで写したものか、公式の説明から抜き出した短い断片で、実行していません。公式の文章は要約として取得したため、読み切れていない箇所は「確認できていない」と書いています。価格、上限、モデル名は変わることがあります。法律や契約の助言ではありません。
先に結論
- まず「キー」と「保存」の2つを決めます。 キーはコードに書かず環境変数へ。保存は、既定で30日残ることを知ったうえで、残したくない用途なら
store: falseかZDRを検討します。 - 新しく書くなら Responses API です。 公式のQuickstartも、ベストプラクティスも、Responses API を前提にしています。Chat Completions に慣れた人は、
messagesをinputに、max_tokensをmax_output_tokensに替える、という対応表が公式にあります。 - SDKは3通りから選べます。 OpenAIのSDK(Python、JavaScript)を向け先だけ変えて使う、xAI専用の
xai-sdk(Python)を使う、Vercel AI SDK(@ai-sdk/xai)を使う。機能の差が小さくない(会話の取得と削除など)ので、後の表を見てください。 - 429は「普通に来るもの」として設計します。 上限の値はモデルとティアで大きく違います。チームの実際の値は、コンソールのModelsページで見る、と公式は書いています。待ち時間を伸ばして再試行する形が公式の推奨です。
- 費用は、請求書とコンソールの画面と、応答の
cost_in_usd_ticksの3か所で見ます。 応答の値は、リクエストごとで、会話をまたいで積み上がりません。
前提:用語をそろえる
- APIキー:リクエストが誰のものかを示す文字列です。
Authorization: Bearer <キー>の形で送ります。チーム(team)に結びつき、作った人の情報が記録されます。 - コンソール:console.x.ai の管理画面です。アカウント、クレジット、APIキー、チームの設定などがあります。
- Responses API:
POST /v1/responses。公式が「推奨」と書くAPIの形です。会話の続きを、前の応答のIDで指定できます。 - Chat Completions:
POST /v1/chat/completions。OpenAIで広く使われてきた形で、公式は「Legacy」と書いています。 - OpenAI互換:OpenAIのSDKの向け先(
base_url)をhttps://api.x.ai/v1に変えて使えること。公式のQuickstartにこの形の例があります。 - レート制限(RPSとTPM):1秒あたりの要求数と、1分あたりのトークン数の上限です。
- ZDR(Zero Data Retention):プロンプトと出力をディスクに書かない設定です。チーム全体の設定で、個別のキーには付けられません。
- ティック(ticks):費用を正確に表す単位です。10,000,000,000ティックが1ドルです。
1. コンソールとAPIキー
公式に書かれている流れ
Quickstart(docs.x.ai/developers/quickstart)の手順は、次のとおりです。
- console.x.ai でアカウントを作り、APIを使う前にクレジットを追加する。
- xAIコンソールの「API Keys」のページでキーを作る。
- キーを環境変数に入れる(シェルなら下の1行目、プロジェクトの
.envなら2行目)。
export XAI_API_KEY="your_api_key"
XAI_API_KEY=your_api_key
この記事では、console.x.ai を開いて画面を確かめることができませんでした(取得に失敗しました)。クレジットの追加額、最低額、自動チャージがAPIにあるか、といった画面の細部は、読んだ範囲では見つかっていません。公式の記述から読み取れたコンソールの場所は、次の表のとおりです。
| 項目 | 公式の書き方 | 書かれている場所 |
|---|---|---|
| APIキーの作成と管理 | 「API Keys」のページ。漏れた疑いのあるキーは、ここで無効にするか削除して、作り直す | Quickstart、データとプライバシーのFAQ |
| チームのモデルと上限 | 「Models」のページ。自分のティアとモデルごとの上限が出る | Rate Limits |
| 課金の詳細 | 「Manage Billing」(/console/billing) |
Pricing |
| ZDRの切り替え | 「Team Settings」のZDRの行(チーム管理者のみ) | データとプライバシーのFAQ |
| 管理用のキー | 「Settings」の「Management Keys」 | Management APIのガイド |
| 試す場所 | チームのプレイグラウンド、音声と画像のプレイグラウンド | Overview |
キーの扱い:公式が書いていること
データとプライバシーのFAQは、APIキーについて次のように書いています。
- パスワードのように扱う。チームメンバー同士で使い回さない。
- 環境変数かシークレット管理に入れる。公開のリポジトリやソースコードにコミットしない。
- 定期的に入れ替える。
- 漏れた疑いがあるときは、正しいチームにいることを確認してから、「API Keys」でキーを無効にするか削除して、新しく作る。
- GitHubのSecret Scanningと提携していて、漏れたキーは無効にされ、メールで知らされる。
- アカウントの不審な動きを見張る。
Quickstartの例のうち、OpenAIのPython SDKの例は、キーの置き場所に <YOUR_XAI_API_KEY_HERE> と書かれています。他の例は環境変数を読む形です。コードに直接書く形は、写さないほうが安全です(僕らの見立てです)。
キーの権限と上限:Management API
公式には、キーを人の手ではなくプログラムで管理する「Management API」があります。概要によると、企業向けで、コンソールの代わりにチームの情報を扱う入口です。ベースURLは https://management-api.x.ai(推論のAPIとは別)で、認証には、推論用のAPIキーとは別の「管理キー」を使います。
公式の例(キーの作成)は次のとおりです。
curl https://management-api.x.ai/auth/teams/{teamId}/api-keys \
-X POST \
-H "Authorization: Bearer <Your Management API Key>" \
-d '{"name": "My API key", "acls": ["api-key:model:*", "api-key:endpoint:*"], "qps": 5, "qpm": 100, "tpm": null}'
読んだ範囲で分かる決まりです。
- 新しいキーは、ACL(権限)を付けるまで何も呼べません。ACLは
api-key:endpoint:chat(チャットと画像理解)、api-key:endpoint:image(画像生成)、api-key:model:grok-4.7(特定のモデル)のように書き、*で全部になります。 - キー単位で
qps、qpm、tpmの上限を付けられます。tpmの上限は、超えたとき新しいリクエストを断り、すでに動いているものは止めません。 - 有効期限(
expireTime)の設定、無効化(disabled)、入れ替え(rotate)、削除があります。削除は取り消せません。完全なキーは作成時にだけ返ります。 - 入れ替えでは、古いキーの有効期限が既定で24時間後になり、7日より先にはできません。
- 新しいキーが全クラスタに行き渡るまで、少し時間がかかることがあります。確認用に propagation の状態を見る呼び出しがあります。
管理キーの作り方の細かい画面や、コンソール側でキー単位の上限を付けられるかは、読んだ範囲では見つかりませんでした。
キーの上にもう一段の確認を足す、企業向けの「mTLS認証」もあります。support@x.ai に頼んで有効にし、呼び先を mtls.api.x.ai に替え、クライアント証明書を付けます。公式は、APIキーは引き続き必要で(置き換えではない)、証明書の失敗は403、キーの不備は401だと書いています。設定はチーム全体にかかり、mTLSは今のところグローバルのエンドポイントだけで動きます。地域別のエンドポイントと使いたいときは、サポートに連絡するよう公式は書いています。
2. 最初の1回:公式の最小の例
Quickstartは、最初のテキストの例として、モデル grok-4.7 に「次の関数を直して、バグを説明して」と頼む形を載せています。以下は公式の例です(実行はしていません)。
curl https://api.x.ai/v1/responses \
-H "Authorization: Bearer $XAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-4.7",
"input": "Fix this function and explain the bug: function median(a){a.sort();return a[a.length/2]}"
}'
Python(OpenAIのSDK)の公式の例です。
from openai import OpenAI
client = OpenAI(
api_key="<YOUR_XAI_API_KEY_HERE>",
base_url="https://api.x.ai/v1",
)
response = client.responses.create(
model="grok-4.7",
input="Fix this function and explain the bug: function median(a){a.sort();return a[a.length/2]}",
)
print(response.output_text)
JavaScript(OpenAIのSDK)の公式の例です。こちらは環境変数を読みます。
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.XAI_API_KEY,
baseURL: 'https://api.x.ai/v1',
});
const response = await client.responses.create({
model: 'grok-4.7',
input: 'Fix this function and explain the bug: function median(a){a.sort();return a[a.length/2]}',
});
console.log(response.output_text);
xAI専用のPython SDKの公式の例です。
import os
from xai_sdk import Client
from xai_sdk.chat import user
client = Client(api_key=os.getenv("XAI_API_KEY"))
chat = client.chat.create(model="grok-4.7")
chat.append(user("Fix this function and explain the bug: function median(a){a.sort();return a[a.length/2]}"))
print(chat.sample().content)
Vercel AI SDKの公式の例です。
import { xai } from '@ai-sdk/xai';
import { generateText } from 'ai';
const { text } = await generateText({
model: xai.responses('grok-4.7'),
prompt: 'Fix this function and explain the bug: function median(a){a.sort();return a[a.length/2]}',
});
console.log(text);
インストールのコマンドも、公式のQuickstartに4通り並んでいます:pip install openai、npm install openai、pip install xai-sdk、npm install ai @ai-sdk/xai zod。
画像の生成も、Quickstartの次の手順にあります。公式のcurlの例は次のとおりです。
curl -X POST https://api.x.ai/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $XAI_API_KEY" \
-d '{
"model": "grok-imagine-image-2.0",
"prompt": "A futuristic city skyline at sunset"
}'
画像、動画、音声は、費用と提供地域の条件がテキストと違います(後の「料金」と「データの扱い」を参照)。
3. OpenAI互換の呼び方:何が同じで、何が違うか
向け先を変えるだけで使える、が公式の書き方
OpenAIのSDKは、base_url(JavaScriptは baseURL)を https://api.x.ai/v1 にして、api_key にxAIのキーを渡します。呼び先は、/v1/responses(推奨)と /v1/chat/completions(Legacy)です。モデルの一覧は GET /v1/models などで取れ、応答にモデルの別名(aliases)と価格が含まれます。
一方、公式は「OpenAIと完全に同じ」とは書いていません。読んだ範囲では、OpenAIとの互換の範囲を一覧にしたページは見つかりませんでした。次のような違いが、各ページに散らばって書かれています。
- Responses APIの
toolsは、リファレンスでは「functionsとweb search」と書かれていますが、Toolsの概要ページには、X検索やコード実行などの組み込みツールが並びます(前のガイド04)。ページごとに書き方が違うので、使うツールは、Toolsのページ側で確認してください。 background(バックグラウンド実行)は未対応です。metadata、truncationは、互換のために受け付けるだけで、対応していません。frequency_penaltyとpresence_penaltyも、Responses APIでは未対応です。logprobsとtop_logprobsは、grok-4.20以降のモデルでは無視されます。- OpenAIの形の
require_approvalとconnector_idは、リモートMCPでは未対応です(前のガイド04)。 max_output_tokensの既定は128,000で、表に出る回答の分だけを数えます。推論やツール呼び出しのトークンは、この上限に入りません。temperatureは0〜2を受け付けますが、実際の抽出に使われるのは1までで、それより大きい値は1として扱われ、応答には入力した値がそのまま書かれます(リファレンスの記述)。
Responses API と Chat Completions の違い
公式の移行ページ(Migrating to Responses API)の比較を、表にまとめます。
| 項目 | Responses API | Chat Completions(Legacy) |
|---|---|---|
| 公式の位置づけ | 推奨。新機能が先に入る | 「Deprecated」「Legacy endpoint, limited updates」(移行ページ)。別のページでは「legacy endpoint」。終了日は読んだ範囲では見つからなかった |
| 会話の続き | previous_response_id で、新しい入力だけ送る |
毎回、履歴を全部送る |
| サーバーでの保存 | 30日間(store の既定が true) |
保存しない |
| 推論モデルの扱い | 暗号化された推論内容に対応 | 推論内容は返らない |
| ツール | 検索、コード実行、MCPなどの組み込みツール | 関数呼び出しのみ |
| 履歴の課金 | 会話の履歴は自動でキャッシュされる | 毎回、全履歴が課金される |
パラメータの対応は、messages → input、max_tokens → max_output_tokens、そして Responses にだけある previous_response_id、store、include です。応答の形も違い、Chat Completionsは choices[0].message.content、Responsesは、型つきの項目の並びである output です(SDKなら response.output_text で取れます)。
移行の手順は、公式では次のとおりです。
- Vercel AI SDK:
xai('...')をxai.responses('...')に替える。 - OpenAI SDK(JavaScript、Python):
chat.completions.createをresponses.createに、messagesをinputに替える。 - curl:呼び先を
/v1/chat/completionsから/v1/responsesに、本文のmessagesをinputに替える。
公式は、この移行は「ほとんどの用途で動く」と書き、特殊な使い方は、Responses APIのドキュメントを見るよう案内しています。
長い応答のタイムアウト
公式の例(Chat Completionsのページ、ストリーミングのページ)は、推論モデルのために、クライアントのタイムアウトを延ばしています。PythonのOpenAI SDKは httpx.Timeout(3600.0)、JavaScriptは timeout: 360000(ミリ秒)、curlは -m 3600、xai-sdkは timeout=3600 です。JavaScriptの 360000 は6分で、他の例(3600秒)より短い点に注意してください。ベストプラクティスのページは、クライアントのタイムアウトを900秒以上(長い評価なら1800秒以上)にし、ストリーミングを使うと長い生成が途中で切れにくい、と書いています。SDKの既定のタイムアウトのままでは、推論の長い応答が切れることがある、と読めます。
4. 会話を続ける、保存する、消す
既定は「保存する」
Responses APIでは、プロンプト、推論内容、応答が、既定でxAIのサーバーに保存されます。公式は、この挙動が「オンが既定」だと書いています。保存は30日間で、その後は削除されます。保存されている間は、応答のIDで取り出す(GET /v1/responses/{response_id})、続きを頼む、削除する(DELETE /v1/responses/{response_id})ことができます。保存を止めるには、リクエストに store: false(xAI SDKでは store_messages=False)を付けます。
公式のページにある断片です(短縮・つなぎ合わせで、完全な例ではありません)。
# 続きを頼む(新しい入力だけを送る)
response = client.responses.create(
model="grok-4.7",
previous_response_id=response.id,
input=[{"role": "user", "content": "How do stars form?"}],
)
# 保存しない
# OpenAI SDK: store=False
# xAI SDK: client.chat.create(model="grok-4.7", store_messages=False)
履歴を自分で持つ形(store: false)の最小の骨組みです。公式のText Generationのページにある2つの断片(store=False の例と、*response.output を次の入力に足す例)を、僕らがつないだもので、公式の1つの例ではありません。実行していません。
first = client.responses.create(
model="grok-4.7",
store=False, # サーバーに保存しない
include=["reasoning.encrypted_content"], # 暗号化された推論内容を請求
input=[{"role": "user", "content": "What is the capital of France?"}],
)
second = client.responses.create(
model="grok-4.7",
store=False,
include=["reasoning.encrypted_content"],
input=[
{"role": "user", "content": "What is the capital of France?"},
*first.output, # 前の出力を、そのまま足す
{"role": "user", "content": "And its population?"},
],
)
instructionsは、previous_response_idと同時には使えません(リファレンスの記述)。- 30日を過ぎた会話を続けたいなら、履歴と暗号化された推論内容を自分で保存しておき、新しいリクエストに入れ直す、と公式は書いています。
- Vercel AI SDKは、応答の取得と削除に対応していません。取得と削除にはOpenAI SDKを使うよう書かれています。
- 暗号化された推論内容は、
include: ["reasoning.encrypted_content"]で請求します。grok-4.7は、頼まなくても常にこれを返します(2026年9月のRelease Notes)。公式は、この推論の項目を、変更せずにそのまま次のリクエストのinputに渡すよう書いています。並べ替えについての明文は、読んだ範囲では見つかりませんでした。
保存を止めたいときの選択肢
| 方法 | 範囲 | 公式が書く条件・副作用 |
|---|---|---|
store: false |
そのリクエストだけ | previous_response_id で続けられなくなる。履歴は自分で持つ |
| ZDR(ゼロデータ保持) | チーム全体 | 次の節。使えなくなる機能が多い |
5. SDKの選び方
| SDK | 公式が書いていること | 注意(読んだ範囲) |
|---|---|---|
| OpenAI SDK(Python、JavaScript) | base_url をxAIに向けて使う。応答の取得と削除も対応 |
互換の範囲の一覧は見つからなかった。費用は usage.cost_in_usd_ticks から自分で計算する |
| xai-sdk(Python) | 公式のPython SDK。gRPCベースで、同期の Client と非同期の AsyncClient がある。Python 3.10以上、Apache-2.0(公式GitHub) |
状態(ベータか)は、GitHubのページに書かれていなかった。最新版の番号と日付も、読めていない。XAI_API_KEY があれば Client() と書ける |
Vercel AI SDK(@ai-sdk/xai) |
xai.responses('モデル名')(Quickstartの例) |
応答の取得と削除は対応外(公式は、取得と削除にはOpenAI SDKを使うよう書いている)。費用の表示と、環境変数の読み込みの既定は、読んだ範囲では確認できなかった |
| LiteLLM | 公式のCommunityのページが挙げている。モデル名とキーを変えるだけでGrokに替えられる、と書かれている | コミュニティの連携として載っている |
xai-sdk には、費用を直接見る cost_usd という項目があります(Cost Trackingのページ)。ストリーミングでも、各チャンクが走っている合計を持ちます。
公式の統合ページ(Platforms)には、Google Cloud Vertex AI と Microsoft Foundry の項目もあります。この記事では中身を読んでいません。
6. 推論、ストリーミング、構造化出力:最初に知っておく点
推論の深さ
grok-4.7 では、推論を切ることはできません。深さは reasoning.effort で指定します。公式の例(reasoning={"effort": "high"}、システムメッセージと数学の証明の質問を渡す形)を、深さを medium に、入力を短く書き換えた断片です。
response = client.responses.create(
model="grok-4.7",
reasoning={"effort": "medium"},
input=[{"role": "user", "content": "Compare two sorting algorithms for nearly sorted data."}],
)
print(response.usage) # usage metrics include reasoning_tokens
low は速さ重視、medium は複雑な分析や長い文脈、high(既定)は難しい数学や多段の論理、xhigh は最大の深さで遅延が増える、と書かれています。推論のトークンは請求に含まれます。presencePenalty、frequencyPenalty、stop を付けると、推論モデルではエラーになります。ベストプラクティスは、サーバーの既定の変更に結果が左右されないよう、深さを毎回、明示するよう勧めています。
ストリーミング
"stream": true で、サーバー送信イベント(SSE)として届きます。読んだStreamingのページは、主にChat Completionsの形で書かれていて、Responses APIのイベントの種類は、そのページには書かれていませんでした。リファレンスの記述では、Responsesでも stream を付けると、data: [DONE] で終わるSSEです。画像生成のモデルは、ストリーミングに対応しません。
費用をストリーミングでも取りたいときは、リクエストの本文に、次の2つの項目を入れます(Cost Trackingのページの記述から抜き出した断片で、本文の残りは省略しています)。費用の入った usage は、最後のチャンクにだけ出ます。
{
"stream": true,
"stream_options": { "include_usage": true }
}
構造化出力(JSONの形を決める)
Responses APIでは、text.format に JSONスキーマを渡します(type: "json_schema"、name、schema、strict: true)。PythonではPydantic、JavaScriptではZodから、スキーマを作る補助が使えます。公式の対応表には、使える型、文字列の形式(日付、メール、UUIDなど)、文字数や項目数の上限(minLength と maxLength は2,048まで、minItems と maxItems は256まで、など)があり、一部の書き方は400エラーになり、一部は「受け付けるが保証しない」とされています。厳密に守らせたいときは、出力を自分でも検証するよう、公式は書いています。additionalProperties の既定は false です。
公式のStructured Outputsのページには、OpenAI SDKの client.responses.parse にPydanticのモデルを渡す例があります(text.format に json_schema を直接書く形のPythonの例は、読んだページにはなく、JavaScriptの例にありました)。骨組みは次のとおりです。公式の例の流れを短く書き直した断片で、実行していません(公式の例は、ProofInfo というモデルと、Web検索ツールを組み合わせています)。
from pydantic import BaseModel
class ProofInfo(BaseModel):
name: str
authors: str
year: str
summary: str
response = client.responses.parse(
model="grok-4.7",
input="...質問...",
text_format=ProofInfo,
)
proof = response.output_parsed # ProofInfo のオブジェクトで受け取れる
xai-sdk(Python)では、chat.parse(ProofInfo) が、生の応答と、解釈済みのオブジェクトの2つを返す、と書かれています。
7. レート制限と、エラーの読み方
上限の決まり
公式のRate Limitsのページによると、上限は、チームごと・モデルごとに、1秒あたりの要求数(RPS)と1分あたりのトークン数(TPM)の2つの軸があります。1秒あたりの要求数は、1分あたりの要求の枠を48で割った値(最小2)から作られ、1秒に1分ぶんを使い切るような集中を防ぎます。TPMに数えられるのは、入力(テキスト、画像、音声)、出力、推論、キャッシュされた入力のすべてです。キャッシュされたトークンは、請求は安くなりますが、TPMには数えられます。
ティアは、2026年1月1日以降の累計のAPI支払額で、自動で上がり、下がりません。公式は、前払いクレジットの購入と、支払いが済んだ請求書を通じて受け取った額で決まる、と書いています。一度上がったティアは、下がりません。
| ティア | 累計の支払額 |
|---|---|
| Tier 0 | $0(既定) |
| Tier 1 | $50 |
| Tier 2 | $250 |
| Tier 3 | $1,000 |
| Tier 4 | $5,000 |
| Enterprise | 要相談 |
主なモデルの上限(Tier 0からTier 4の順)は、2026年10月24日に読んだ内容で、次のとおりです。
| モデル | RPS | TPM |
|---|---|---|
| grok-4.7、grok-4.6、grok-4.5 | 150、172、208、312、500 | 50M、53M、60M、74M、100M |
| grok-4.3、grok-4.20-0309-reasoning、grok-4.20-0309-non-reasoning、grok-build-0.1 | 37、50、75、125、208 | 10M、15M、25M、45M、85M |
| grok-4.20-multi-agent-0309 | 9、12、18、31、56 | 2.5M、3.7M、6.2M、11M、21M |
| grok-imagine-image-2.0 | 6、12、25、50、100 | 表示なし |
| grok-imagine-video-1.5 | 10、20、39、79、158 | 表示なし |
音声は、grok-voice-3.0の同時セッション数が、Tier 0〜4で10、20、50、100、200です。Text to SpeechとSpeech to Textにも別の表があります。Speech to Speechは同時セッション数だけで制限されますが、その値の表は、読んだページにはありませんでした。
- 上限を上げる方法は、3つです。累計の支払いを増やす、Consoleで引き上げを依頼する(Tier 4を超える場合や、支払いを増やさずに上げたい場合)、sales@x.ai に連絡する。Imagine APIの引き上げは sales@x.ai を通る、と書かれています。
- 応答のヘッダー:レート制限の残りを知らせるヘッダー(
x-ratelimit-*など)は、公式のページには書かれていません。 - 429への備え:公式は、待ち時間を2の累乗で伸ばしながら再試行する、指数バックオフを勧めています。OpenAI SDKでは
RateLimitErrorを受け、2^試行回数秒待って最大5回、xai-sdkでは gRPC のRESOURCE_EXHAUSTEDを受けて同じ形、という説明です。公式のOpenAI SDK向けの例の形(回数の上限までくり返し、最後の試行では例外をそのまま投げ、それ以外は2 ** attempt秒待つ)を、僕らが短く書き直した断片は次のとおりです。公式の全文の写しではなく、実行していません。ベストプラクティスは、429と5xxの両方を、バックオフ付きで再試行するよう書いています。
import time
from openai import RateLimitError
def create_with_backoff(client, max_retries=5, **kwargs):
for attempt in range(max_retries):
try:
return client.responses.create(**kwargs)
except RateLimitError:
if attempt == max_retries - 1:
raise # 最後の試行は、そのまま投げる
time.sleep(2 ** attempt) # 1, 2, 4, 8 秒と伸ばす
この断片は429(RateLimitError)だけを扱います。5xxも再試行する場合は、その分の例外を足す必要があります(公式のベストプラクティスの勧めを、僕らが読み替えた点です)。
- Batch APIのリクエストは、レート制限に数えられない、とPricingのページにあります。
HTTPのエラー
公式のDebugging Errorsのページの表です。
| コード | 意味 | 公式が示す対処 |
|---|---|---|
| 400 | リクエストの形が悪い | 本文やURLを確かめる |
| 401 | 認証の失敗(ヘッダーがない、キーが無効) | Authorization: Bearer <キー> を付ける。必要ならコンソールで新しいキーを作る |
| 403 | アクセス拒否 | チームの管理者に権限を頼む |
| 404 | 見つからない | 本文とURLをリファレンスと照らす |
| 405 | HTTPのメソッドが違う | リファレンスで確かめる |
| 415 | 対応しない内容の種類 | 対処は書かれていない |
| 422 | 本文の項目の形式が不正 | 本文をリファレンスと照らす |
| 429 | 上限に達した | 送る頻度を下げる。コンソールで上限を上げる |
| 202(成功の一種) | 遅延リクエストが受け付けられたが、結果はまだ | 待ってから、もう一度取りに行く |
このページには、402(支払い関連)の記述、エラー本文の形、リクエストID、5xxの扱い、再試行の方針は書かれていませんでした。障害が疑われるときは status.x.ai(RSSは status.x.ai/feed.xml)を見る、バグの報告は support@x.ai か、Discordの #help へ、とあります。
8. 料金の見方
モデルごとの単価表(grok-4.7 の入力$2.00、キャッシュ入力$0.50、出力$6.00、プロンプトが200k以上だと$4.00、$1.00、$12.00、など)は、前のガイド(03)に載せました。2026年10月24日にPricingのページを読み直した範囲では、03の表と同じでした。ここでは、請求の「仕組み」を、公式の記述から並べます。
- 200kのしきい値:プロンプトが200kトークンに達すると、その1回のリクエストの全トークンが高い単価で数えられます。200kを超えた分だけ、ではありません。
- キャッシュ入力:キャッシュから出た入力は、安い単価で請求されます。Responses APIでは、会話の履歴が自動でキャッシュされます。キャッシュを効かせるには、同じ会話のリクエストに同じIDを付けます。Chat Completionsは
x-grok-conv-idヘッダー、Responses APIはprompt_cache_keyの欄です。どちらも、同じIDのリクエストを同じサーバーに寄せて、再利用の機会を増やします。公式の抜粋は次のとおりです。
# Chat Completions
extra_headers={"x-grok-conv-id": "conv_abc123"}
# Responses API
extra_body={"prompt_cache_key": "b79ad29b-b3f9-463c-bca6-041d5058d366"}
キャッシュに当たった量は、Responsesなら usage.input_tokens_details.cached_tokens で見ます。ゼロのままなら、キーが一定か、前の項目が変わっていないかを確かめる、とベストプラクティスにあります。会話には後ろへ足すだけにして、静的な指示や資料を先頭に置くのが公式の勧めです。公式は、キャッシュが効く最小のトークン数は書いていません。
- Batch API:対応するモデルで20%引き(入力、出力、キャッシュ、推論のトークン)。画像と動画は標準の料金です。
- Priority Processing:標準の2倍。応答に
"service_tier": "priority"が出たときだけです。 - 米国のエンドポイント:
grok-4.7とgrok-4.6で、トークンの料金が10%高い。 - 推論のトークン:出力の側として、請求に含まれます。
reasoning_tokensで見えます。 - ガイドライン違反の扱い:Pricingのページは、利用ガイドラインへの違反と判定されたリクエストも、生成の分は請求される、と書いています。Responses APIで、生成の前に違反が判定された場合は、1リクエストあたり$0.05の料金がかかる、とあります。判定の基準は、Acceptable Use Policyの側にあります(前のガイド02)。
- ツールの呼び出し:トークンとは別に請求されます(前のガイド04)。
自分の使った分を、リクエストごとに見る
応答の usage の中に cost_in_usd_ticks があります。公式は次のように書いています。
- 値はリクエストごとで、会話のターンをまたいで積み上がりません。合計は自分で足します。
- 割引(キャッシュなど)を引いたあとの、実際に請求される額で、トークンとサーバー側ツールの料金を含みます。
- ドルにするには
1e10で割ります。公式の例では、37,756,000ティックが約$0.0038、400,000,000ティックが$0.04(画像1枚)です。 - ストリーミングでは、OpenAI SDKやRESTは
stream_options: { include_usage: true }を付けると、最後のチャンク(choicesが空)に出ます。途中のチャンクにはありません。 - Batch APIは、結果にリクエストごとの費用が付き、バッチの
cost_breakdownでも見られます。
公式のPythonの断片です。
cost_ticks = completion.usage.cost_in_usd_ticks
cost_usd = cost_ticks / 1e10
print(f"Cost: ${response.cost_usd:.6f}") # xAI SDK
Responses APIのリファレンスには、usage.cost_in_nano_usd という欄もあります。2つの単位の関係は、読んだ範囲では、ティックのほうしか説明がありませんでした。Cost Trackingのページは、コンソールや請求の画面での合計の見方には触れていません。
9. データの扱い(APIの場合)
アプリ(grok.comなど)のデータの設定は、前のガイド(02)です。APIは、別の仕組みと別の文書です。同じアカウントでも、アプリのData Controlsの設定が、APIの扱いを決めるとは、読んだ範囲では書かれていません。
公式のFAQが書いていること
- 学習:公式は、APIの入力と出力を、明示の許可なしには学習に使わない、と書いています(「never trains … without your explicit permission」)。
- 既定の保存:APIのリクエストとレスポンスは、暗号化されて30日間保存され、不正や乱用の確認に使われます。学習には使われず、30日後に自動で削除されます。
- Grok Buildなど:Grok Build(CLI)は、
/privacyか/settingsで保存を止められ、ZDRなら、トレースとコードのデータは残りません。grok.comのBuildモードのチャットとセッションは、機能のために保存され、非公開にはできません。「improve the model」がオンなら、製品とモデルの改善に使われうる、とあります。 - 誰が見られるか:チームの管理者は、APIサーバーとのやりとりの監査ログを見て、検索できます。
ゼロデータ保持(ZDR)
公式は、ほとんどの顧客にはZDRを勧めず、コンプライアンス上、本当に必要なときだけ有効にするよう書いています。
- 意味:プロンプトと出力はディスクに書かれず、30日の監査用の保存も適用されません。
- 範囲:チーム全体の設定です。個別のAPIキーには付けられません。
- 有効にする手順(チーム管理者のみ):(1) チームのファイルとコレクションを、すべて削除する。残っていると、コンソールが有効化を止めます。(2) Team Settings を開いてZDRの行を見つけ、Enable を押す。(3) 確認事項と、Enterprise TermsとPrivacy Policyに同意する。無効にするときは、同じ行で Disable です。
- 使えなくなる機能:キー単位のリクエストのログ(既存の設定は解除される)、状態を持つResponses API(
store_messages、previous_response_id。履歴は自分で持つ)、Files API(新しいアップロードとfile_idの添付)、Collections API、Batch API、Deferred completions、サーバー側に保存される画像と動画の出力(base64か、自分の署名つきアップロードURLが必要)、音声エージェントの会話履歴。画像の生成は、grok-imagine系に限られ、エージェント型の画像生成は使えません。 - 確かめ方:Team Settingsに「Active」のバッジが出ます。チームの選択画面にZDRのバッジが出ます。APIの応答に、ヘッダー
x-zero-data-retention("true"か"false")が入ります。監査ログには管理上の出来事は残りますが、リクエストとレスポンスの中身は残りません。 - 戻せない点:ZDRのもとで削除された内容は、xAIでも復元も提出もできない、と公式は警告しています。
利用者を区別する「safety identifier」
自分のサービスの利用者が使うAPIなら、利用者ごとの、固定で不透明なID(ハッシュ化したもの。メール、電話番号、表示名は入れない)を、リクエストの safety_identifier に付けるよう、公式は書いています。これにより、規約違反が起きたとき、キー全体ではなく、その利用者に結びつけられます。ゲートウェイや、1つのキーを共有するサービスで特に重要です。古い user の欄も使えます。2026年9月のRelease Notesで、safety_identifier が Chat Completions、Responses API、Batch APIなどで受け付けられるようになりました。
米国のエンドポイント
https://us.api.x.ai/v1 は、全チームが使えて、既存のキーがそのまま通ります。対象は grok-4.7 と grok-4.6 だけで、他のモデル名(grok-latest を含む)は404になります。画像、動画、音声は使えません。保証されるのは、APIサーバーでのリクエストの処理、モデルの推論、安全のための審査、保存されるメタデータ・入力・出力の米国内での保存です。保証されないのは、Files、Collections、サーバー側ツール(Web検索、X検索、コード実行)、利用者側からの通信経路です。公式は「地域別のエンドポイントは、それだけでは、データの所在地の包括的な保証ではない」と書いています。契約上の要件があるときは、sales@x.ai に先に相談するよう案内されています。Python の xai_sdk には、完全なURLではなく us.api.x.ai を渡します。
企業向けの規約:読んだ範囲
FAQは、Enterprise Terms of Service と Data Processing Addendum(DPA)を、x.ai/legal の資料としています。2026年8月14日更新のEnterprise Terms of Serviceを、要約で読んだ範囲では、次のような記述がありました。僕らには、これがセルフサービスでコンソールから登録した人にも同じように適用されるのかは確認できていません。契約の内容は、必ず公式の原文で確かめてください。
- 入力の権利は利用者に残り、出力は利用者のものとされます。xAIは、サービスの提供、乱用の防止、安全とコンプライアンスのために、内容を保存、処理できます。
- 利用者のコンテンツ(入力と出力)を、基盤モデルの学習や新しい製品・サービス・機能づくりに使わない、と書かれています(開示事項と利用者の設定が前提)。匿名化や集計をしたデータは、ZDRのAPIを使う場合を除き、合法な目的に使えるとも書かれていますが、学習に使えるかは、要約を読んだ範囲では書かれていませんでした。一方、出力でAIモデルを学習することは、注文書で許されない限りできません。
- 前払いの料金は、既定では取り消せず、返金もされません。終了時、使っていない前払いクレジットは失われます。
- 利用者のコンテンツは、セッションの終了後30日以内に自動で削除されます。ZDRでは、応答の生成に必要な間だけ存在し、完了か配信の早いほうから1時間以内に削除される、とあります。
- 個人データを送るなら、DPAの処理者として扱われます。要約には、個人データはZDRを有効にしたAPIで処理しなければならず、そうしないと重大な違反になる、とありました。保護された健康情報は、別の契約(BAA)とZDRが必要です。
- 利用規約(Acceptable Use Policy)に従うこと、利用者の使い方をxAIが監視し、違反と見る入力と出力を、予告なしに制限できることも書かれています。
データとプライバシーのFAQは、SOC 2 Type 2に準拠していると書いています(詳細はNDAのもと、Trust Centerで)。HIPAAについては、準拠を主張しておらず、BAAの申請の道がある、という書き方です。GDPRについての記述は、読んだページにはありませんでした。
10. 最初の10分でやること(公式に書かれている範囲)
- console.x.ai でアカウントを作り、クレジットを追加する(Quickstart)。
- 「API Keys」でキーを1つ作り、
XAI_API_KEYに入れる。.envを使うなら、リポジトリに入れない(Quickstart、FAQ)。 - 上のcurlの例を、1回だけ実行する。応答の本文(curlなら
output、SDKならoutput_text)が返ってきたことを確かめ、次にusageの中のcost_in_usd_ticksを見て、1回のおおよその費用を知る(Quickstart、Cost Tracking)。ドルにするには1e10で割る。 - コンソールのModelsページで、自分のティアとモデルごとの上限を見る(Rate Limits)。
- 保存の扱いを決める。残してよいなら既定のまま、残したくないなら
store: false。チーム全体で止めたいなら、ZDRの副作用の表を先に読む(FAQ)。 - 利用者向けのサービスにするなら、
safety_identifierを付ける設計にする(FAQ)。
僕らの見立て:作る前に決めておくこと
ここは僕らの見立てで、公式の推奨そのものではありません。
- キーは、用途ごとに分ける。 公式の機能として、キーごとにモデルと上限を絞れます(Management API)。本番、試験、個人の実験で別のキーにしておくと、漏れたときの影響を絞れます。コンソールで同じことができるかは、僕らは読めていません。
- 履歴を自分で持つ前提で書く。
previous_response_idは便利ですが、30日で消え、ZDRでは使えません。後から保存の設定を変える可能性があるなら、最初から履歴を自分で保存する形のほうが、直しが少なくて済みます。 - 費用は、リクエストごとに自分で足す。
cost_in_usd_ticksは積み上がりません。呼び出しの記録に、そのまま保存しておくと、後から集計できます。たとえば次のような数行です(僕らが書いた例で、公式の例ではありません。実行していません)。
total_ticks = 0
response = client.responses.create(model="grok-4.7", input="...")
total_ticks += response.usage.cost_in_usd_ticks # 呼び出しごとに足す
print(f"累計: ${total_ticks / 1e10:.6f}")
- 429は、上限の値より、再試行の形で備える。 上限の値はチームごとに違い、変わります。公式の書くバックオフを、最初から入れておくのが無難です。
- 新しい資料を読むときは、
.mdを付ける。 docs.x.ai のページは、URLの末尾に.mdを付けると、Markdownで取れる、と公式のllms.txtに書かれています。公式のDocs MCP(前のガイド04)も、同じ目的に使えます。
気をつけること
- この記事は、実際に使って確かめた記録ではありません。運営者はGrokを入れていますが、使い心地はこの記事には書いていません。コードは公式の例の写しか、短い断片です。断片は、公式のページの記述をつないだもので、そのままでは動かないことがあります。
- console.x.ai は、取得に失敗しました。コンソールの画面の項目名は、docsの断片から拾ったもので、画面そのものは確かめていません。クレジットの追加、請求書、返金の手順の詳細は、読んだ範囲では見つかっていません。
- docs.x.ai のページには、更新日が書かれていないものが多くあります。Quickstartの更新日は、今回は確認できませんでした(前のガイド03は、ページの表示として2026年10月10日と書いています)。Enterprise Terms of Serviceだけは、2026年8月14日更新と読めました。
- Chat Completionsは、公式の移行ページが「Deprecated」と書き、別のページが「legacy」と書いています。終了の日付は、読んだ範囲では見つかりませんでした。新しく作るなら、Responses APIにしておくと、移行の手間が減ります(僕らの見立てです)。
- Responses APIのリファレンスのページは、
toolsを「functionsとweb search」と書きますが、Toolsの各ページには、より多くのツールが書かれています。リファレンスには、context_managementが「パースされるが、まだ実行されない」とあるなど、実装の途中に見える記述もあります。使う機能は、その機能のページで確かめてください。 - ZDRは、使えなくなる機能が多くあります。有効にする前に、ファイルとコレクションを全部消す必要があり、削除した内容は戻せません。
- 価格、上限、モデル名は、2026年10月24日に公式で読んだ表示です。公式は、モデルの提供が、地域やアカウントの上限などで変わる、と書いています。
- Management APIは、企業向けと説明されています。通常の個人のアカウントで使えるかは、確認できていません。
- これは、契約や法律、セキュリティの助言ではありません。規約とデータの扱いは、公式の原文で確かめ、必要なら専門家に相談してください。
出典
- Quickstart(docs.x.ai、ページに更新日の表示なし、2026年10月24日確認)
- Grok API Documentation: Overview(docs.x.ai、2026年10月24日確認)
- llms.txt(docs.x.ai、2026年10月24日確認)
- Migrating to Responses API(docs.x.ai、2026年10月24日確認)
- Chat Completions(Legacy)(docs.x.ai、2026年10月24日確認)
- Text Generation(docs.x.ai、2026年10月24日確認)
- Streaming(docs.x.ai、2026年10月24日確認)
- Reasoning(docs.x.ai、2026年10月24日確認)
- Structured Outputs(docs.x.ai、2026年10月24日確認)
- Best Practices Guide(docs.x.ai、2026年10月24日確認)
- Debugging Errors(docs.x.ai、2026年10月24日確認)
- Rate Limits(docs.x.ai、2026年10月24日確認)
- Pricing(docs.x.ai、ページに更新日の表示なし、2026年10月24日確認)
- Models(docs.x.ai、2026年10月24日確認)
- Cost Tracking(docs.x.ai、2026年10月24日確認)
- Prompt Caching: Maximizing Cache Hits(docs.x.ai、2026年10月24日確認)
- Regional Endpoints(docs.x.ai、2026年10月24日確認)
- mTLS Authentication(docs.x.ai、2026年10月24日確認)
- Data & Privacy FAQ(docs.x.ai、ページに日付の表示なし、2026年10月24日確認)
- General FAQ(docs.x.ai、2026年10月24日確認)
- Release Notes(docs.x.ai、2026年10月24日確認)
- Using Management API(docs.x.ai、2026年10月24日確認)
- Management API: Accounts and Authorization(docs.x.ai、2026年10月24日確認)
- Inference API: Models(docs.x.ai、2026年10月24日確認)
- Inference API: Account(docs.x.ai、2026年10月24日確認)
- Inference API: Responses(docs.x.ai、2026年10月24日確認)
- Platforms: Community Integrations(docs.x.ai、2026年10月24日確認)
- xai-org/xai-sdk-python(GitHub、2026年10月24日確認)
- Enterprise Terms of Service(x.ai、ページ表示の更新日 2026年8月14日、2026年10月24日確認)