APIリファレンス

LuxenoはOpenAI互換エンドポイントを2つ、Anthropic互換エンドポイントを1つ提供しています。すべてのエンドポイントは標準的なJSONリクエストボディを受け付け、標準的なJSONレスポンスを返します。

認証

すべてのリクエストにLuxenoのAPIキーを含める必要があります。2種類のヘッダー形式に対応していますので、お使いのクライアントライブラリに合わせてご利用ください。

Bearerトークン(推奨)

curl https://api.luxeno.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-silk-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"model":"luxeno/glm-4-flash","messages":[{"role":"user","content":"Hello"}]}'

x-api-keyヘッダー

curl https://api.luxeno.ai/v1/chat/completions \
  -H "x-api-key: sk-silk-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"model":"luxeno/glm-4-flash","messages":[{"role":"user","content":"Hello"}]}'

APIキーの取得

ダッシュボードの /keys ページでAPIキーの作成・管理ができます。キーは /keys sk-silk-

サプライヤーの選択 (マーケットプレイス)

Luxenoは同じモデルに対して複数のサプライヤーをサポートしています。デフォルトでは既存の 'luxeno/X' 呼び出しはそのまま動作します。特定のサプライヤーを固定するには、モデルに 'lux-X/' プレフィックスを付けてください (例: 'lux-alpha/luxeno/glm-4-flash')。

デフォルトルーティング: luxeno/glm-4-flash後方互換性 — 既存の 'luxeno/X' 呼び出しは標準のアップストリームルーティングパスを介してそのまま動作します。コードの変更は不要です。
固定サプライヤー: lux-alpha/luxeno/glm-4-flash指定したサプライヤーのみにルーティング。サプライヤーがオフライン、このモデルを提供していない、または存在しない場合はエラーを返します。固定する前に /status でライブの可用性を確認してください。

サプライヤーを固定すると価格が変わる可能性があります — 各サプライヤーが独自のマークアップを設定します。現在のサプライヤー別レートは /pricing をご覧ください。

マーケットプレイスサプライヤーの価格 + 健康状態:

モデルと料金

料金はすべてUSDで100万トークンあたりの価格です。入力トークンと出力トークンの料金が異なる場合は、それぞれ別途請求されます。

Tier alias(推奨)

特定モデルを指定せず、tier 単位でルーティングできます。Luxeno がその tier のデフォルトモデルへ自動振り分けします:

  • luxeno/shun = 瞬 Shun
  • luxeno/hyou = 標 Hyō (★人気)
  • luxeno/chi = 智 Chi
  • luxeno/kyoku = 極 Kyoku

旧 alias (luxeno/lite, luxeno/core, luxeno/reason, luxeno/premium) は引き続きサポートされます。新規プロジェクトでは luxeno/shun, luxeno/hyou, luxeno/chi, luxeno/kyoku のご利用を推奨します。

OpenAI互換エンドポイント

標準モデル

モデル入力出力エンドポイント
luxeno/glm-4-flash$0.30/1M$0.30/1M/v1/chat/completions
luxeno/glm-4$0.50/1M$0.50/1M/v1/chat/completions

標準モデルはキャッシュを含むすべての入力トークンに同一料金が適用されます。

キャッシュ対応モデル

モデル入力出力キャッシュ読取キャッシュ書込キャッシュストレージエンドポイント
luxeno/claude-sonnet$3.00/1M$15.00/1M$0.30/1M$3.75/1M/v1/chat/completions

Anthropic互換エンドポイント

標準モデル

モデル入力出力エンドポイント
claude-sonnet-4-20250514$0.30/1M$0.30/1M/v1/messages
glm-4-flash$0.30/1M$0.30/1M/v1/messages
glm-4.7$0.50/1M$0.50/1M/v1/messages
glm-5$0.50/1M$0.50/1M/v1/messages

標準モデルはキャッシュを含むすべての入力トークンに同一料金が適用されます。

claude-sonnet-4-20250514, glm-4-flashclaude-sonnet-4-20250514、glm-4-flashなどのAnthropicフォーマットのモデルは、ZhipuのAnthropic互換エンドポイントを経由して同じ$0.30/1Mレートで提供されています — ネイティブのAnthropicより大幅に安価です。

POST /v1/chat/completions

OpenAI互換のチャットエンドポイントです。openai.chat.completions.create() と同じリクエストスキーマを受け付けます — ベースURLとモデル名を変更するだけで置き換えられます。

リクエスト

POST /v1/chat/completions
POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer sk-silk-xxxxxxxxxxxx

{
  "model": "luxeno/glm-4-flash",
  "messages": [
    { "role": "system", "content": "You are a helpful assistant." },
    { "role": "user",   "content": "Explain quantum entanglement in one sentence." }
  ],
  "temperature": 0.7,
  "max_tokens": 256
}

レスポンス

200 OK
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1748000000,
  "model": "luxeno/glm-4-flash",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Quantum entanglement is a phenomenon where two particles become correlated such that measuring one instantly determines the state of the other, regardless of distance."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 38,
    "total_tokens": 69
  }
}

ストリーミング (SSE)

"stream": true を設定するとサーバー送信イベントを受信できます。[DONE] の直前の最後のチャンクには、請求の透明性のために usage オブジェクトが含まれます。

Streaming example
POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer sk-silk-xxxxxxxxxxxx

{
  "model": "luxeno/glm-4-flash",
  "messages": [{ "role": "user", "content": "Count to five." }],
  "stream": true
}

--- SSE response ---
data: {"id":"chatcmpl-xyz","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant","content":"1"},"index":0}]}

