The Copilot usage metrics dashboard and APIs display and export data using a consistent set of fields. This reference lists all available metrics and describes how to interpret their values in both dashboard visuals and NDJSON or API exports.
- The Copilot usage metrics dashboards are available at the enterprise and organization level.
- The Copilot usage metrics APIs return reports at the enterprise or organization scope, with aggregated, repository-level, and individual user-level report granularities. Shapes vary by scope and granularity.
- Team-level metrics are not pre-aggregated; you construct them by joining the user-teams report with the per-user usage metrics report. See Team-level Copilot usage metrics.
- Repository-level reports contain one record per repository with pull request activity on the requested day. See Repository-level fields (API only) later in this article.
For guidance on how to read and interpret these metrics, see GitHub Copilot usage metrics.
Copilot usage dashboard metrics
These metrics appear directly in the Copilot usage dashboard. These charts do not include Copilot CLI usage.
Impact dashboard metrics
These metrics appear in the impact dashboard, which groups users into adoption cohorts and connects that adoption to pull request output. For guidance on interpreting adoption cohorts, see GitHub Copilot usage metrics.
| Metric | Description |
|---|---|
| Engagement trends | How the organization's adoption cohort mix and pull request throughput (total pull requests merged per month) have changed over the last six months. |
| Adoption cohort distribution | Share of licensed users grouped into each adoption phase (Passive users, Phase 1, Phase 2, Phase 3) for the period. Passive users correspond to the No Cohort value in the API. |
| Adoption multiplier | Compares engaged users (Phase 1, 2, or 3) against passive users on code shipped (pull requests merged per user per month) and time to merge pull requests, to show the relative impact of deeper Copilot adoption. |
| Recommendations | Suggested actions, such as configuring Copilot cloud agent or enabling Copilot code review, based on the organization's current cohort distribution. |
Code generation dashboard metrics
These metrics appear in the code generation dashboard and provide a breakdown of how code is being generated across user-initiated and agent-initiated activity. All values are derived from lines of code (LoC) added or deleted in the IDE.
| Metric | Description |
|---|---|
| Lines of code changed with AI | Total lines of code added and deleted across all modes in the last 28 days. |
| Agent contribution | Percentage of lines of code added and deleted by agents (including edit, agent, and custom modes) in the last 28 days. |
| Average lines deleted by agent | Average number of lines automatically deleted by agents on behalf of active users during the current calendar month. |
| Daily total of lines added and deleted | Total number of lines added to and deleted from the codebase across all modes for each day. |
| User-initiated code changes | Lines suggested or manually added by users through code completions and chat panel actions (insert, copy, or apply). |
| Agent-initiated code changes | Lines automatically added to or deleted from the codebase by agents on behalf of users across edit, agent, and custom modes. |
| User-initiated code changes per model | User-initiated lines of code, grouped by model used in the IDE. |
| Agent-initiated code changes per model | Agent-initiated lines of code, grouped by model performing the agent actions. |
| User-initiated code changes per language | User-initiated lines of code, grouped by programming language. |
| Agent-initiated code changes per language | Agent-initiated lines of code, grouped by programming language. |
API and export fields
These fields appear in the exported NDJSON reports and in the Copilot usage metrics APIs. Most tables below list the field name, its JSON type, whether the value can be null, and a description.
Reports come in different shapes depending on their scope and granularity, so the fields available in a record depend on which report it comes from:
- Per-user reports (
*-users-1-dayand*-users-28-day) contain one record per user, includinguser_id,user_login,ai_credits_used, theused_*indicators, andai_adoption_phase. They do not contain active-user counts,pull_requests, ortotals_by_ai_adoption_phase. - Aggregated reports (
enterprise-1-dayandorg-1-day) contain one aggregated record per enterprise or organization, including active-user counts,pull_requests, andtotals_by_ai_adoption_phase. They do not containuser_id,user_login, or theused_*indicators. - 28-day reports (
enterprise-28-dayandorg-28-day) wrap an array of daily aggregated records in aday_totalsfield, with the reporting window at the top level. - User-teams reports (
*-user-teams-1-day) map users to the teams they belong to, so you can construct team-level metrics. - Repository-level reports (
*-repos-1-day) contain one record per repository with pull request activity for the day, including pull requests created by Copilot cloud agent and reviewed by Copilot code review.
Organization-scope reports also include organization_id alongside enterprise_id. For example schemas of the data returned by the APIs, see Example schema for Copilot usage metrics.
The Type column uses JSON Schema types: string, integer, number, boolean, array, and object. The Nullable column indicates whether a field's value can be null or absent from a record where it would otherwise apply. Activity breakdown arrays are always present but can be empty ([]). Optional arrays are marked as nullable and can be absent.
Report identification and partition fields
These fields identify the scope, date, and (for exports) partition of each record. The exact set present depends on the report shape.
| Field | Type | Nullable | Description |
|---|---|---|---|
day | string | No | Calendar day this record represents, in YYYY-MM-DD format. In 28-day reports, day appears within each day_totals entry rather than at the top level. |
enterprise_id | string | No | Unique ID of the enterprise. Included in both enterprise- and organization-scope reports. |
organization_id | string | Yes | Unique ID of the organization. Included in organization-scope reports only; omitted from enterprise-scope reports. |
etl_id / day_partition | string | No | Partition fields used for housekeeping. Included in exported NDJSON files and returned by the usage metrics APIs. |
entity_id_partition | integer | No | Entity partition used for housekeeping. Included in exported NDJSON files and returned by the usage metrics APIs. |
Per-user report fields
Per-user reports contain one record per user for the reporting period. The 28-day per-user report also includes report_start_day and report_end_day to mark the reporting window.
| Field | Type | Nullable | Description |
|---|---|---|---|
user_id | integer | No | Unique identifier for the user. |
user_login | string | No | GitHub username for the user. |
ai_credits_used | number | No | Total AI credits consumed by the user in the reporting period. This field is included in per-user reports only and is not broken down by feature, model, or surface. This metric is for consumption analysis, not invoicing totals. |
user_initiated_ | integer | No | Number of explicit prompts sent to Copilot. Only counts messages or prompts actively sent to the model. Does not include opening the chat panel, switching modes (for example, ask, edit, plan, or agent), using keyboard shortcuts to open the inline UI, or making configuration changes. |
code_generation_ | integer | No | Number of distinct Copilot output events generated. Includes: All generated content, including comments and docstrings. Multiple blocks: Each distinct code block from a single user prompt counts as a separate generation. Note: This metric is not directly comparable to user_initiated_, since one prompt can produce multiple generations. |
code_acceptance_ | integer | No | Number of suggestions or code blocks accepted by users. Counts: All built-in accept actions, such as “apply to file,” “insert at cursor,” “insert into terminal,” and use of the Copy button. Does not count: Manual OS clipboard actions (for example, Ctrl+C). Granularity: Each acceptance action increments the count once, regardless of how many code blocks were generated by the initial prompt. |
loc_suggested_ | integer | No | Lines of code Copilot suggested to add (completions, inline chat, chat panel, and so on; excludes agent edits). |
loc_suggested_ | integer | No | Lines of code Copilot suggested to delete (future support planned). |
loc_added_sum | integer | No | Lines of code actually added to the editor (accepted completions, applied code blocks, agent and edit mode). |
loc_deleted_sum | integer | No | Lines of code deleted from the editor (currently from agent edits). |
used_agent | boolean | No | Whether the user used agent mode in the IDE that day. Does not include Copilot code review activity, which is captured separately in used_copilot_ and used_copilot_. |
used_chat | boolean | No | Whether the user used IDE chat that day. |
used_cli | boolean | No | Whether the user used Copilot CLI that day. |
used_copilot_app | boolean | No | Whether the user used the Copilot app that day. |
used_copilot_ | boolean | No | Whether the user used Copilot cloud agent (previously Copilot coding agent) that day. |
used_copilot_ | boolean | No | Whether the user used Copilot cloud agent that day. Carries the same value as used_copilot_; both names are retained for backward compatibility. |
used_copilot_ | boolean | Yes | Whether the user actively engaged with Copilot code review that day. A user is considered active if they manually requested a Copilot review, or applied a Copilot review suggestion. Null when there is no Copilot code review signal for the user that day. |
used_copilot_ | boolean | Yes | Whether the user had Copilot automatically assigned to review their pull request that day, without actively engaging with the review. Null when there is no Copilot code review signal for the user that day. |
ai_adoption_phase | object | No | The user's AI adoption phase for the day. Always present; defaults to the "No Cohort" phase. See AI adoption phase fields. |
totals_by_cli | object | Yes | CLI-specific metrics for the user. Omitted when the user had no Copilot CLI usage that day. See Copilot CLI metrics fields. |
totals_by_copilot_ | object | Yes | Copilot app metrics for the user. Omitted when the user had no Copilot app usage that day. See Copilot app metrics fields. |
totals_by_3rd_ | array | Yes | Per-agent usage metrics for recognized agent apps. Omitted when the user had no recognized agent app activity during the reporting period. See Agent apps metrics fields. |
totals_by_ide | array | No | Per-IDE breakdown of the user's activity. See Activity breakdown objects. |
totals_by_feature | array | No | Per-feature breakdown of the user's activity. See Activity breakdown objects. |
totals_by_language_ | array | No | Breakdown combining language and feature dimensions. See Activity breakdown objects. |
totals_by_language_ | array | No | Breakdown combining language and model dimensions, for chat activity. See Activity breakdown objects. |
totals_by_model_ | array | No | Breakdown combining model and feature dimensions, for chat activity. See Activity breakdown objects. |
Aggregated enterprise and organization report fields
Aggregated reports contain one record per enterprise or organization, summarizing all users for the day. Active-user counts include users identified through both client-side and server-side telemetry. Users surfaced only through server-side telemetry are counted in active-user totals but may not appear in the dimensional breakdown arrays (totals_by_ide, totals_by_feature, and similar). The following tables list the active-user counts, then the activity totals and breakdowns.
Active-user counts:
| Field | Type | Nullable | Description |
|---|---|---|---|
daily_active_ | integer | No | Number of unique users who used Copilot on a given day. |
weekly_active_ | integer | No | Number of unique users who used Copilot during a trailing seven-day window. |
monthly_active_ | integer | No | Number of unique users who used Copilot during a trailing 28-day window. |
monthly_active_ | integer | No | Number of unique users who used chat during a trailing 28-day window. |
monthly_active_ | integer | No | Number of unique users who used agent mode during a trailing 28-day window. |
daily_active_ | integer | No | Number of unique users who used Copilot cloud agent on a given day. |
weekly_active_ | integer | No | Number of unique users who used Copilot cloud agent during a trailing seven-day window. |
monthly_active_ | integer | No | Number of unique users who used Copilot cloud agent during a trailing 28-day window. |
daily_active_ | integer | No | Number of unique users who actively used Copilot code review on a given day. Active usage means manually requesting a review or applying a suggestion. When a user has both active and passive signals in the same period, they are counted as active only. |
weekly_active_ | integer | No | Number of unique users who actively used Copilot code review during a trailing seven-day window. When a user has both active and passive signals in the same period, they are counted as active only. |
monthly_active_ | integer | No | Number of unique users who actively used Copilot code review during a trailing 28-day window. When a user has both active and passive signals in the same period, they are counted as active only. |
daily_passive_ | integer | No | Number of unique users who had Copilot code review automatically assigned to review their pull request on a given day, with no active engagement. |
weekly_passive_ | integer | No | Number of unique users who had Copilot code review automatically assigned to review their pull request during a trailing seven-day window, with no active engagement. |
monthly_passive_ | integer | No | Number of unique users who had Copilot code review automatically assigned to review their pull request during a trailing 28-day window, with no active engagement. |
daily_active_ | integer | Yes | Number of unique users who used Copilot CLI on a given day. This count is independent of IDE active-user counts and is not included in IDE-based active-user definitions. Omitted for enterprises or organizations with no CLI usage that day. |
daily_active_ | integer | Yes | Number of unique users who used the Copilot app on a given day. Null when the enterprise or organization has no Copilot app activity that day. |
Activity totals and breakdowns:
| Field | Type | Nullable | Description |
|---|---|---|---|
user_initiated_ | integer | No | Total number of explicit prompts sent to Copilot across all users for the day. |
code_generation_ | integer | No | Total number of distinct Copilot output events generated across all users for the day. |
code_acceptance_ | integer | No | Total number of suggestions or code blocks accepted across all users for the day. |
loc_suggested_ | integer | No | Aggregated lines of code suggested to add for the day. Same definition as the per-user field. |
loc_suggested_ | integer | No | Aggregated lines of code suggested to delete for the day. Same definition as the per-user field. |
loc_added_sum | integer | No | Aggregated lines of code added for the day. Same definition as the per-user field. |
loc_deleted_sum | integer | No | Aggregated lines of code deleted for the day. Same definition as the per-user field. |
totals_by_ide | array | No | Aggregated per-IDE activity breakdown. See Activity breakdown objects. |
totals_by_feature | array | No | Aggregated per-feature activity breakdown. See Activity breakdown objects. |
totals_by_language_ | array | No | Aggregated language-and-feature activity breakdown. See Activity breakdown objects. |
totals_by_language_ | array | No | Aggregated language-and-model activity breakdown. See Activity breakdown objects. |
totals_by_model_ | array | No | Aggregated model-and-feature activity breakdown. See Activity breakdown objects. |
totals_by_cli | object | Yes | Aggregated Copilot CLI metrics for the day. Omitted when there is no CLI usage that day. Unlike the per-user form, it does not include last_known_cli_. See Copilot CLI metrics fields. |
totals_by_copilot_ | object | Yes | Aggregated Copilot app metrics for the day. Null when the enterprise or organization has no Copilot app activity that day. See Copilot app metrics fields. |
totals_by_3rd_ | array | Yes | Aggregated per-agent usage metrics for recognized agent apps. Omitted when the enterprise or organization had no recognized agent app activity that day. See Agent apps metrics fields. |
totals_by_ai_ | array | Yes | Per-phase aggregates of users and their average activity. Omitted when no adoption-phase data is available. See AI adoption phase fields. |
pull_requests | object | No | Daily pull request activity for the enterprise or organization. See Pull request activity fields. |
28-day report fields
The 28-day reports (enterprise-28-day and org-28-day) are wrappers: they carry the reporting window at the top level and an array of daily aggregated records.
| Field | Type | Nullable | Description |
|---|---|---|---|
report_start_day | string | No | First calendar day of the 28-day reporting window, in YYYY-MM-DD format. |
report_end_day | string | No | Last calendar day of the 28-day reporting window, in YYYY-MM-DD format. |
created_at | string | No | Timestamp (ISO 8601) when the report was generated. |
day_totals | array | No | Array of daily aggregated records. Each entry has the same fields as an aggregated 1-day report. See Aggregated enterprise and organization report fields. |
User-teams fields
These fields appear in the daily user-teams report (available via REST API at the organization and enterprise scopes) and are used to construct team-level metrics by joining with the per-user usage metrics report. For the full join recipe and the endpoint URLs, see Team-level Copilot usage metrics.
Teams with fewer than 5 seated Copilot users on a given day are excluded from the user-teams report.
| Field | Type | Nullable | Description |
|---|---|---|---|
user_id | integer | No | Unique identifier for the user. |
user_login | string | No | GitHub username for the user. |
day | string | No | Calendar day this record represents. |
organization_id | string | No | Unique ID of the organization the team belongs to. Organization scope only. |
enterprise_id | string | No | Unique ID of the enterprise the team belongs to. Enterprise scope only. The enterprise-scoped report includes both enterprise teams and business teams. |
team_id | integer | No | Unique ID of the team the user belongs to. |
slug | string | No | URL-friendly identifier for the team. |
Repository-level fields (API only)
Repository-level reports show daily pull request creation, review, merge, and suggestion activity for repositories in an organization or enterprise, including pull requests created by Copilot cloud agent and reviewed by Copilot code review. Each row represents one repository that had pull request activity on the requested day; repositories with no activity are omitted. These reports focus on pull request lifecycle activity and can contain data even when IDE usage metrics are absent.
These fields are returned by the daily repository-level report (repos-1-day), available via the REST API at the organization and enterprise scopes. For the endpoint URLs, response envelope, permissions, and download workflow, see REST API endpoints for Copilot usage metrics. For example rows, see Example schema for Copilot usage metrics.
| Field | Type | Nullable | Description |
|---|---|---|---|
day | string | No | Calendar day this record represents, in YYYY-MM-DD format. |
enterprise_id | string | No | Unique ID of the enterprise. Populated in enterprise-scoped reports, and in organization-scoped reports for organizations owned by an enterprise. Empty for organizations not owned by an enterprise. |
organization_id | string | No | Unique ID of the organization that owns the repository. Included in both enterprise- and organization-scoped reports. |
repo_id | integer | No | Unique ID of the repository. |
repo_owner_name | string | No | Login of the repository owner. |
repo_name | string | No | Repository name. |
repo_visibility | string | No | Repository visibility. Possible values are PRIVATE, INTERNAL, and PUBLIC. |
pull_requests | object | No | Daily pull request activity for the repository. See Pull request activity fields. |
Activity breakdown objects
The totals_by_* fields are arrays of breakdown objects. The array is always present but can be empty. Within each object, the metric fields (*_count and loc_*_sum) follow the same definitions as the top-level per-user fields, and the dimension fields carry the values documented in Breakdown dimension values.
| Object | Dimension fields | Description |
|---|---|---|
totals_by_ide[] | ide | Breakdown by IDE. In per-user reports, each entry also includes last_known_ide_ and last_known_plugin_. |
totals_by_feature[] | feature | Breakdown by Copilot feature (for example, inline chat or chat panel). |
totals_by_language_ | language, feature | Breakdown combining language and feature. Does not include user_initiated_. |
totals_by_language_ | language, model | Breakdown combining language and model, for chat activity (not completions). |
totals_by_model_ | model, feature | Breakdown combining model and feature, for chat activity (not completions). |
In per-user reports, each totals_by_ide[] entry also reports the most recently detected IDE and Copilot Chat extension versions for the user.
| Field | Type | Nullable | Description |
|---|---|---|---|
last_known_ide_ | object | Yes | Most recent IDE version detected for the user, as { ide_version, sampled_at }. Omitted for aggregated breakdown rows, such as the capped "others" IDE bucket. |
last_known_ide_ | string | No | IDE version string. Present when last_known_ide_ is present. |
last_known_ide_ | string | Yes | Timestamp (ISO 8601) when the version was sampled. |
last_known_plugin_ | object | Yes | Most recent Copilot extension detected for the user, as { plugin, plugin_version, sampled_at }. Omitted for aggregated breakdown rows. |
last_known_plugin_ | string | No | Extension name (for example, copilot or copilot-chat). Present when last_known_plugin_ is present. |
last_known_plugin_ | string | No | Extension version string. Present when last_known_plugin_ is present. |
last_known_plugin_ | string | Yes | Timestamp (ISO 8601) when the version was sampled. |
Copilot CLI metrics fields
The totals_by_cli object contains the following nested fields when Copilot CLI usage is present; the object is omitted when there is no CLI usage. CLI usage is independent of IDE metrics—it is not reflected in fields such as totals_by_ide or totals_by_feature. The last_known_cli_version object appears in per-user reports only.
| Field | Type | Nullable | Description |
|---|---|---|---|
totals_by_cli.session_ | integer | No | Number of distinct CLI sessions initiated on this day. |
totals_by_cli.request_ | integer | No | Total number of requests made to Copilot via the CLI on this day, including both user-initiated prompts and automated agentic follow-up calls. |
totals_by_cli.prompt_ | integer | No | Total number of user prompts, commands, or queries executed within a session. |
totals_by_cli.token_ | integer | No | Total number of output tokens generated across all CLI requests on this day. |
totals_by_cli.token_ | integer | No | Total number of prompt tokens sent across all CLI requests on this day. |
totals_by_cli.token_ | number | Yes | Average number of output and prompt tokens per CLI request, computed as (output_tokens_. Null when there were no requests that day. |
totals_by_cli.last_ | object | No | Most recent Copilot CLI version detected for the user that day, as { cli_version, sampled_at }. Per-user reports only. |
totals_by_cli.last_ | string | No | Copilot CLI version string. Defaults to unknown if no version was detected. |
totals_by_cli.last_ | string | Yes | Timestamp (ISO 8601) when the version was sampled. |
Copilot app metrics fields
The totals_by_copilot_app object contains the following nested fields when Copilot app usage is present. It appears in per-user reports and in aggregated enterprise reports; it is omitted or null when the user or enterprise had no Copilot app activity that day. Unlike totals_by_cli, Copilot app coding activity is also reflected in totals_by_feature, totals_by_model_feature, totals_by_language_feature, and totals_by_language_model under the copilot_app feature value, and in the top-level code activity and lines-of-code metrics. There is no last_known_app_version field.
| Field | Type | Nullable | Description |
|---|---|---|---|
totals_by_copilot_ | integer | No | Number of distinct Copilot app sessions initiated on this day. |
totals_by_copilot_ | integer | No | Total number of requests made to Copilot via the Copilot app on this day, including both user-initiated prompts and automated agentic follow-up calls. |
totals_by_copilot_ | integer | No | Total number of user prompts, commands, or queries executed within a session. |
totals_by_copilot_ | integer | No | Total output tokens generated across all Copilot app requests on this day. |
totals_by_copilot_ | integer | No | Total prompt tokens sent across all Copilot app requests on this day. |
totals_by_copilot_ | number | Yes | Average of output and prompt tokens per Copilot app request, computed as (output_tokens_. Null when there were no requests that day. |
Agent apps metrics fields
Note
Agent apps are currently in public preview and subject to change.
The totals_by_3rd_party_agent array contains one entry for each recognized agent app used during the reporting period. Entries are grouped by agent_id, and integrations that map to the same agent are combined. Use agent_id as the stable grouping key and agent_name for display. The array is omitted when no recognized agent app activity is available during the reporting period.
These metrics come from server-side job activity. The nested user_initiated_interaction_count counts agent app job starts and is distinct from the top-level field with the same name, which counts explicit prompts from other supported telemetry.
| Field | Type | Nullable | Description |
|---|---|---|---|
totals_by_3rd_ | string | No | Display name of the agent app. The name can change, so use agent_id for grouping. |
totals_by_3rd_ | string | No | Stable identifier for the agent app. |
totals_by_3rd_ | integer | No | Number of user-initiated jobs started for the agent app during the reporting period. Each job start increments the count once. |
totals_by_3rd_ | integer | No | Sum of distinct, non-empty session counts for integrations mapped to the agent during the reporting period. Included only in aggregated enterprise and organization reports; omitted from per-user reports. |
Pull request activity fields
Important
Organization- and enterprise-level reports may show different totals due to differences in user deduplication and attribution timing. For guidance on interpreting pull request metrics across scopes, see GitHub Copilot usage metrics.
The pull_requests object appears in aggregated enterprise and organization reports, and in repository-level reports. It captures daily pull request creation, review, merge, and suggestion activity, including activity performed by Copilot cloud agent and Copilot code review.
| Field | Type | Nullable | Description |
|---|---|---|---|
pull_requests.total_ | integer | No | Total number of pull requests created on this specific day. Creation is a one-time event. Each pull request is counted only on the day it is created. |
pull_requests.total_ | integer | No | Total number of pull requests reviewed on this specific day. The same pull request may be counted on multiple days if it receives reviews on multiple days. Within a single day, each pull request is counted once, even if multiple review actions occur. |
pull_requests.total_ | integer | No | Total number of pull requests merged on this specific day. Merging is a one-time event. Each pull request is counted only on the day it is merged. |
pull_requests.median_ | number | Yes | Median time, in minutes, between pull request creation and merge for pull requests merged on this specific day. Median is used to reduce the impact of outliers from unusually long-running pull requests. Null when no pull requests were merged that day. |
pull_requests.total_ | integer | No | Total number of pull request review suggestions generated on this specific day, regardless of author. |
pull_requests.total_ | integer | No | Total number of pull request review suggestions that were applied on this specific day, regardless of author. |
pull_requests.total_ | integer | No | Number of pull requests created by Copilot cloud agent on this specific day. |
pull_requests.total_ | integer | No | Number of pull requests reviewed by Copilot code review on this specific day. A pull request may be counted on multiple days if Copilot code review reviews it on multiple days. |
pull_requests.total_ | integer | No | Number of pull requests created by Copilot cloud agent that were merged on this specific day. Each pull request is counted only on the day it is merged. |
pull_requests.total_ | integer | No | Number of pull requests that were both merged and reviewed by Copilot code review during the reporting period. |
pull_requests.median_ | number | Yes | Median time, in minutes, between pull request creation and merge for pull requests created by Copilot cloud agent and merged on this specific day. Null when no such pull requests were merged that day. |
pull_requests.median_ | number | Yes | Median time, in minutes, between pull request creation and merge, calculated only for pull requests reviewed by Copilot code review. Null when no such pull requests were merged that day. |
pull_requests.total_ | integer | No | Number of pull request review suggestions generated by Copilot code review on this specific day. |
pull_requests.total_ | integer | No | Number of pull request review suggestions generated by Copilot code review that were applied on this specific day. |
pull_requests.copilot_ | array | No | Aggregated counts of Copilot code review suggestions, broken down by the assigned comment type (for example, security or bug_risk). Each entry includes comment_type, total_copilot_, and total_copilot_. Always present but can be empty. |
AI adoption phase fields
Copilot groups users into AI adoption phases based on their activity. Phase information appears in two places: the per-user ai_adoption_phase object, and the aggregated totals_by_ai_adoption_phase array. For the phase values, see Breakdown dimension values.
Classification logic
A user is classified into a phase based on the Copilot features they are engaged with. A user is engaged with a feature when they use it on at least two distinct days within the trailing 28-day window. Engagement is evaluated from the feature-level activity signals in the table below, not directly from the single-day used_* per-user fields or from code_acceptance_activity_count. Phases are evaluated from the top down, and a user is assigned the highest phase they qualify for.
| Phase | Engagement criteria |
|---|---|
| No Cohort (displayed as "Passive users" in the impact dashboard) | The user isn't engaged with any feature that qualifies for a phase. This doesn't mean the user is inactive. A user in this group can still be using Copilot regularly and consuming premium requests, but hasn't used a qualifying feature on at least two distinct days within the trailing 28-day window. The most common case is conversational use of Copilot Chat or agent mode, recorded as chat_panel_agent_, that never produces code_completion or agent_edit activity. Copying code out of a chat response also doesn't produce either signal. |
| Phase 1: Code first | Engaged with inline code completions (the code_completion value of the feature dimension) or with agent edits written directly to files (the agent_edit value of the feature dimension). |
| Phase 2: Agent first | Engaged with exactly one GitHub-based agent surface: Copilot CLI (the copilot_cli value of the feature dimension), Copilot cloud agent (used_copilot_), or Copilot code review (used_copilot_ or used_copilot_). Active and passive Copilot code review count together as a single surface. |
| Phase 3: Multi-agent | Engaged with the Copilot app (the copilot_app value of the feature dimension), or engaged with two or more of the agent surfaces listed for Phase 2. |
A user only needs to be engaged with a phase's own signals to reach that phase. A user doesn't need to independently meet Phase 1 criteria to reach Phase 2 or Phase 3, although in practice agent-surface usage often co-occurs with completions or agent edits.
Of the agent surfaces, only the first-party surfaces listed in the table affect a user's AI adoption phase. Activity from partner-built agent apps doesn't affect the phase. The same classification logic applies to enterprise and organization reports, including 1-day and 28-day reports.
Note
Because classification uses feature-level engagement, some activity doesn't affect a user's phase on its own. Using IDE chat (used_chat) or agent mode (used_agent) doesn't qualify a user for Phase 1 unless it produces code_completion or agent_edit activity.
For example, asking a question in agent mode without letting Copilot edit your files records chat_panel_agent_mode activity, not agent_edit. A user whose usage is entirely conversational in this way stays in the No Cohort group even though they are actively using Copilot and can still incur premium request usage. Likewise, code_acceptance_activity_count includes chat-based acceptances, such as "apply to file" and the Copy button, that aren't inline code_completion activity, so it isn't used for classification. For more about the feature dimension, see Breakdown dimension values.
Phase assignment is recalculated each day using the trailing 28-day window, so a user's phase can change from one day to the next as their activity within the window shifts. This is expected behavior and does not indicate a data error.
The per-user ai_adoption_phase object contains:
| Field | Type | Nullable | Description |
|---|---|---|---|
ai_adoption_phase.phase_ | integer | No | Numeric phase identifier (for example, 0 for "No Cohort"). |
ai_adoption_phase.phase | string | No | Human-readable phase name. |
ai_adoption_phase.version | string | No | Version of the adoption-phase model used (for example, v1). |
Each entry in the aggregated totals_by_ai_adoption_phase array contains:
| Field | Type | Nullable | Description |
|---|---|---|---|
phase | string | No | Human-readable phase name. |
phase_number | integer | No | Numeric phase identifier. |
total_engaged_ | integer | No | Number of users grouped into this phase for the period. |
avg_user_initiated_ | number | No | Average user-initiated interactions per user in this phase. |
avg_code_generation_ | number | No | Average code generation activities per user in this phase. |
avg_code_acceptance_ | number | No | Average code acceptance activities per user in this phase. |
avg_loc_added | number | No | Average lines of code added per user in this phase. |
avg_loc_deleted | number | No | Average lines of code deleted per user in this phase. |
avg_pull_requests_ | number | No | Average pull requests reviewed per user in this phase. |
avg_pull_requests_ | number | No | Average pull requests created per user in this phase. |
avg_pull_requests_ | number | No | Average pull requests merged per user in this phase. |
total_pull_requests_ | integer | No | Total pull requests merged by users in this phase. Applies to the organization day and enterprise day aggregated reports. |
avg_pull_requests_ | number | No | Average of the per-user median minutes to merge for users in this phase. |
avg_pull_requests_ | number | No | Median time in minutes from pull request creation to first review, scoped to merged pull requests and attributed to the pull request's merge day. |
avg_pull_requests_ | number | No | Median number of review submissions (review cycles) per pull request, scoped to merged pull requests and attributed to the pull request's merge day. |
Breakdown dimension values
The breakdown objects above use dimension fields whose values come from fixed sets. These are field values, not separate fields. For example, agent_edit and the chat_panel_*_mode values are values of the feature field, not top-level fields.
The feature dimension identifies the Copilot feature or mode an activity is attributed to:
The ide dimension identifies the IDE an activity occurred in. This is not an exhaustive list, but examples of observed values include vscode, visualstudio, intellij, eclipse, xcode, neovim, vim, emacs, and zed.
The model dimension identifies the AI model used for chat activity. Values include specific model identifiers (for example, gpt-5.4 or claude-sonnet-4.6), auto, unknown, and others. The auto value represents activity where auto model selection was used and the request was not attributed to a specific model.
The phase dimension identifies the AI adoption phase a user is grouped into: No Cohort, Phase 1, Phase 2, or Phase 3.
