Skip to main content
GET
Get agent output analytics (lines of code)
This is a v2 endpoint that uses Bearer token authentication and query parameters, unlike the v1 Analytics API which uses service keys in the request body. See Authentication below.
This endpoint is not intended for real-time usage monitoring. Data is hourly-aggregated and the rate limit is low (10 requests per hour per team). Use it for periodic reporting and bulk export.

Authentication

This endpoint uses Bearer token authentication. Include your token in the Authorization header:
Use either a Devin service user API key with the Use Local Analytics API permission or a Windsurf service key with the Analytics Read permission. See Authentication for how to create each one.

Metrics

The metric query parameter is required and takes a comma-separated list of the metrics to return. Each requested metric appears as an integer field on every row: For example, ?metric=loc_inserted,loc_deleted returns both; ?metric=loc_inserted returns only loc_inserted. Requests without metric, or naming an unknown metric, fail with 400. Lines are counted when a user accepts an agent edit in Devin Desktop or the Devin CLI, from any model. The product parameter is also required and currently accepts only agent.

Grouping and Granularity

Use granularity and group_by to control the shape of returned data:
  • No granularity or grouping — returns a single aggregated row for the entire date range
  • granularity=daily — each row includes a timestamp in YYYY-MM-DD format
  • granularity=monthly — each row includes a timestamp in YYYY-MM format
  • group_by=user — each row includes a user_id and user_email
  • group_by=session — each row includes a session_id (the Devin Desktop conversation or CLI session the lines were accepted in)
  • group_by=model_uid — each row includes a model_uid
  • group_by=ide — each row includes an ide
  • group_by=ide,ide_version — each row includes ide and ide_version (grouping by ide_version requires ide to also be included)
  • group_by=os — each row includes an os, such as darwin (macOS), windows, or linux
  • group_by=source — each row includes a source: CASCADE_CLIENT for lines accepted in Devin Desktop, CHISEL for lines accepted in the Devin CLI (including the CLI running as an agent inside other editors)
Dimensions can be combined, for example group_by=user,source,model_uid. The same models, group_id, and user_id filters as Get Consumption apply.

Pagination

Results are paginated with a default page size of 1,000 rows (max 10,000). When more results are available, the response includes a next_page_cursor in the pagination object. Pass it as the page_cursor query parameter to fetch the next page, with the same metric list as the original request. Cursors are bound to the endpoint and metrics that issued them; a cursor from /consumption, or one issued for a different metric list, is rejected with 400. Page cursors expire after 24 hours. A follow-up page request does not count as a new query against your rate limit.

Rate Limits

This endpoint is rate-limited to 10 requests per hour per team. If you exceed this limit, the server returns 429 Too Many Requests with a Retry-After header. Paginating an earlier query (following a next_page_cursor) does not count against this limit — only the initial query for each report does. The low limit reflects that this endpoint is for periodic reporting, not real-time usage monitoring.

Authorizations

Authorization
string
header
required

A service key with Analytics Read permission, passed as a Bearer token in the Authorization header.

Create a service key in your team settings under the "Service Keys" section.

Query Parameters

metric
string
required

Comma-separated list of output metrics to return; each appears as a field on every row. Supported metrics:

  • loc_inserted — lines inserted by the agent that the user accepted
  • loc_deleted — lines deleted by the agent that the user accepted
start_date
string<date>
required

Start of the date range (inclusive) in YYYY-MM-DD format.

end_date
string<date>
required

End of the date range (inclusive) in YYYY-MM-DD format. The range must not exceed 90 days.

product
enum<string>
required

Product to query output for.

Available options:
agent
granularity
enum<string>

Time granularity for grouping results. When specified, each row includes a timestamp field. If omitted, results are aggregated across the entire date range.

Available options:
daily,
monthly
group_by
string

Comma-separated list of dimensions to group results by. Supported dimensions:

  • user — includes user_id and user_email in each row
  • session — includes session_id in each row
  • model_uid — includes model_uid in each row
  • ide — includes ide in each row
  • ide_version — includes ide_version in each row; requires ide to also be included
  • os — includes os in each row
  • source — includes source in each row (CASCADE_CLIENT for Devin Desktop, CHISEL for the Devin CLI)
models
string

Comma-separated list of model UIDs to filter results to.

group_id
string

Filter results to users in a specific group. The service key must have access to this group. Not supported with Devin service user API keys.

user_id
string

Filter results to a specific user (auth UID).

page_size
integer
default:1000

Maximum number of rows to return per page.

Required range: 1 <= x <= 10000
page_cursor
string

Opaque cursor from a previous response's pagination.next_page_cursor to fetch the next page. Pass the same metric list as the request that issued it; cursors issued by other endpoints or for a different metric list are rejected.

Response

Output data returned successfully.

data
object[]
required

Array of output data rows.

pagination
object
required
metadata
object
required