data: {"id":"chatcmpl-xyz","object":"chat.completion.chunk","choices":[{"delta":{"content":", 2"},"index":0}]}

data: {"id":"chatcmpl-xyz","object":"chat.completion.chunk","choices":[{"delta":{},"finish_reason":"stop","index":0}],"usage":{"prompt_tokens":12,"completion_tokens":10}}

data: [DONE]

POST /v1/messages

Anthropic Messages API互換のエンドポイントです。公式のAnthropic SDKと同じリクエストスキーマを受け付けます。Anthropic APIを直接呼び出すツール(Claude Code、AnthropicモードのCursorなど)でご利用いただけます。

anthropic-versionヘッダー

リクエストに anthropic-version: 2023-06-01 を含めてください。省略した場合、ゲートウェイが自動的にそのバージョンをデフォルトとして使用します。

リクエスト

POST /v1/messages
POST /v1/messages
Content-Type: application/json
Authorization: Bearer sk-silk-xxxxxxxxxxxx
anthropic-version: 2023-06-01

{
  "model": "claude-sonnet-4-20250514",
  "max_tokens": 1024,
  "system": "You are a concise technical writer.",
  "messages": [
    { "role": "user", "content": "What is a B-tree index?" }
  ]
}

レスポンス

200 OK
{
  "id": "msg_01AbCdEf",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "A B-tree index is a balanced tree data structure that maintains sorted data and allows searches, insertions, deletions, and range queries in O(log n) time."
    }
  ],
  "model": "claude-sonnet-4-20250514",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 24,
    "output_tokens": 42
  }
}

ストリーミングSSEイベントの種類

AnthropicのSSEは単一の data: ストリームではなく、名前付きイベントタイプを使用します。主なイベント:

  • message_start message.usage.input_tokens に入力トークン数が含まれます
  • content_block_delta delta.text にテキストチャンクが含まれます
  • message_delta usage.output_tokens に出力トークン数が含まれます
  • message_stop ストリームの終了を示します
Anthropic SSE stream
data: {"type":"message_start","message":{"id":"msg_01AbCd","type":"message","role":"assistant","usage":{"input_tokens":24,"output_tokens":0}}}

data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"A B-tree index"}}

data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" is a balanced tree..."}}

data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":42}}

data: {"type":"message_stop"}

SDK 互換性

Luxeno は Anthropic および OpenAI 公式 SDK(Python・TypeScript)の User-Agent をすべて受け入れます。api_key と base_url を上書きするだけで、フォークやプロキシなしに各 SDK から Luxeno を直接呼び出せます。

base_url の指定がよくある落とし穴

Anthropic SDK は内部で /v1/messages を付加します — base_url は https://api.luxeno.ai を指定してください(末尾の /v1 不要)。OpenAI SDK は base_url に /v1 を含める必要があります — https://api.luxeno.ai/v1 を指定してください。

Python — Anthropic SDK

Python — anthropic SDK
from anthropic import Anthropic

# Anthropic SDK appends /v1/messages internally — set base_url WITHOUT /v1
client = Anthropic(
    api_key="sk-silk-...",
    base_url="https://api.luxeno.ai",
)

msg = client.messages.create(
    model="claude-haiku-4-5-20251001",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(msg.content[0].text)

Python — OpenAI SDK

Python — openai SDK
from openai import OpenAI

# OpenAI SDK requires base_url to INCLUDE /v1
client = OpenAI(
    api_key="sk-silk-...",
    base_url="https://api.luxeno.ai/v1",
)

resp = client.chat.completions.create(
    model="luxeno/glm-4-flash",
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)

TypeScript — Anthropic SDK

TypeScript — @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "sk-silk-...",
  baseURL: "https://api.luxeno.ai",
});

const msg = await client.messages.create({
  model: "claude-haiku-4-5-20251001",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});
console.log(msg.content[0].text);

TypeScript — OpenAI SDK

TypeScript — openai
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-silk-...",
  baseURL: "https://api.luxeno.ai/v1",
});

const resp = await client.chat.completions.create({
  model: "luxeno/glm-4-flash",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);

レート制限

各ユーザーアカウントは、/v1/chat/completions と /v1/messages の両エンドポイントを合わせて1分間に60リクエストまでに制限されています(スライディングウィンドウ方式)。

429 response
HTTP/1.1 429 Too Many Requests
Retry-After: 12
Content-Type: application/json

{
  "error": {
    "message": "Rate limit exceeded",
    "type": "rate_limit_error",
    "code": 429
  }
}

Retry-After

再試行の前に必ず Retry-After ヘッダー(秒単位の値)を確認してください。即座に再試行しても拒否され、制限のカウントに含まれます。

エラーコード

すべてのエラーはOpenAI形式のエンベロープに従います:{ error: { message, type, code } }。/v1/messages エンドポイントのAnthropic形式のエラーは { type: 'error', error: { type, message } } を使用します。

ステータス種別原因対処法
400invalid_request_errorモデル名が不正またはリクエストボディが不正モデル名とリクエストスキーマを確認してください
401authentication_errorAPIキーがないか無効ダッシュボードでキーを確認してください
402payment_requiredアカウント残高がゼロ/billing で残高をチャージしてください
429rate_limit_error1分60リクエストの制限を超過Retry-Afterヘッダーに従ってください
500api_error予期しないサーバーエラー指数バックオフで再試行してください
503api_error上流ゲートウェイが利用不可再試行してください。ステータスページを確認してください

プレイグラウンド

ブラウザから直接APIを試すことができます。プレイグラウンドは最初に有効なAPIキーを使用して /api/v1/chat/completions を呼び出します。リクエストは通常の料金でアカウントに請求されます。

プレイグラウンドを読み込み中...