メインコンテンツへスキップ
Analytics API は、Factory の組織レベルの使用量データへのプログラマティックアクセスを提供します。組織全体のトークン消費量、ツール呼び出し、ユーザーアクティビティ、生産性メトリクスをクエリできます。

クイックスタート

curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/tokens?startDate=2026-01-14&endDate=2026-01-28"

認証

すべてのリクエストには Authorization ヘッダーに Factory API キーが必要です:
Authorization: Bearer fk-your-api-key
API キーは app.factory.ai/settings/api-keys で生成してください。

権限

Manager または Owner ロールを持つユーザーのみが Analytics API にアクセスできます。メンバーとゲストは 403 エラーを受け取ります。

ベース URL

https://api.factory.ai/api/v1/analytics

レスポンス形式

すべてのレスポンスは一貫したエンベロープ構造に従います:
{
  "data": [ ... ],
  "meta": { ... }
}
フィールド説明
dataarray結果オブジェクトの配列(1日あたり1つ、または group_by 使用時はグループごと)
metaobjectリクエストメタデータ:org_idstart_dateend_date、および /users のページネーション情報

エンドポイント

Analytics API は、それぞれ特定のメトリクスカテゴリに焦点を当てた5つのエンドポイントを提供します:
エンドポイント説明
/tokensモデルとユーザー別のトークン消費量
/toolsツール呼び出しと自律性メトリクス
/activity日次、週次、月次アクティブユーザー
/productivityファイル操作とgitアクティビティ
/usersページネーション付きユーザー別メトリクス

group_by の理解

複数のエンドポイントが group_by パラメーターをサポートしています。動作は以下の通りです:
  • group_by なし: ネストされた内訳(例:by_modelby_tooldaily_active_users_by_client)を含む1日あたり1行を返します。すべての次元を単一のレスポンスで取得したい場合に使用します。
  • group_by あり: それらのネストされた配列の1つを別々の行に平坦化します。各行には次元値を識別する group_key フィールドがあります。データを平坦な行を期待するツール(スプレッドシート、BIツール、時系列データベース)にパイプしたい場合に使用します。
例えば、/activitygroup_by なしで使用すると、daily_active_users_by_client がオブジェクトとして返されます。group_by=client を使用すると、terminal-uiwebnon-interactive-cli の別々の行が得られます - これはチャート上で各クライアントタイプを独自の線として描画する際に便利です。

トークン使用量

組織全体の日次トークン消費量を返します。
GET /tokens

クエリパラメーター

パラメーター必須説明
startDatestringはいYYYY-MM-DD 形式の開始日
endDatestringはいYYYY-MM-DD 形式の終了日
group_bystringいいえmodel に設定すると結果をモデル別にグループ化

レスポンス

