REST API リファレンス
FastAPI が /docs で OpenAPI Swagger UI を、/openapi.json でスキーマを自動配信します。全ての業務エンドポイントは /api/v1/... 配下です (既定 http://localhost:8000)。以下は主要なものです。
システム
| method | path | 説明 |
|---|---|---|
| GET | /api/v1/health | 軽量ヘルスチェック (LB用)。{ok, version}。 |
| GET | /api/v1/status | version / mode / db_url / now。 |
| GET | /api/v1/runs?limit=N | 全 workload 横断の直近N件の run (最大1000)。 |
ワークロード
| method | path | 説明 |
|---|---|---|
| GET | /api/v1/workloads | 一覧を取得。 |
| POST | /api/v1/workloads | 新規作成 (slug 重複は409)。 |
| GET | /api/v1/workloads/{slug} | 1件取得。 |
| PUT | /api/v1/workloads/{slug} | 更新。 |
| PATCH | /api/v1/workloads/{slug}/enabled | enabled をトグル。 |
| PATCH | /api/v1/workloads/{slug}/supervisor_enabled | supervisor 介入の許可をトグル。 |
| DELETE | /api/v1/workloads/{slug} | 削除 (204)。 |
| POST | /api/v1/workloads/{slug}/tasks | タスクを1件投入。 |
| POST | /api/v1/workloads/{slug}/tasks/batch | バルク投入 (最大10000)。 |
| GET | /api/v1/workloads/{slug}/queue | state 別のキュー件数。 |
| GET | /api/v1/workloads/{slug}/queue/peek | キュー行を覗く (limit/offset/state)。 |
| POST | /api/v1/workloads/{slug}/queue/reset-failed | failed を pending に戻す。 |
| GET | /api/v1/workloads/{slug}/runs?limit=N | run 履歴 (最大500)。 |
ワーカー
| method | path | 説明 |
|---|---|---|
| GET | /api/v1/workers | 一覧を取得。 |
| GET | /api/v1/workers/cpu | worker/host 別 CPU% + クラスタ最大。 |
| GET | /api/v1/workers/metrics?minutes=N | GPU メトリクス時系列。 |
| POST | /api/v1/workers/{id}/restart | SSH で worker を再起動 (watchdog)。 |
| POST | /api/v1/workers/{id}/filter | worker の workload filter を変更 (replace/add/remove)。 |
| GET | /api/v1/workers/elastic/inventory | systemd instance の棚卸し。 |
| POST | /api/v1/workers/elastic/spawn | worker instance を起動。 |
| POST | /api/v1/workers/elastic/stop | worker instance を停止。 |
この他、worker daemon が使う内部エンドポイント (heartbeat / claim / complete / fail / runs / config poll / admin-cmd) が /api/v1/workers/{id}/... 配下にあります。
Dashboard / Flow
| method | path | 説明 |
|---|---|---|
| GET | /api/v1/dashboard/overview | running / recent_failures / queue_depths の集約。 |
| GET | /api/v1/dashboard/workloads-runs-summary | 各 workload の直近20件の成否 (sparkline用)。 |
| GET | /api/v1/flow/snapshot | フロー図のノード + エッジ全体スナップショット。 |
| GET | /api/v1/flow/rates?since_min=N&slug=&metric= | 1分バケットのレート時系列 (最大2880分)。 |
| POST | /api/v1/flow/layout | ノード配置を YAML に保存。 |
プラグイン
| method | path | 説明 |
|---|---|---|
| GET | /api/v1/plugins/available | プラグイン一覧 + manifest。 |
| GET/PUT/DELETE | /api/v1/plugins/{slug}/state/{key} | プラグインの JSON 状態を保存/取得/削除。 |
| GET/PUT/DELETE | /api/v1/plugins/{slug}/blob/{key} | バイナリ blob (最大5MB) を保存/取得/削除。 |
| GET | /api/v1/plugins/{slug}/web/{path} | プラグイン同梱の静的 UI (panel.html 等) を配信。 |
その他
| method | path | 説明 |
|---|---|---|
| GET | /api/v1/agents | エージェント一覧 (desired + 最新 report)。 |
| POST | /api/v1/agents/{host}/sync | エージェントが VRAM/子プロセス状態を報告し desired を受領。 |
| GET | /api/v1/settings | 設定一覧 (secret はマスク)。 |
| POST | /api/v1/settings/llm/test | LLM 接続テスト。 |
| GET | /api/v1/service-logs | サービスログの取得 (host/service/min_level 等でフィルタ)。 |
| POST/GET | /api/v1/admin/deploy | デプロイの実行 / 履歴。 |
| GET | /api/v1/minio/{key} | 許可プレフィックスの MinIO オブジェクトをプロキシ配信 (サムネ等)。 |
リクエスト/レスポンス例
代表的なボディの形です。正確な全フィールドは /openapi.json が権威です。
ワークロードを作る (POST /workloads)
ボディは WorkloadCreate (未知キーは拒否)。最小構成の例:
curl -X POST http://localhost:8000/api/v1/workloads \
-H "Content-Type: application/json" \
-d '{
"slug": "url-check",
"name": "URL Check",
"enabled": true,
"executor_type": "python_module",
"executor_config": {
"source_path": "plugins/url_check",
"module": "main",
"init_kwargs": { "timeout_secs": 10 }
},
"priority": 100,
"batch_size": 10,
"lease_secs": 300,
"max_attempts": 5
}'
成功は 201 で作成された workload を返します。slug が既存なら 409 です。
キュー件数を見る (GET /workloads/{slug}/queue)
{ "pending": 3, "claimed": 1, "failed": 0, "total": 4 }
run 履歴を見る (GET /workloads/{slug}/runs)
1件の run は概ね次の形です (成功なら output_json、失敗なら error/stderr が入ります)。
{
"runs": [
{
"run_id": 1287,
"pk": "https://example.com",
"attempt": 1,
"success": true,
"worker_id": "host-a:12345",
"started_at": "2026-07-11T09:00:01Z",
"duration_ms": 83,
"output_json": { "url": "https://example.com", "status": 200, "bytes": 1256 },
"stdout": "", "stderr": "", "error": null
}
]
}
典型的な自動化フロー
外部システムから使う場合の定番は「投入 → ポーリング」です。
① POST /workloads/{slug}/tasks/batch … 対象をまとめて投入
② GET /workloads/{slug}/queue … pending が捌けるのを監視
③ GET /workloads/{slug}/runs?limit=N … 結果 (output_json) を回収
④ POST /workloads/{slug}/queue/reset-failed … 失敗分をまとめて再試行 (必要なら)
タスク投入例
curl -X POST http://localhost:8000/api/v1/workloads/echo-sample/tasks \
-H "Content-Type: application/json" \
-d '{"pk": "task-001", "extra": {"foo": "bar"}}'
バルク投入例
curl -X POST http://localhost:8000/api/v1/workloads/echo-sample/tasks/batch \
-H "Content-Type: application/json" \
-d '{"items": [{"pk": "t1"}, {"pk": "t2"}, {"pk": "t3"}]}'
対話的に叩くなら
http://localhost:8000/docs の Swagger UI が便利です。全エンドポイントの正確な body スキーマは /openapi.json が権威です。