20_API仕様
本章では、filix-shadowwork-api が提供する Application Programming Interface(API)の外部仕様を定義する。
各エンドポイントの目的、入力、出力、認証、およびエラー形式を示し、フロントエンドとの契約(contract)とする。
共通仕様
ベースURL
- 環境ごとに異なる(例: Cloudflare Workers のデプロイ先)
- 以降のパスはすべてベースURL配下の相対パスとして記載する
Content-Type
- リクエストボディがある場合は原則
application/json - レスポンスは原則
application/json
認証(Authentication)
本APIは、ユーザー識別子(user_id)をもとに処理対象を特定する。
認証方式(トークン等)や user_id の受け渡し方法は、セキュリティ要件とあわせて 50_セキュリティ に記載する。
注: 本章では「どの方式で認証するか」ではなく、API契約として「どの情報が必要か」「どう返すか」を記載する。
利用権限(Authorization / 利用権限)
有料状態(paid)などの利用権限は、各機能のアクセス可否に影響する。
paid判定や webhook 反映の詳細は 40_課金と利用権限 に記載する。
クエリパラメータ
GETの取得系ではクエリパラメータを使用する場合がある(詳細は各エンドポイント)
共通エラー形式(Error response)
すべてのエンドポイントは、失敗時に共通の JSON 形式でエラーを返す。
{
"ok": false,
"error": {
"code": "BAD_REQUEST",
"message": "説明文(人間向け)"
}
}
ok: 成否フラグ(失敗時はfalse)error.code: エラー種別(例:BAD_REQUEST,UNAUTHORIZED,FORBIDDEN,NOT_FOUND,INTERNAL_ERROR)error.message: 画面表示やログのための説明文
HTTPステータスはエラー種別に応じて設定する(例: 400/401/403/404/500)。
※実装上のステータス割当は変更され得るが、成功時に ok: true を返すこと、失敗時に上記形式を返すことを契約とする。
エンドポイント一覧
ヘルスチェック
GET /
サービス稼働確認。
課金・利用権限
GET /api/paid
指定ユーザーの paid 状態を返す。POST /api/admin/set_paid
管理用途。指定ユーザーの paid 状態を更新する。
スレッド(thread)
POST /api/thread/start
スレッド開始。POST /api/thread/message
スレッドにメッセージを追加し、必要に応じて応答を返す。GET /api/thread/state
スレッド状態取得。POST /api/thread/close
スレッド終了。GET /api/thread/messages
スレッドのメッセージ一覧取得。
実行(run)
POST /api/run/start
実行開始。POST /api/run/restart
実行再開(続きから進める想定)。GET /api/runs/list
実行一覧取得。
スレッド一覧
GET /api/threads/list
スレッド一覧取得。
LLM(管理・検証用途)
POST /api/llm/ping
LLM疎通確認。POST /api/llm/respond
LLM応答生成(検証・開発用途を想定)。
エンドポイント仕様(詳細)
以下は「最低限の契約」を示す。
リクエスト/レスポンスの厳密なフィールド定義(JSON schema)は必要になった段階で追加する。
GET /
目的: 稼働確認。
認証: 不要。
成功レスポンス例:
{ "ok": true }
GET /api/paid
目的: 指定ユーザーの paid 状態を返す。
認証: 必要(方式は 50_セキュリティ)。
入力: クエリ
- user_id(必須)
成功レスポンス例:
{ "ok": true, "paid": true }
POST /api/admin/set_paid
目的: 管理用途で paid 状態を更新する。
認証: 管理者向けの制限が必要(詳細は 60_利用制限と運用ポリシー または 50_セキュリティ)。
入力: JSON(例)
{ "user_id": "xxx", "paid": true }
成功レスポンス例:
{ "ok": true }
POST /api/thread/start
目的: シャドウワークのスレッドを開始する。
認証: 必要。
入力: JSON(例)
{ "user_id": "xxx" }
成功レスポンス(例):
{ "ok": true, "thread_id": "t_xxx", "run_id": "r_xxx" }
POST /api/thread/message
目的: スレッドにメッセージを追加し、必要に応じて応答を返す。
認証: 必要。
入力: JSON(例)
{ "user_id": "xxx", "thread_id": "t_xxx", "message": "text" }
成功レスポンス(例):
{ "ok": true, "reply": "text", "thread_state": { } }
GET /api/thread/state
目的: スレッドの状態を取得する。
認証: 必要。
入力: クエリ(例)
- user_id(必須)
- thread_id(必須)
成功レスポンス(例):
{ "ok": true, "state": { } }
POST /api/thread/close
目的: スレッドを終了する。
認証: 必要。
入力: JSON(例)
{ "user_id": "xxx", "thread_id": "t_xxx" }
成功レスポンス(例):
{ "ok": true }
GET /api/thread/messages
目的: スレッドに紐づくメッセージ一覧を取得する。
認証: 必要。
入力: クエリ(例)
- user_id(必須)
- thread_id(必須)
成功レスポンス(例):
{ "ok": true, "messages": [ { } ] }
POST /api/run/start
目的: 実行(run)を開始する。
認証: 必要。
入力: JSON(例)
{ "user_id": "xxx" }
成功レスポンス(例):
{ "ok": true, "run_id": "r_xxx" }
POST /api/run/restart
目的: 実行(run)を再開する。
認証: 必要。
入力: JSON(例)
{ "user_id": "xxx", "run_id": "r_xxx" }
成功レスポンス(例):
{ "ok": true, "run_id": "r_xxx" }
GET /api/runs/list
目的: 指定ユーザーの実行(run)一覧を返す。
認証: 必要。
入力: クエリ(例)
- user_id(必須)
成功レスポンス(例):
{ "ok": true, "runs": [ { } ] }
GET /api/threads/list
目的: 指定ユーザーのスレッド一覧を返す。
認証: 必要。
入力: クエリ(例)
- user_id(必須)
成功レスポンス(例):
{ "ok": true, "threads": [ { } ] }
POST /api/llm/ping
目的: LLM疎通確認。
認証: 原則必要(開発用途のため制限推奨)。
入力: JSON(必要なら)
{ "ok": true }
POST /api/llm/respond
目的: LLM応答生成(検証用途)。
認証: 原則必要(開発用途のため制限推奨)。
入力: JSON(例)
{ "prompt": "text" }
成功レスポンス(例):
{ "ok": true, "reply": "text" }
備考(実装との整合性)
- 各リクエスト/レスポンスの詳細フィールドは、実装の進展に合わせて追記する。
- 本章は「詳細設計」ではなく、フロントとバックの契約として必要な事項に限定して記載する。