{
  "data": [
    {
      "date": "2026-01-15",
      "billable_tokens": 1250000,
      "input_tokens": 980000,
      "output_tokens": 270000,
      "cache_read_tokens": 150000,
      "cache_write_tokens": 45000,
      "by_model": [
        {
          "model_id": "claude-sonnet-4-20250514",
          "model_tier": "standard",
          "billable_tokens": 800000,
          "input_tokens": 620000,
          "output_tokens": 180000
        }
      ],
      "by_user": [
        {
          "user_id": "user_01HPMQ7NXKHM7Y7PR3TTZY3JZS",
          "user_email": "developer@company.com",
          "billable_tokens": 450000,
          "by_model": [...]
        }
      ]
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15"
  }
}

レスポンスフィールド

フィールド説明
datestringYYYY-MM-DD 形式の日付
billable_tokensnumber総請求対象トークン(入力+出力、キャッシュ割引適用後)
input_tokensnumberモデルに送信された生の入力トークン
output_tokensnumberモデルによって生成されたトークン
cache_read_tokensnumberプロンプトキャッシュから読み取られたトークン
cache_write_tokensnumberプロンプトキャッシュに書き込まれたトークン
by_modelarrayモデル別の内訳
by_userarrayユーザー別の内訳

グループ化されたレスポンス

group_by=model の場合、data 内で1日1モデルあたり1行を返します:
{
  "data": [
    {
      "date": "2026-01-15",
      "group_key": "claude-sonnet-4-20250514",
      "billable_tokens": 800000,
      "input_tokens": 620000,
      "output_tokens": 180000
    },
    {
      "date": "2026-01-15",
      "group_key": "claude-opus-4-20250514",
      "billable_tokens": 450000,
      "input_tokens": 360000,
      "output_tokens": 90000
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15"
  }
}

# Token usage for a date range
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/tokens?startDate=2026-01-14&endDate=2026-01-28"

# Grouped by model
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/tokens?startDate=2026-01-15&endDate=2026-01-15&group_by=model"

ツール使用量

日次ツール呼び出し、MCP使用量、スキル、スラッシュコマンド、自律性メトリクスを返します。
GET /tools

クエリパラメーター

パラメーター必須説明
startDatestringはいYYYY-MM-DD 形式の開始日
endDatestringはいYYYY-MM-DD 形式の終了日
group_bystringいいえtool_name に設定すると結果をツール別にグループ化

レスポンス

{
  "data": [
    {
      "date": "2026-01-15",
      "tool_calls": 45000,
      "by_tool": [
        { "tool": "Read", "invocations": 12500 },
        { "tool": "Edit", "invocations": 8200 },
        { "tool": "Execute", "invocations": 6100 }
      ],
      "mcp_users_with_mcp": 42,
      "mcp_by_server": [
        { "server": "github", "invocations": 1200 },
        { "server": "notion", "invocations": 850 }
      ],
      "skills_invocations": 320,
      "skills_by_name": [
        { "name": "browser", "count": 180 },
        { "name": "frontend-ui", "count": 95 }
      ],
      "slash_commands_invocations": 1500,
      "slash_commands_by_name": [
        { "name": "review", "count": 420 },
        { "name": "test", "count": 380 }
      ],
      "hooks_invocations": 2800,
      "hooks_by_event": [
        { "event": "PostToolUse", "matcher": "*.ts", "command": "eslint --fix", "count": 1200 }
      ],
      "web_users": 42,
      "autonomy_ratio_avg": 8.5,
      "autonomy_ratio_p50": 6.2,
      "autonomy_ratio_p90": 18.4,
      "tool_calls_per_session_avg": 45.2,
      "user_turns_per_session_avg": 5.3,
      "tool_autonomy_level_ratio": {
        "auto_high": 0.35,
        "auto_medium": 0.42,
        "auto_low": 0.18,
        "manual": 0.05
      }
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15"
  }
}

レスポンスフィールド

フィールド説明
datestringYYYY-MM-DD 形式の日付
tool_callsnumber総ツール呼び出し数
by_toolarrayツール名別の内訳
mcp_users_with_mcpnumberMCPサーバーを使用したユーザー数
mcp_by_serverarrayMCPサーバー別の呼び出し数
skills_invocationsnumber総スキルアクティベーション数
skills_by_namearrayスキル別の内訳
slash_commands_invocationsnumber総スラッシュコマンド使用数
slash_commands_by_namearrayコマンド別の内訳
hooks_invocationsnumber総フック実行数
hooks_by_eventarrayイベントタイプ別の内訳
web_usersnumberウェブ/ワークスペースインターフェースを使用したユーザー数
autonomy_ratio_avgnumberユーザーターンあたりの平均ツール呼び出し数
autonomy_ratio_p50number自律性比率の中央値
autonomy_ratio_p90number自律性比率の90パーセンタイル
tool_calls_per_session_avgnumberセッションあたりの平均ツール呼び出し数
user_turns_per_session_avgnumberセッションあたりの平均ユーザーメッセージ数
tool_autonomy_level_ratioobject自律性レベルの分布

グループ化されたレスポンス

group_by=tool_name の場合、data 内で1日1ツールあたり1行を返します:
{
  "data": [
    {
      "date": "2026-01-15",
      "group_key": "Read",
      "tool_calls": 12500
    },
    {
      "date": "2026-01-15",
      "group_key": "Edit",
      "tool_calls": 8200
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15"
  }
}

ユーザーアクティビティ

セッション数と併せて、日次、週次、月次のアクティブユーザーを返します。
GET /activity

クエリパラメーター

パラメーター必須説明
startDatestringはいYYYY-MM-DD 形式の開始日
endDatestringはいYYYY-MM-DD 形式の終了日
group_bystringいいえclient に設定するとクライアントタイプ別にグループ化

レスポンス

{
  "data": [
    {
      "date": "2026-01-15",
      "daily_active_users": 128,
      "weekly_active_users": 312,
      "monthly_active_users": 485,
      "daily_active_users_by_client": {
        "terminal-ui": 95,
        "web": 42,
        "non-interactive-cli": 18
      },
      "sessions": 890,
      "messages": 12500,
      "user_messages": 4200
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15"
  }
}

レスポンスフィールド

フィールド説明
datestringYYYY-MM-DD 形式の日付
daily_active_usersnumberこの日のユニークユーザー数
weekly_active_usersnumber過去7日間のユニークユーザー数
monthly_active_usersnumber過去30日間のユニークユーザー数
daily_active_users_by_clientobjectクライアントタイプ別のDAU内訳
sessionsnumber開始されたセッション総数
messagesnumber総メッセージ数(ユーザー+アシスタント)
user_messagesnumberユーザーのみのメッセージ数

クライアントタイプ

クライアント説明
terminal-uiインタラクティブCLIセッション
webFactory ウェブインターフェース
non-interactive-cliヘッドレス/自動化CLI(droid exec

グループ化されたレスポンス

group_by=client の場合、data 内で1日1クライアントタイプあたり1行を返します:
{
  "data": [
    {
      "date": "2026-01-15",
      "group_key": "terminal-ui",
      "daily_active_users": 95
    },
    {
      "date": "2026-01-15",
      "group_key": "web",
      "daily_active_users": 42
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15"
  }
}

生産性

日次ファイル操作とgitアクティビティを返します。
GET /productivity

クエリパラメーター

パラメーター必須説明
startDatestringはいYYYY-MM-DD 形式の開始日
endDatestringはいYYYY-MM-DD 形式の終了日

レスポンス

{
  "data": [
    {
      "date": "2026-01-15",
      "files_created": 245,
      "files_edited": 1820,
      "by_extension": [
        { "extension": ".ts", "count": 890 },
        { "extension": ".tsx", "count": 420 },
        { "extension": ".py", "count": 310 }
      ],
      "by_language": [
        { "language": "TypeScript", "count": 1310 },
        { "language": "Python", "count": 310 }
      ],
      "git_commits": 156,
      "git_prs_created": 42
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15"
  }
}

レスポンスフィールド

フィールド説明
datestringYYYY-MM-DD 形式の日付
files_creatednumberエージェントによって作成された新規ファイル数
files_editednumberエージェントによって変更された既存ファイル数
by_extensionarrayファイル拡張子別の操作数
by_languagearrayプログラミング言語別の操作数
git_commitsnumberエージェント経由で行われたコミット数
git_prs_creatednumberエージェント経由で作成されたプルリクエスト数

ユーザー別メトリクス

カーソルベースページネーション付きのユーザー別詳細メトリクスを返します。
GET /users

クエリパラメーター

パラメーター必須説明
startDatestringはいYYYY-MM-DD 形式の開始日
endDatestringはいYYYY-MM-DD 形式の終了日
limitnumberいいえページあたりのユーザー数、1-100(デフォルト:20)
cursorstringいいえページネーション用のユーザーID(next_cursor から)

レスポンス

{
  "data": [
    {
      "user_id": "user_01HPMQ7NXKHM7Y7PR3TTZY3JZS",
      "user_email": "developer@company.com",
      "date": "2026-01-15",
      "tool_calls": 1250,
      "billable_tokens": 450000,
      "primary_model": "claude-sonnet-4-20250514",
      "primary_model_tier": "standard",
      "files_created": 12,
      "files_edited": 85,
      "git_commits": 8,
      "git_prs_created": 2,
      "mcp_calls": 45,
      "skill_calls": 8,
      "slash_commands": 22,
      "hooks": 120,
      "sessions": 15,
      "messages": 180,
      "user_messages": 62,
      "assistant_messages": 118,
      "autonomy_ratio": 9.2,
      "delegation_level": "auto-high",
      "languages": ["TypeScript", "Python", "Go"]
    }
  ],
  "meta": {
    "org_id": "org_01HPMQ6ABCDE...",
    "start_date": "2026-01-15",
    "end_date": "2026-01-15",
    "has_more": true,
    "next_cursor": "user_01HPMQ8ABCDE7Y7PR3TTZY4KLM"
  }
}

レスポンスフィールド

フィールド説明
user_idstringユニークユーザー識別子
user_emailstring | nullユーザーメールアドレス
datestringYYYY-MM-DD 形式の日付
tool_callsnumberこのユーザーによるツール呼び出し数
billable_tokensnumberこのユーザーによって消費されたトークン数
primary_modelstring最も使用されたモデル
primary_model_tierstringモデルティア(standard または thinking
files_creatednumber作成されたファイル数
files_editednumber編集されたファイル数
git_commitsnumber行われたコミット数
git_prs_creatednumber作成されたプルリクエスト数
mcp_callsnumberMCPツール呼び出し数
skill_callsnumberスキルアクティベーション数
slash_commandsnumberスラッシュコマンド使用数
hooksnumberフック実行数
sessionsnumber開始されたセッション数
messagesnumber総メッセージ数
user_messagesnumberユーザーメッセージのみ
assistant_messagesnumberアシスタントメッセージ数
autonomy_rationumberユーザーターンあたりのツール呼び出し数
delegation_levelstringプライマリ自律性モード
languagesarray作業したプログラミング言語

委譲レベル

レベル説明
auto-high最大自律性、最小確認
auto-mediumバランス型自律性、一部確認
auto-low制限された自律性、頻繁な確認
spec仕様モード、実行前の計画
manual完全手動制御、各アクションを確認

ページネーション

カーソルベースページネーションを使用してユーザーを反復処理します:
# First page
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/users?startDate=2026-01-15&endDate=2026-01-15&limit=50"

# Next page
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/users?startDate=2026-01-15&endDate=2026-01-15&limit=50&cursor=user_01HPMQ8ABCDE7Y7PR3TTZY4KLM"

重要な制約

日付要件

  • 形式: すべての日付は YYYY-MM-DD である必要があります
  • タイムゾーン: UTCのみ(タイムゾーンパラメーターなし)
  • データ可用性: データは昨日まで(UTC)利用可能です。今日の日付をリクエストすると 400 エラーが返されます。
  • 履歴データ: 2026年1月14日から利用可能

レート制限

レート制限はプランによって異なります。詳細については Contact us するか、ダッシュボードや自動化のユースケースでより高い制限が必要な場合はお問い合わせください。

エラーハンドリング

API は標準的なHTTPステータスコードを返します:
ステータス説明
400無効な日付形式、今日の日付のリクエスト、または制限値が範囲外
401APIキーが見つからないか無効
403不十分な権限(ManagerまたはOwnerロールが必要)
500内部エラー

エラーレスポンス形式

{
  "title": "Bad Request",
  "detail": "Cannot query today's date - analytics data has a 24-hour lag",
  "status": 400,
  "requestId": "req_01HPMQ9WXYZ..."
}

データパイプライン

分析データは以下のパイプラインを通って流れます:
CLI/Daemon → OTEL Events → BigQuery (raw) → dbt models → API
  • ソース: CLIとデーモンからのOpenTelemetryスパン
  • 処理: dbt経由の日次バッチ集約
  • 可用性: データは生成された翌日に利用可能

データ品質に関する注記

A few known data quality considerations:
  • MCP server names: Some duplicates exist due to case sensitivity (e.g., axiom vs Axiom)
  • Tool names: Approximately 0.006% of entries contain parsing artifacts
  • User counts: A user active on multiple clients counts once in DAU but appears in each client breakdown

ユースケース

コスト監視ダッシュボード

トークン消費量の傾向を追跡し、コスト要因を特定します:
# Daily token usage for the month
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/tokens?startDate=2026-01-14&endDate=2026-01-28"

採用追跡

DAU/WAU/MAUを監視し、採用パターンを特定します:
# Activity metrics with client breakdown
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/activity?startDate=2026-01-14&endDate=2026-01-28&group_by=client"

チーム生産性レポート

出力と効率を測定します:
# Productivity metrics
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/productivity?startDate=2026-01-14&endDate=2026-01-28"

個人パフォーマンス

チームリーダー向けにユーザー別メトリクスをエクスポートします:
# Paginate through all users
curl -H "Authorization: Bearer $FACTORY_API_KEY" \
  "https://api.factory.ai/api/v1/analytics/users?startDate=2026-01-15&endDate=2026-01-15&limit=100"