Public API Reference

Flauro Public API リファレンス

Flauro は LLM 統一ゲートウェイです。1 本の API から複数の LLM プロバイダ(OpenAI / Anthropic / Google / AWS Bedrock / ローカル LLM)を呼び分け、ガードレール(PII マスク)・ルーティング・コスト計測・サーキットブレーカを一括で適用します。さらに RAG とパイプラインを組み合わせたオーケストレーション実行/orchestrate)を提供します。

Base URL: https://api.flauro-dev.com/api/v1 HTTPS / JSON UTF-8 Versioning: /api/v1

フロントエンドは本 API を組み込むだけで、いま使っているツールに生成 AI の品質と統制を取り込めます。認証は Bearer トークン、レスポンスはすべて JSON。全応答に traceId が付与され、追跡・監査が容易です。

1. 認証

すべての業務エンドポイントは Bearer トークンが必要です。トークンは以下の 2 種類が使えます。

種類取得方法用途
JWTPOST /auth/login対話ログイン・短期利用
PAT(Personal Access Token, flp_...POST /auth/personal-access-tokensサーバ間連携・CI・長期利用
リクエストヘッダ
Authorization: Bearer <JWT または flp_...>
Content-Type: application/json

organizationId(テナント)はトークンから解決されるため、リクエストボディに含める必要はありません。

1.1 ログイン

POST/auth/login — レート制限 5 req/分。

リクエスト
{ "email": "you@example.com", "password": "********", "totpCode": "123456" }
レスポンス 200
{
  "access_token": "eyJhbGciOi...",
  "user": { "id": "...", "email": "...", "organizationId": "...", "role": "admin" }
}

1.2 Personal Access Token の発行

POST/auth/personal-access-tokens(要 JWT)。

リクエスト
{ "name": "ci-bot", "scopes": ["llm:call"], "expiresAt": "2027-01-01T00:00:00Z" }
レスポンス 201(raw token は発行時のみ返却)
{ "id": "...", "name": "ci-bot", "scopes": ["llm:call"], "expiresAt": "2027-01-01T00:00:00Z", "token": "flp_xxxxxxxx" }

2. LLM 統一ゲートウェイ

2.1 POST /llm/call — 統一呼び出し

ガードレール・ルーティング・コスト計測を通して LLM を呼び出す中核エンドポイント。model からプロバイダを自動推論するため、1 本で OpenAI も Claude も Gemini も呼べます。

レート制限: 60 req/分/テナント。

リクエスト
{
  "messages": [
    { "role": "system", "content": "You are a helpful assistant." },
    { "role": "user", "content": "Flauro のアーキテクチャを要約して" }
  ],
  "model": "gpt-5.6-sol",
  "provider": "openai",
  "temperature": 0.2,
  "max_tokens": 1024,
  "reasoning_effort": "high",
  "response_format": { "type": "json_object" },
  "thinking_mode": "adaptive",
  "thinking_effort": "medium",
  "purpose": "external"
}
フィールド必須説明
messages{role, content}[]rolesystem/user/assistantcontent は文字列またはマルチモーダルブロック配列([{type:"text",text},{type:"image_url",image_url:{url}}])。
modelstringgpt-5.6-sol。省略時は組織デフォルト。
providerenumopenai/anthropic/google/bedrock。未指定なら model から自動推論。
temperaturenumber生成のランダム性。
max_tokens / max_completion_tokensnumber最大出力トークン。
reasoning_effortstring推論モデル(o系/gpt-5系)向け。low/medium/high
response_formatobject{ "type": "json_object" } で JSON 強制。
thinking_modeenumnone/adaptive/legacy(拡張思考)。
thinking_effortenumlow/medium/high
purposestring監査・ルーティングのヒント。
bypassBackendstringサーキット OPEN 時のバイパス指定。
レスポンス 200
{
  "content": "...",
  "model": "gpt-5.6-sol",
  "costUsd": 0.00046,
  "routedTo": "openai",
  "traceId": "trace_1731490000000",
  "decisionId": "...",
  "usage": { "promptTokens": 120, "completionTokens": 340 }
}
エラー
ステータス意味ボディ例
422ガードレールでブロック(PII 等){ "blocked": true, "type": "pii", "reason": "...", "messageForUser": "...", "traceId": "..." }
503サーキット OPEN(内部 LLM が連続失敗中){ "error": "gateway_unavailable", "circuitState": "OPEN", "traceId": "..." }
500内部エラー{ "error": "internal_error", "message": "...", "traceId": "..." }

2.2 プロバイダ互換プロキシ

既存 SDK / ツールをそのまま接続できる互換エンドポイント。いずれもゲートウェイのガードレール・コスト計測を通ります。

エンドポイント互換対象
POST /llm/openai/chat
POST /llm/openai/chat/completions
OpenAI POST /v1/chat/completions(Cline / Continue.dev 連携用エイリアス含む)
POST /llm/claude/chatAnthropic POST /v1/messagesthinking / output_config 透過)
POST /llm/gemini/chatGoogle Gemini generateContent
POST /llm/bedrock/chatAWS Bedrock Converse API(ECS 上は IAM ロールで認証、API キー不要)
VS Code エージェント連携例(Cline / Continue.dev)
Base URL = https://api.flauro-dev.com/api/v1/llm/openai
API Key  = flauro の JWT または PAT

