GraphQLエンドポイント
すべてのGraphQLクエリは単一のエンドポイントに送信されます:
https://graphql.chainstream.io/graphql
POSTとGETの両方のメソッドがサポートされています。
| メソッド | Content-Type | ユースケース |
|---|
POST | application/json | すべてのクエリに推奨 — 変数と複雑なクエリをサポート |
GET | クエリ文字列(?query=...) | シンプルなクエリ、ブラウザテスト、キャッシュフレンドリー |
本番ワークロードにはPOSTを使用してください。GETリクエストはURLにクエリをエンコードするため、長さ制限があり複雑なクエリには不向きです。
X-API-KEYヘッダーにAPIキーを渡して認証します。REST Data APIと同じAPIキーを使用します — 別途の認証情報は不要です。
必須ヘッダー
| ヘッダー | 値 | 必須 |
|---|
Content-Type | application/json | はい(POST) |
X-API-KEY | cs_live_... | はい |
リクエスト形式
GraphQLリクエストボディは2つのフィールドを持つJSONオブジェクトです:
| フィールド | 型 | 説明 |
|---|
query | string | GraphQLクエリまたはミューテーション文字列 |
variables | object | $variable構文でクエリ内で参照されるオプションの変数 |
POSTの例
cURL
cURL(クエリファイル)
JavaScript (fetch)
Python (requests)
curl -X POST "https://graphql.chainstream.io/graphql" \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key" \
-d '{
"query": "query ($network: Network!) { DEXTrades(network: $network, limit: {count: 5}) { Block { Time } Trade { Buy { Currency { MintAddress } Amount } } } }",
"variables": { "network": "sol" }
}'
複雑なクエリの場合、クエリをファイルに保存して参照できます:# Save query to file
cat > query.graphql << 'EOF'
query ($network: Network!) {
DEXTrades(network: $network, limit: {count: 5}) {
Block { Time }
Trade {
Buy {
Currency { MintAddress }
Amount
}
}
}
}
EOF
# Send with variables
curl -X POST "https://graphql.chainstream.io/graphql" \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key" \
-d "{\"query\": \"$(cat query.graphql | tr '\n' ' ')\", \"variables\": {\"network\": \"sol\"}}"
const response = await fetch("https://graphql.chainstream.io/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your_api_key",
},
body: JSON.stringify({
query: `query ($network: Network!) {
DEXTrades(network: $network, limit: {count: 5}) {
Block { Time }
Trade { Buy { Currency { MintAddress } Amount } }
}
}`,
variables: { network: "sol" },
}),
});
const { data, extensions } = await response.json();
console.log(data.DEXTrades);
import requests
resp = requests.post(
"https://graphql.chainstream.io/graphql",
headers={
"Content-Type": "application/json",
"X-API-KEY": "your_api_key",
},
json={
"query": """query ($network: Network!) {
DEXTrades(network: $network, limit: {count: 5}) {
Block { Time }
Trade { Buy { Currency { MintAddress } Amount } }
}
}""",
"variables": {"network": "sol"},
},
)
data = resp.json()
print(data["data"]["DEXTrades"])
GETの例
curl -G "https://graphql.chainstream.io/graphql" \
-H "X-API-KEY: your_api_key" \
--data-urlencode 'query={ DEXTrades(network: sol, limit: {count: 5}) { Block { Time } } }'
対応ネットワーク
すべてのトップレベルCubeクエリでnetwork引数をenum値として渡します:
| Network Enum | ブロックチェーン | Chain ID |
|---|
sol | Solana | — |
eth | Ethereum | 1 |
bsc | BNB Chain (BSC) | 56 |
# Solana
{ DEXTrades(network: sol, limit: {count: 5}) { ... } }
# Ethereum
{ DEXTrades(network: eth, limit: {count: 5}) { ... } }
# BSC
{ DEXTrades(network: bsc, limit: {count: 5}) { ... } }
レスポンス形式
すべてのレスポンスは以下の構造のJSONです:
{
"data": {
"DEXTrades": [
{ "Block": { "Time": "2025-03-27T10:15:30Z" }, "..." : "..." }
]
},
"extensions": {
"credits": {
"total": 50,
"cubes": [
{ "cube": "DEXTrades", "credits": 50, "row_count": 5 }
]
}
}
}
| フィールド | 説明 |
|---|
data | クエリ結果 — クエリの形状に一致 |
errors | バリデーションまたは実行エラーがある場合のみ存在 |
extensions.credits.total | このクエリで消費された合計クレジットユニット |
extensions.credits.cubes | Cubeごとの内訳:Cube名、請求クレジット、返却行数 |
extensions.creditsフィールドはクレジットが消費された場合に含まれます。クレジットの計算方法の詳細は課金とクレジットをご覧ください。
エラーレスポンス
クエリが不正な場合や失敗した場合、レスポンスにはerrors配列が含まれます:
{
"data": null,
"errors": [
{
"message": "Unknown field 'InvalidField' on type 'DEXTrades'",
"locations": [{ "line": 3, "column": 5 }]
}
]
}
アプリケーションに統合する前に、GraphQL IDEを使用してクエリをインタラクティブに検証してください。IDEは自動補完とインラインエラーハイライトを提供します。
次のステップ
最初のクエリを実行
IDEまたはcURLからステップバイステップのチュートリアルに従って実際のクエリを実行します。
スキーマを探索
25のCube、フィールドタイプ、フィルタリングオペレータ、集計関数を詳しく見ます。