Skip to content

REST インターフェース ​

特別な記載がない限り、すべてのインターフェースはリクエストヘッダーにテナント API Key が必要です:

Authorization: Bearer <テナントAPI Key>

既定のアドレスは http://localhost:8787、デモテナントは demo(apiKey は初回起動時にランダム生成されログに出力されます)。このページは連携開発の参考であり、 通常のユーザーは気にする必要はありません。

サーバーの起動 ​

bash
# モデル Key なしでも起動可能(認証/セッション/インターフェースは試せる。会話だけエラーになる)
pnpm run server

# 実際のモデルを使う(推奨)
OPENAI_API_KEY=sk-... OPENAI_MODEL=gpt-4o-mini pnpm run server

主な環境変数:PORT(既定 8787)、DATA_DIR(既定 ./.zqagent_data)、 APPROVAL_TIMEOUT_SECONDS(承認/質問の保留タイムアウト、既定 900)、 TENANT_ID / TENANT_API_KEY / MODEL(デモテナント)。

認証 ​

bash
export BASE=http://localhost:8787
export TOKEN=zk_xxxx   # 起動ログ「已创建演示租户」の行の apiKey

# ヘルスチェック(公開)
curl -s $BASE/healthz                 # => {"status":"ok"}

# Key なし → 401
curl -s -o /dev/null -w "%{http_code}\n" $BASE/api/v1/sessions   # => 401

# 正しい Key → 200
curl -s -o /dev/null -w "%{http_code}\n" -H "Authorization: Bearer $TOKEN" $BASE/api/v1/sessions

主要エンドポイント早見表 ​

セッション ​

メソッドパス説明
GET/healthzヘルスチェック(公開)
POST/api/v1/sessionsセッションを作成
GET/api/v1/sessionsセッションを一覧
GET/api/v1/sessions/{id}セッションを取得
PATCH/api/v1/sessions/{id}セッション名を変更
DELETE/api/v1/sessions/{id}セッションを削除
GET/api/v1/sessions/{id}/stateセッション状態(保留中の承認/質問を含む)
PATCH/api/v1/sessions/{id}/modelセッションのモデルを切り替え
PATCH/api/v1/sessions/{id}/mode権限モードを切り替え(plan / interactive / auto / discuss)
PATCH/api/v1/sessions/{id}/draft入力欄の下書きを保存(空文字でクリア)
POST/api/v1/sessions/{id}/turnsタスクを投入
POST/api/v1/sessions/{id}/steer実行中に補足情報
POST/api/v1/sessions/{id}/interrupt現在のタスクを中断
POST/api/v1/sessions/{id}/resumeセッションを再開
GET/api/v1/sessions/{id}/eventsイベントストリーム(ポーリングまたは SSE、?since= で差分)
GET/api/v1/sessions/{id}/approvals承認待ち一覧
POST/api/v1/sessions/{id}/approvals/{aid}承認に回答
GET/api/v1/sessions/{id}/questions回答待ち一覧
POST/api/v1/sessions/{id}/questions/{qid}質問に回答

プロジェクトとノード ​

メソッドパス説明
GET / POST/api/v1/projectsプロジェクトの一覧 / 作成(作成時に作業ディレクトリを指定)
DELETE/api/v1/projects/{id}プロジェクトを削除
GET/api/v1/models利用可能なモデル一覧
GET / PUT/api/v1/configノード設定の表示 / 更新
GET / PUT/api/v1/node/llmノード既定モデルの表示 / 設定
GET/api/v1/node/hostノードホスト情報
GET/api/v1/toolsツール一覧
GET/api/v1/mcpMCP サーバー一覧
PUT/api/v1/mcpMCP 設定を一括置換(プロジェクトの .agent/mcp.json に書き込み。プラットフォーム配信時は 409)
POST/api/v1/mcp/test単一 MCP サーバーの接続テスト(保存なし)

使用量とコスト ​

メソッドパス説明
GET/api/v1/usage/summary使用量サマリー(期間 / モデル別)
GET/api/v1/usage/records明細レコード
GET/api/v1/usage/exportCSV エクスポート
GET / PUT/api/v1/usage/pricing価格表の表示 / 変更
POST/api/v1/usage/rebuildサマリーを再構築
POST/api/v1/usage/verify台帳を検証

リモート接続とペアリング ​

メソッドパス説明
GET/api/v1/fleet/statusノード接続状態
POST/api/v1/fleet/enroll接続コードで接続(zqagent link が呼ぶ)
POST/api/v1/fleet/unlink接続を解除
GET/api/v1/fleet/pairingクラウド接続のペアリング情報(ゲートウェイアドレス + 名前空間/キー + nodeId)
GET / POST/api/v1/notifications通知チャネルの表示 / 追加
DELETE/api/v1/notifications/{id}通知チャネルを削除

クイックスタート ​

bash
# セッションを作成
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o-mini"}' $BASE/api/v1/sessions
# => {"data":{"sessionId":"e4df66d6...","status":"idle",...}}

export SID=e4df66d6...   # 返された sessionId に置き換え

# タスクを投入(即時返却、バックグラウンドで非同期実行)
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"input":"こんにちは、自己紹介してください"}' $BASE/api/v1/sessions/$SID/turns
# => {"data":{"accepted":true,"status":"running"}}

# イベントをポーリング(since カーソルで差分取得)
curl -s "$BASE/api/v1/sessions/$SID/events?since=0"

# リアルタイム購読(SSE)
curl -N -H "Authorization: Bearer $TOKEN" -H "Accept: text/event-stream" \
  $BASE/api/v1/sessions/$SID/events

セッションがタスク実行中の場合、POST /turns は自動的に補足情報として現在のタスクに注入されます ({"data":{"accepted":true,"status":"steering"}} を返す)。エラーにはなりません。

承認と質問 ​

モデルが副作用のある操作(ファイル書き込み、コマンド実行など)を要求すると保留して承認を待ちます。ask_user などのツールを呼ぶと 保留して回答を待ちます。

bash
# 承認待ち一覧を表示(id はツール呼び出し ID)
curl -s -H "Authorization: Bearer $TOKEN" $BASE/api/v1/sessions/$SID/approvals

# 承認に回答:once | always_tool | always_command | deny
#   always_command は run_shell のみ有効
export AID=call_xxx
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"decision":"once"}' $BASE/api/v1/sessions/$SID/approvals/$AID

# 質問に回答
curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"answer":"続けて"}' $BASE/api/v1/sessions/$SID/questions/qid_xxx

マルチテナント分離 ​

各テナントは自分の API Key で自分のセッションにアクセスします。テナント A の Key でテナント B のセッションにアクセスすると 404 を返します。

エラーコード早見表 ​

HTTPcode状況
401unauthorizedKey なし / Key 無効
404not_foundセッションが存在しない / 未知のルート / テナント越えアクセス
409not_running明示的な steer 時にセッションが実行中でない
409has_pending_interaction未決の承認/質問があり、新しいタスクを投入できない
400bad_requestbody が不正な JSON / input が空
400invalid_decisiondecision が不正、または run_shell 以外に always_command を送信