2.3 GET /llm/models — 利用可能モデル一覧

組織の設定済み API キーでフィルタしたモデルカタログを返す。

[
  { "id": "gpt-5.6-sol", "provider": "openai", "label": "GPT-5.6 Sol", "contextWindow": 256000, "capabilities": ["reasoning", "json", "vision"] }
]

主なモデル ID: gpt-5.6-sol / gpt-5.6-terra / gpt-5.6-luna / gpt-5.5 / gpt-5.5-pro / gpt-4o / gpt-4o-mini / o3 / o4-mini / claude-sonnet-5 / gemini-2.0-flash / Bedrock モデル ID ほか。

2.4 GET /llm/health — サーキットブレーカ状態

{
  "status": "ok",
  "circuitState": "CLOSED",
  "failureCount": 0,
  "failureThreshold": 5,
  "localLlm": { "enabled": true, "baseUrl": "...", "model": "Qwen/Qwen2.5-7B-Instruct" },
  "checkedAt": "2026-07-13T10:00:00.000Z"
}

status: ok(CLOSED)/ degraded(HALF_OPEN)/ unavailable(OPEN)。

3. オーケストレーション(RAG × パイプライン)

RAG 検索・生成・変換を組み合わせた多段パイプラインを 1 リクエストで実行します。

なぜ RAG × パイプラインを使うのか(メリット)

素の POST /llm/call は「単発の LLM 呼び出し」です。これに対し /orchestrate は次の課題を解決します。

課題素の LLM 呼び出し/orchestrate(RAG × パイプライン)
モデルが自社コード・社内文書を知らない一般知識のみで回答(ハルシネーション)retrieve ステップが自社リポジトリ/文書を検索し、その根拠を生成に渡す
複数ステップの処理をアプリ側で実装検索→整形→生成を自前でオーケストレーションretrievegeneratetransform を 1 リクエストで連結
ステップごとに認証・コスト管理・PII 対策が必要各呼び出しで個別対応全ステップがゲートウェイ(ガードレール/コスト計測/ルーティング/サーキットブレーカ)を通過
コスト最適化手動でモデル選択options.preferLocal でローカル/クラウドを切替、maxCostUsd で上限制御
監査・再現性ログを自前収集全実行に traceIdsteps が付与され、内部で OrchestrationTrace に記録

利用の判断基準: 自社の知識(コード/仕様/インシデント履歴)に基づいた回答が必要なら RAG を、複数段の処理を一本化したいならパイプラインを使います。単純な生成だけなら /llm/call で十分です。

3.1 POST /orchestrate — 同期 / 非同期実行

レート制限: 30 req/分。

リクエスト(登録済みパイプライン利用)
{
  "pipeline": "software_dev/pr_review",
  "inputs": { "diff": "..." },
  "mode": "sync",
  "options": { "model": "gpt-5.6-sol", "preferLocal": false, "maxCostUsd": 0.5 }
}
リクエスト(inline ステップ定義)
{
  "steps": [
    { "id": "ctx", "type": "retrieve", "source": "repo", "query": "{input.question}", "limit": 5 },
    { "id": "gen", "type": "generate", "prompt": "コンテキスト:\n{steps.ctx.output}\n\n質問: {input.question}" }
  ],
  "inputs": { "question": "認証まわりの実装方針は?" },
  "mode": "sync"
}
options フィールド
フィールド説明
modelstring生成ステップで使うモデル
responseFormatobject{ "type": "json_object" }
maxStepsnumber実行ステップ上限
maxCostUsdnumberコスト上限(超過で中断)
preferLocalbooleanローカル/クラウドの優先
レスポンス(mode: sync)200
{
  "traceId": "...",
  "content": "{ \"summary\": \"...\", \"sources_used\": true }",
  "steps": [
    { "stepId": "ctx", "type": "retrieve", "status": "success", "resultCount": 5 },
    { "stepId": "gen", "type": "generate", "status": "success", "costUsd": 0.00046 }
  ]
}
レスポンス(mode: async)200
{ "ok": true, "runId": "...", "traceId": "..." }

3.2 POST /orchestrate/stream — SSE ストリーム実行

Content-Type: text/event-stream で段階的にイベントを返す。

event: step
data: {"stepId":"ctx","type":"retrieve","status":"success","resultCount":5}

event: token
data: {"delta":"..."}

