> ## Documentation Index
> Fetch the complete documentation index at: https://docs.teamsoclo.site/llms.txt
> Use this file to discover all available pages before exploring further.

# cURL / Python / Node.js

> 公式 OpenAI ライブラリで API を直接呼ぶ

公式の OpenAI ライブラリはすべて使えます。変えるのは `base_url` だけです。例は `gpt-5.6-sol` を使用。Astra プランでは `gpt-astra` にします。

## Chat Completions

<CodeGroup>
  ```bash cURL theme={null}
  curl https://gpt.teamsoclo.site/v1/chat/completions \
    -H "Authorization: Bearer sk-xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "gpt-5.6-sol",
      "messages": [
        {"role": "system", "content": "あなたは親切なアシスタントです。"},
        {"role": "user", "content": "JavaScript のクロージャを説明して"}
      ]
    }'
  ```

  ```python Python theme={null}
  from openai import OpenAI

  client = OpenAI(
      api_key="sk-xxx",
      base_url="https://gpt.teamsoclo.site/v1",
  )

  resp = client.chat.completions.create(
      model="gpt-5.6-sol",
      messages=[
          {"role": "system", "content": "あなたは親切なアシスタントです。"},
          {"role": "user", "content": "JavaScript のクロージャを説明して"},
      ],
  )

  print(resp.choices[0].message.content)
  print(resp.usage)
  ```

  ```javascript Node.js theme={null}
  import OpenAI from "openai"

  const client = new OpenAI({
    apiKey: "sk-xxx",
    baseURL: "https://gpt.teamsoclo.site/v1",
  })

  const resp = await client.chat.completions.create({
    model: "gpt-5.6-sol",
    messages: [
      { role: "system", content: "あなたは親切なアシスタントです。" },
      { role: "user", content: "JavaScript のクロージャを説明して" },
    ],
  })

  console.log(resp.choices[0].message.content)
  console.log(resp.usage)
  ```
</CodeGroup>

<Warning>
  `base_url` には `/v1` を含め、末尾に `/` を**付けない**でください。ライブラリが `/chat/completions` を自動で付けます。
</Warning>

レスポンスは OpenAI のスキーマそのままです: `id` は `chatcmpl-...`、`usage` には `prompt_tokens`、`completion_tokens`、`completion_tokens_details.reasoning_tokens` が入ります。残高は `usage.total_tokens` の分だけ正確に引かれます。

## Responses API

Codex や新しい SDK はこのプロトコルを使います。推論設定は `reasoning.effort` に置きます。

<CodeGroup>
  ```bash cURL theme={null}
  curl https://gpt.teamsoclo.site/v1/responses \
    -H "Authorization: Bearer sk-xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "gpt-5.6-sol",
      "input": "素数判定をする Python 関数を書いて",
      "reasoning": {"effort": "medium"}
    }'
  ```

  ```python Python theme={null}
  resp = client.responses.create(
      model="gpt-5.6-sol",
      input="素数判定をする Python 関数を書いて",
      reasoning={"effort": "medium"},
  )
  print(resp.output_text)
  ```
</CodeGroup>

## 推論の強さ

Chat Completions では `reasoning_effort`（`low`、`medium`、`high`）を使います。未指定ならゲートウェイは `high` を使います。簡単な作業は `low` にしてトークンを節約できます:

```python theme={null}
resp = client.chat.completions.create(
    model="gpt-5.6-sol",
    reasoning_effort="low",
    messages=[{"role": "user", "content": "英語に翻訳して: おはよう"}],
)
```

<Warning>
  `reasoning_effort` は Chat Completions 専用です。Responses API では `reasoning: {"effort": ...}` を使います。`/v1/responses` に `reasoning_effort` を送ると「Unsupported parameter」で拒否されます。
</Warning>

## ストリーミング

<CodeGroup>
  ```python Python theme={null}
  stream = client.chat.completions.create(
      model="gpt-5.6-sol",
      messages=[{"role": "user", "content": "秋についての短い文章を書いて"}],
      stream=True,
      stream_options={"include_usage": True},
  )

  for chunk in stream:
      if chunk.choices and chunk.choices[0].delta.content:
          print(chunk.choices[0].delta.content, end="", flush=True)
      if chunk.usage:
          print("\n", chunk.usage)
  ```

  ```bash cURL theme={null}
  curl https://gpt.teamsoclo.site/v1/chat/completions \
    -H "Authorization: Bearer sk-xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "gpt-5.6-sol",
      "messages": [{"role": "user", "content": "秋についての短い文章を書いて"}],
      "stream": true,
      "stream_options": {"include_usage": true}
    }'
  ```
</CodeGroup>

<Tip>
  難しい質問ではモデルが最初のトークンを出す前に長く考えることがあります。`stream: true` にすると接続が切られません。`stream_options.include_usage` で最後のチャンクに `usage` が付き、残高を自分で照合できます。
</Tip>

## 画像の送信（画像入力）

画像は `content` 配列に入れます。公開 URL か、ローカルファイルの base64 です。

<CodeGroup>
  ```python 画像 URL theme={null}
  resp = client.chat.completions.create(
      model="gpt-5.6-sol",
      messages=[{
          "role": "user",
          "content": [
              {"type": "text", "text": "この画像はどんなエラーですか？"},
              {"type": "image_url", "image_url": {"url": "https://example.com/screenshot.png"}},
          ],
      }],
  )
  print(resp.choices[0].message.content)
  ```

  ```python ローカルファイル（base64） theme={null}
  import base64

  with open("screenshot.png", "rb") as f:
      b64 = base64.b64encode(f.read()).decode()

  resp = client.chat.completions.create(
      model="gpt-5.6-sol",
      messages=[{
          "role": "user",
          "content": [
              {"type": "text", "text": "この画像はどんなエラーですか？"},
              {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
          ],
      }],
  )
  print(resp.choices[0].message.content)
  ```
</CodeGroup>

<Warning>
  画像はサイズに応じてトークンを消費します。4K のスクリーンショットをそのまま送らず、必要な部分だけ切り抜いてください。
</Warning>

## API でモデルと残高を見る

```bash theme={null}
# このキーが呼べるモデル
curl https://gpt.teamsoclo.site/v1/models -H "Authorization: Bearer sk-xxx"

# 残高（OpenAI 旧エンドポイント）
curl https://gpt.teamsoclo.site/v1/dashboard/billing/subscription -H "Authorization: Bearer sk-xxx"
curl https://gpt.teamsoclo.site/v1/dashboard/billing/usage -H "Authorization: Bearer sk-xxx"
```

`subscription` は総額を `hard_limit_usd` で、`usage` は使用量を `total_usage` で返します。後者は**セント単位**なので比較前に 100 で割ってください。[確認ページ](https://gpt.teamsoclo.site/check)なら自動で計算されます。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.