> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# エージェントの出力を取得（コード行数）

> Devin Desktop および Devin CLI で、エージェントが挿入・削除し、チームが採用したコード行数をクエリします。フィルタリング、グループ化、ページネーションに対応しています。

<Note>
  これは **v2 エンドポイント** です。リクエストボディでサービスキーを渡す v1 Analytics API とは異なり、Bearer トークン認証とクエリパラメーターを使用します。詳しくは下記の[認証](#authentication)を参照してください。
</Note>

<Warning>
  このエンドポイントは、リアルタイムでの使用量監視を目的としたもの**ではありません**。データは1時間単位で集計され、
  レート制限も厳しく設定されています (Team ごとに1時間あたり10リクエスト) 。定期的なレポート作成や一括エクスポートに利用してください。
</Warning>

<h2 id="authentication">
  認証
</h2>

このエンドポイントでは **Bearer トークン** 認証を利用します。`Authorization` ヘッダーにトークンを含めてください。

```
Authorization: Bearer <your_token>
```

**Use Local Analytics API** 権限を持つ Devin サービスユーザーの APIキー、または **Analytics Read** 権限を持つ Windsurf
サービスキーのいずれかを利用してください。それぞれの作成方法については、
[認証](/ja/desktop/accounts/api-reference/analytics-v2-introduction#authentication)を
参照してください。

<h2 id="metrics">
  メトリクス
</h2>

`metric` クエリパラメーターは必須で、返すメトリクスをカンマ区切りのリストで指定します。
リクエストした各メトリクスは、すべての行に整数フィールドとして含まれます。

| メトリクス | 説明 |
| - | - |
| `loc_inserted` | エージェントが挿入し、ユーザーが採用した行数 |
| `loc_deleted` | エージェントが削除し、ユーザーが採用した行数 |

たとえば、`?metric=loc_inserted,loc_deleted` は両方を返し、`?metric=loc_inserted` は
`loc_inserted` のみを返します。`metric` を指定しないリクエスト、または不明なメトリクスを指定したリクエストは `400` エラーになります。

行数は、[Devin Desktop](/ja/desktop/introducing-devin-desktop) または
[Devin CLI](/ja/cli) でユーザーがエージェントの編集を採用した時点でカウントされます (モデルの種類は問いません) 。`product` パラメータも必須で、現在指定できる値は
`agent` のみです。

<h2 id="grouping-and-granularity">
  グループ化と時間粒度
</h2>

`granularity` と `group_by` を利用して、返されるデータの構造を制御します。

* **時間粒度もグループ化も指定しない場合** — 期間全体を集計した 1 行を返します
* **`granularity=daily`** — 各行に `YYYY-MM-DD` 形式の `timestamp` が含まれます
* **`granularity=monthly`** — 各行に `YYYY-MM` 形式の `timestamp` が含まれます
* **`group_by=user`** — 各行に `user_id` と `user_email` が含まれます
* **`group_by=session`** — 各行に `session_id` (その行が採用された Devin Desktop の会話または CLI セッション) が含まれます
* **`group_by=model_uid`** — 各行に `model_uid` が含まれます
* **`group_by=ide`** — 各行に `ide` が含まれます
* **`group_by=ide,ide_version`** — 各行に `ide` と `ide_version` が含まれます (`ide_version` でグループ化する場合は、`ide` も指定する必要があります)
* **`group_by=os`** — 各行に `os` (`darwin` (macOS) 、`windows`、`linux` など) が含まれます
* **`group_by=source`** — 各行に `source` が含まれます。Devin Desktop で採用された行は `CASCADE_CLIENT`、Devin CLI (他のエディタ内でエージェントとして動作する CLI を含む) で採用された行は `CHISEL` になります

ディメンションは組み合わせて指定できます (例: `group_by=user,source,model_uid`) 。[Get Consumption](/ja/desktop/accounts/api-reference/get-consumption) と同じ `models`、
`group_id`、`user_id` のフィルターも
適用されます。

<h2 id="pagination">
  ページネーション
</h2>

結果はページ分割して返され、デフォルトのページサイズは 1,000 行 (最大 10,000 行) です。取得できる結果がさらにある場合は、
レスポンスの `pagination` オブジェクトに `next_page_cursor` が含まれます。次のページを取得するには、この値を `page_cursor` クエリ
パラメーターとして渡し、元のリクエストと同じ `metric` リストを指定してください。カーソルは、発行元の
エンドポイントとメトリクスに紐付けられています。`/consumption` から発行されたカーソルや、別の
`metric` リストに対して発行されたカーソルを使用すると、`400` エラーで拒否されます。

ページカーソルの有効期限は 24 時間です。後続ページのリクエストは新しいクエリとして扱われず、レート制限にはカウントされません。

<h2 id="rate-limits">
  レート制限
</h2>

このエンドポイントには、Team ごとに **1 時間あたり 10 リクエスト** のレート制限があります。この制限を超えると、
サーバーは `Retry-After` ヘッダー付きで `429 Too Many Requests` を返します。

以前のクエリのページネーション (`next_page_cursor` を使った後続ページの取得) は、この制限にカウント**されません**。
カウントされるのは、各レポートの最初のクエリのみです。制限値が低く設定されているのは、このエンドポイントが
リアルタイムの使用量監視ではなく、定期的なレポート作成を目的としているためです。


## OpenAPI

````yaml ja/desktop/accounts/api-reference/analytics-v2-openapi.yaml GET /api/v2alpha/analytics/output
openapi: 3.1.0
info:
  title: Devin Desktop Analytics API v2
  version: 2.0.0
  description: |
    Analytics API v2 は、Enterprise チーム向けにクレジットおよび ACU消費量、アクティブユーザー、エージェントの出力
    （採用されたコード行数）の分析を提供します。データは時間単位の集計に基づいており、柔軟なフィルタリング、グループ化、
    カーソル方式のページネーションをサポートします。
servers:
  - url: https://server.codeium.com
security:
  - bearerAuth: []
paths:
  /api/v2alpha/analytics/output:
    get:
      summary: エージェントの出力分析（コード行数）を取得
      description: >
        認証済みチームのエージェント出力をクエリします。必須の `metric` パラメータには、

        返すメトリクスをカンマ区切りで指定します。指定できるのは `loc_inserted` と `loc_deleted`
        のいずれか、または両方です。これらは、

        Devin Desktop と Devin CLI でエージェントが挿入または削除し、ユーザーが採用した行数を表します。

        指定した各メトリクスは、各行に整数フィールドとして含まれます。結果は1時間単位の

        集計データに基づき、日付範囲、製品、モデル、グループ、ユーザーで絞り込めます。また、

        消費量と同じディメンションに加え、`session` と `source`（Devin Desktop または CLI）でグループ化できます。


        これらのエンドポイントは、定期的なレポート作成と一括エクスポート向けに設計されています。リアルタイムの使用量監視を目的としたものでは**ありません**。データは1時間単位で集計され、レート制限も低く設定されています（チームごとに1時間あたり10リクエスト）。
      operationId: getOutput
      parameters:
        - name: metric
          in: query
          required: true
          schema:
            type: string
          description: |
            返す出力メトリクスをカンマ区切りで指定します。各メトリクスは、各行にフィールドとして含まれます。対応するメトリクス：
            - `loc_inserted` — エージェントによる行の挿入をユーザーが採用した行数
            - `loc_deleted` — エージェントによる行の削除をユーザーが採用した行数
          example: loc_inserted,loc_deleted
        - name: start_date
          in: query
          required: true
          schema:
            type: string
            format: date
          description: 日付範囲の開始日（当日を含む）。`YYYY-MM-DD` 形式で指定します。
          example: '2026-06-01T00:00:00.000Z'
        - name: end_date
          in: query
          required: true
          schema:
            type: string
            format: date
          description: 日付範囲の終了日（当日を含む）。`YYYY-MM-DD` 形式で指定します。範囲は90日以内にする必要があります。
          example: '2026-06-30T00:00:00.000Z'
        - name: product
          in: query
          required: true
          schema:
            type: string
            enum:
              - agent
          description: 出力をクエリする対象の製品。
          example: agent
        - name: granularity
          in: query
          required: false
          schema:
            type: string
            enum:
              - daily
              - monthly
          description: |
            結果をグループ化する際の時間粒度です。指定すると、各行に `timestamp` フィールドが含まれます。
            省略すると、指定した日付範囲全体で結果が集計されます。
        - name: group_by
          in: query
          required: false
          schema:
            type: string
          description: >
            結果をグループ化するディメンションをカンマ区切りで指定します。対応するディメンション：

            - `user` — 各行に `user_id` と `user_email` が含まれます

            - `session` — 各行に `session_id` が含まれます

            - `model_uid` — 各行に `model_uid` が含まれます

            - `ide` — 各行に `ide` が含まれます

            - `ide_version` — 各行に `ide_version` が含まれます。`ide` も指定する必要があります

            - `os` — 各行に `os` が含まれます

            - `source` — 各行に `source` が含まれます（Devin Desktop は
            `CASCADE_CLIENT`、Devin CLI は `CHISEL`）
          example: source,model_uid
        - name: models
          in: query
          required: false
          schema:
            type: string
          description: 結果の絞り込みに使用するモデルUIDのカンマ区切りリスト。
          example: claude-4-sonnet,gpt-4.1
        - name: group_id
          in: query
          required: false
          schema:
            type: string
          description: >-
            特定のグループに属するユーザーに結果を絞り込みます。サービスキーには、このグループへのアクセス権が必要です。Devin
            サービスユーザーのAPIキーでは利用できません。
        - name: user_id
          in: query
          required: false
          schema:
            type: string
          description: 特定のユーザー（認証UID）に結果を絞り込みます。
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 10000
            default: 1000
          description: 1ページあたりに返す行数の上限。
        - name: page_cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            次のページを取得するための不透明なカーソルです。前のレスポンスの `pagination.next_page_cursor`
            の値を指定します。カーソルを発行したリクエストと同じ `metric` リストを渡してください。他のエンドポイントや異なる
            `metric` リストに対して発行されたカーソルは拒否されます。
      responses:
        '200':
          description: 出力データが正常に返されました。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OutputResponse'
              examples:
                by_source:
                  summary: クライアント別の日次コード行数
                  value:
                    data:
                      - timestamp: '2026-06-15T00:00:00.000Z'
                        source: CASCADE_CLIENT
                        loc_inserted: 18420
                        loc_deleted: 3105
                      - timestamp: '2026-06-15T00:00:00.000Z'
                        source: CHISEL
                        loc_inserted: 92310
                        loc_deleted: 11874
                    pagination:
                      next_page_cursor: null
                    metadata:
                      data_freshness: '2026-06-16T03:00:00.000Z'
                      query_time_ms: 1311
                      team_id: team_abc123
                by_user_model:
                  summary: metric=loc_inserted をユーザーとモデルでグループ化
                  value:
                    data:
                      - user_id: user_abc123
                        user_email: alice@example.com
                        model_uid: claude-4-sonnet
                        loc_inserted: 4210
                    pagination:
                      next_page_cursor: null
                    metadata:
                      data_freshness: '2026-06-16T03:00:00.000Z'
                      query_time_ms: 980
                      team_id: team_abc123
        '400':
          description: リクエストパラメータが無効です。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_metric:
                  value:
                    error: metric is required
                bad_metric:
                  value:
                    error: >-
                      unsupported metric: acus (supported: loc_inserted,
                      loc_deleted)
                missing_product:
                  value:
                    error: product is required
                bad_group_by:
                  value:
                    error: 'unsupported group_by dimension for output: foobar'
        '401':
          description: 認証に失敗したか、権限が不足しています。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                missing_auth:
                  value:
                    error: missing Authorization header
                invalid_key:
                  value:
                    error: invalid service key
                insufficient_permissions:
                  value:
                    error: insufficient permissions
        '403':
          description: 指定されたページカーソルは、認証済みチームまたはリクエストで指定したグループに属していません。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                cursor_team_mismatch:
                  value:
                    error: page cursor does not belong to this team
        '405':
          description: 許可されていないHTTPメソッドです（`GET` のみサポートされています）。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: レート制限を超えました（チームごとに1時間あたり10リクエスト）。以前のクエリのページネーションは、この制限の対象に含まれません。
          headers:
            Retry-After:
              schema:
                type: string
              description: 再試行までの推奨待機時間。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                rate_limited:
                  value:
                    error: rate limit exceeded
        '503':
          description: analytics サービスを利用できません（セルフホスト型のデプロイメントなど）。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
components:
  schemas:
    OutputResponse:
      type: object
      required:
        - data
        - pagination
        - metadata
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/OutputRow'
          description: 出力データの行を格納した配列。
        pagination:
          type: object
          properties:
            next_page_cursor:
              type:
                - string
                - 'null'
              description: |
                結果の次のページを取得するための不透明なカーソル。後続のリクエストで、この値を`page_cursor`
                クエリパラメーターとして渡してください。次のページがない場合は`null`です。
                ページカーソルは24時間後に失効します。
        metadata:
          type: object
          properties:
            data_freshness:
              type: string
              format: date-time
              description: 基となるデータの最終更新日時を示すタイムスタンプ（1時間単位で切り捨て）。
            query_time_ms:
              type: integer
              format: int64
              description: サーバー側でのクエリ実行時間（ミリ秒）。
            team_id:
              type: string
              description: 認証済みサービスキーから特定されたチームID。
            group_id:
              type: string
              description: 結果の対象範囲を指定するグループID。`group_id`が指定された場合のみ返されます。
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: 人が読んで理解できるエラーメッセージ。
    OutputRow:
      type: object
      properties:
        timestamp:
          type: string
          description: >
            この行の時間バケット。形式は `granularity` によって異なり、日次は `YYYY-MM-DD`、月次は `YYYY-MM`
            です。

            `granularity` が指定されている場合にのみ含まれます。
          examples:
            - '2026-05-01T00:00:00.000Z'
            - 2026-05
        user_id:
          type: string
          description: ユーザー識別子（認証 UID）。`group_by` に `user` が含まれる場合にのみ含まれます。
        user_email:
          type: string
          description: ユーザーのメールアドレス。`group_by` に `user` が含まれる場合にのみ含まれます。
          examples:
            - alice@example.com
        session_id:
          type: string
          description: >-
            Devin Desktop の会話または Devin CLI のセッションの識別子。`group_by` に `session`
            が含まれる場合にのみ含まれます。
        model_uid:
          type: string
          description: モデル識別子。`group_by` に `model_uid` が含まれる場合にのみ含まれます。
          examples:
            - claude-4-sonnet
        ide:
          type: string
          description: IDE 名。`group_by` に `ide` が含まれる場合にのみ含まれます。
          examples:
            - windsurf
            - devin-cli
        ide_version:
          type: string
          description: IDE のバージョン。`group_by` に `ide_version` が含まれる場合にのみ含まれます（`ide` も必要です）。
          examples:
            - 1.0.0
        os:
          type: string
          description: リクエスト送信元のオペレーティングシステム。`group_by` に `os` が含まれる場合にのみ含まれます。
          examples:
            - darwin
            - windows
            - linux
        source:
          type: string
          enum:
            - CASCADE_CLIENT
            - CHISEL
          description: >
            行が採用されたクライアント：Devin Desktopの場合は`CASCADE_CLIENT`、Devin
            CLIの場合は`CHISEL`

            （他のエディター内でエージェントとして動作するCLIを含む）。`group_by`に`source`が含まれる場合のみ返されます。
        loc_inserted:
          type: integer
          format: int64
          description: エージェントが挿入し、ユーザーが採用した行。`metric`に`loc_inserted`が含まれる場合のみ返されます。
        loc_deleted:
          type: integer
          format: int64
          description: エージェントが削除し、ユーザーがその削除を採用した行。`metric`に`loc_deleted`が含まれる場合のみ返されます。
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        `Authorization` ヘッダーで Bearer トークンとして渡す、**Analytics Read** 権限を持つサービスキー。


        サービスキーは、[チーム設定](https://windsurf.com/team/settings) の「Service
        Keys」セクションで作成します。

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.