event: error
data: {"message":"...","traceId":"..."}

3.3 実行状況・パイプライン管理

エンドポイント説明
GET /orchestrate/runs/:id非同期実行の状況取得
GET /orchestrate/pipelines利用可能パイプライン一覧
GET /orchestrate/pipelines/:templateSlug/:pipelineIdパイプライン定義取得
PUT /orchestrate/pipelines/:templateSlug/:pipelineIdパイプライン定義更新({ "steps": [...] }

3.4 RAG のセットアップ(retrieve を機能させる)

retrieve ステップは、対象データがあらかじめ索引化されていて初めて結果を返します。索引が無い場合でもエラーにはならず、resultCount: 0 で生成ステップは続行します(=根拠なしの回答になる)。実運用では以下を設定してください。

ステップ 1: 検索ソースを選ぶ

retrievesource で参照先を指定します。

source参照先索引の投入方法
repo自社リポジトリのコード(pgvector 上のベクトル索引)GitHub 連携による push 時の自動索引、または初回フル索引
documentsアップロード済み文書・ナレッジ管理コンソールから文書をアップロード
both上記 2 つを並列検索してマージ両方

ステップ 2: コード索引(repo)を用意する

  1. 組織に GitHub 連携を設定する(Webhook を接続)。
  2. 初回は対象リポジトリのフル索引を作成する(管理者向け Indexer 実行)。
  3. 以降は既定ブランチへの push を契機に、変更ファイルのみ自動で増分索引される。
テナント分離: organizationId は Bearer トークンから解決され、RAG 検索に自動伝播します。他組織のコードが混ざることはありません。リクエストボディに organizationId を含める必要はありません。

ステップ 3: 動作確認

生成結果の根拠が効いているかは、レスポンスの steps[].resultCount(0 より大きいか)と、生成側が返す sources_used などのフラグで判断できます。

{
  "steps": [
    { "id": "ctx", "type": "retrieve", "source": "repo", "query": "{input.question}", "filePath": "apps/api/src/modules/auth", "limit": 5 },
    { "id": "gen", "type": "generate", "prompt": "次のコードを根拠に回答。根拠が無ければその旨を明記。\n\n{steps.ctx.output}\n\n質問: {input.question}" }
  ],
  "inputs": { "question": "認証はどこで検証している?" },
  "mode": "sync"
}

3.5 パイプラインの設計と登録

パイプラインの与え方は 2 通りあります。

A. インライン定義(steps)— 登録不要ですぐ試せる

リクエストの steps に直接ステップ配列を渡します。プロトタイピングや 1 回限りの実行に最適です(RAG を使わず generate だけなら索引も不要)。

{
  "steps": [
    { "id": "gen", "type": "generate", "prompt": "{input.text} を 3 行で要約" }
  ],
  "inputs": { "text": "..." },
  "mode": "sync"
}

B. 登録済みパイプライン(pipeline)— 再利用・チーム共有向け

定義を保存し、"pipeline": "<templateSlug>/<pipelineId>" で呼び出します。プロンプトやステップ構成を利用側コードから分離でき、更新が全呼び出しに即反映されます。

操作エンドポイント
利用可能なパイプライン一覧(pipeline に渡す ID を確認)GET /orchestrate/pipelines
定義(steps)を取得GET /orchestrate/pipelines/:templateSlug/:pipelineId
定義を更新PUT /orchestrate/pipelines/:templateSlug/:pipelineId{ "steps": [...] }
GUI で編集したい場合は、Web ダッシュボードの Orchestration コンソールから retrieve/generate/transform ステップを構造エディタで編集し、同期テスト実行できます。

代表的な設計パターン

目的ステップ構成
社内コード Q&Aretrieve(repo)generate
PR レビュー(構造化出力)retrieve(repo)generateoptions.responseFormat = { "type": "json_object" }
文書横断要約retrieve(both)generatetransform
RAG 不要の整形タスクgenerate のみ(索引セットアップ不要)

設計のヒント

4. エラー・レート制限・コスト

5. クイックスタート(cURL)

# 1) ログインしてトークンを取得
TOKEN=$(curl -s https://api.flauro-dev.com/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"********"}' | jq -r .access_token)

# 2) LLM を呼び出す
curl -s https://api.flauro-dev.com/api/v1/llm/call \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-sol","messages":[{"role":"user","content":"こんにちは"}]}'

# 3) RAG つきオーケストレーション実行
curl -s https://api.flauro-dev.com/api/v1/orchestrate \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"pipeline":"software_dev/pr_review","inputs":{"diff":"..."},"mode":"sync","options":{"model":"gpt-5.6-sol","preferLocal":false}}'

いま使っている道具に、知能を。

Closed Beta で先行導入パートナーを募集中です。API キーの発行・PoC のご相談はお気軽に。

先行導入のご相談 →