From 5d8207dffd6cb18698fa65326e9270b59da5ecc6 Mon Sep 17 00:00:00 2001 From: "T. Greg Doucette" <58960990+LawDevNull@users.noreply.github.com> Date: Fri, 31 Oct 2025 15:22:07 -0400 Subject: [PATCH 1/3] Re-deploy Universe DPA Previews list (#58305) --- content/site-policy/github-terms/github-dpa-previews.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/site-policy/github-terms/github-dpa-previews.md b/content/site-policy/github-terms/github-dpa-previews.md index 64473de06d5c..e77c903b1611 100644 --- a/content/site-policy/github-terms/github-dpa-previews.md +++ b/content/site-policy/github-terms/github-dpa-previews.md @@ -14,4 +14,6 @@ The pre-release products and features listed below use data handling that is the | Product / Feature | DPA Coverage Date | |:---------------------------------------------------|:-------------------:| -| Coming Soon! | 27 October 2025 | +| Copilot CLI | 27 October 2025 | +| Copilot Enterprise & Users Usage Metrics Dashboard | 27 October 2025 | +| Spark | 27 October 2025 | From 4d3630545aea28a0f382c0b5728c3bd41f7820af Mon Sep 17 00:00:00 2001 From: docs-bot <77750099+docs-bot@users.noreply.github.com> Date: Fri, 31 Oct 2025 12:32:33 -0700 Subject: [PATCH 2/3] Update OpenAPI Description (#58303) Co-authored-by: Joe Clark <31087804+jc-clark@users.noreply.github.com> --- .../fine-grained-pat-permissions.json | 18 + .../data/fpt-2022-11-28/fine-grained-pat.json | 12 + .../server-to-server-permissions.json | 22 + .../fpt-2022-11-28/server-to-server-rest.json | 6 + .../fpt-2022-11-28/user-to-server-rest.json | 12 + .../fine-grained-pat-permissions.json | 18 + .../ghec-2022-11-28/fine-grained-pat.json | 12 + .../server-to-server-permissions.json | 22 + .../server-to-server-rest.json | 6 + .../ghec-2022-11-28/user-to-server-rest.json | 12 + src/github-apps/lib/config.json | 2 +- src/rest/data/fpt-2022-11-28/schema.json | 899 ++++++++++-- src/rest/data/ghec-2022-11-28/schema.json | 1251 +++++++++++++++-- .../data/ghes-3.16-2022-11-28/schema.json | 27 + .../data/ghes-3.17-2022-11-28/schema.json | 27 + .../data/ghes-3.18-2022-11-28/schema.json | 55 + src/rest/lib/config.json | 2 +- src/webhooks/lib/config.json | 2 +- 18 files changed, 2207 insertions(+), 198 deletions(-) diff --git a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json index 167e5ea9da69..09c7b3b3e108 100644 --- a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json +++ b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat-permissions.json @@ -135,6 +135,15 @@ "additional-permissions": false, "access": "read" }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary", + "additional-permissions": false, + "access": "read" + }, { "category": "orgs", "slug": "update-an-organization", @@ -8741,6 +8750,15 @@ "requestPath": "/users/{username}/settings/billing/usage", "additional-permissions": false, "access": "read" + }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary", + "additional-permissions": false, + "access": "read" } ] }, diff --git a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json index 88afe097f2a7..79c9f0e67cee 100644 --- a/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json +++ b/src/github-apps/data/fpt-2022-11-28/fine-grained-pat.json @@ -1120,6 +1120,12 @@ "verb": "get", "requestPath": "/organizations/{org}/settings/billing/usage" }, + { + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary" + }, { "slug": "get-github-actions-billing-for-an-organization", "subcategory": "billing", @@ -1167,6 +1173,12 @@ "subcategory": "enhanced-billing", "verb": "get", "requestPath": "/users/{username}/settings/billing/usage" + }, + { + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary" } ], "branches": [ diff --git a/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json b/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json index d8861d75d32b..a915cf9fd017 100644 --- a/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json +++ b/src/github-apps/data/fpt-2022-11-28/server-to-server-permissions.json @@ -163,6 +163,17 @@ "server-to-server": true, "additional-permissions": false }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary", + "access": "read", + "user-to-server": true, + "server-to-server": true, + "additional-permissions": false + }, { "category": "orgs", "slug": "update-an-organization", @@ -11038,6 +11049,17 @@ "user-to-server": true, "server-to-server": false, "additional-permissions": false + }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary", + "access": "read", + "user-to-server": true, + "server-to-server": false, + "additional-permissions": false } ] }, diff --git a/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json b/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json index 1125df4ce0f4..62ef7121110f 100644 --- a/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json +++ b/src/github-apps/data/fpt-2022-11-28/server-to-server-rest.json @@ -1158,6 +1158,12 @@ "verb": "get", "requestPath": "/organizations/{org}/settings/billing/usage" }, + { + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary" + }, { "slug": "get-github-actions-billing-for-an-organization", "subcategory": "billing", diff --git a/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json b/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json index 6f8ad411cfd3..a0065cfff688 100644 --- a/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json +++ b/src/github-apps/data/fpt-2022-11-28/user-to-server-rest.json @@ -1200,6 +1200,12 @@ "verb": "get", "requestPath": "/organizations/{org}/settings/billing/usage" }, + { + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary" + }, { "slug": "get-github-actions-billing-for-an-organization", "subcategory": "billing", @@ -1247,6 +1253,12 @@ "subcategory": "enhanced-billing", "verb": "get", "requestPath": "/users/{username}/settings/billing/usage" + }, + { + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary" } ], "branches": [ diff --git a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json index b04d9fcd73d4..9a1a82ea2bda 100644 --- a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json +++ b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat-permissions.json @@ -213,6 +213,15 @@ "additional-permissions": false, "access": "read" }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary", + "additional-permissions": false, + "access": "read" + }, { "category": "orgs", "slug": "update-an-organization", @@ -9608,6 +9617,15 @@ "requestPath": "/users/{username}/settings/billing/usage", "additional-permissions": false, "access": "read" + }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary", + "additional-permissions": false, + "access": "read" } ] }, diff --git a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json index 91514494b504..814b730be938 100644 --- a/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json +++ b/src/github-apps/data/ghec-2022-11-28/fine-grained-pat.json @@ -1140,6 +1140,12 @@ "verb": "get", "requestPath": "/organizations/{org}/settings/billing/usage" }, + { + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary" + }, { "slug": "get-github-actions-billing-for-an-organization", "subcategory": "billing", @@ -1193,6 +1199,12 @@ "subcategory": "enhanced-billing", "verb": "get", "requestPath": "/users/{username}/settings/billing/usage" + }, + { + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary" } ], "branches": [ diff --git a/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json b/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json index a650eb36061e..d3fce01a0bea 100644 --- a/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json +++ b/src/github-apps/data/ghec-2022-11-28/server-to-server-permissions.json @@ -760,6 +760,17 @@ "server-to-server": true, "additional-permissions": false }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary", + "access": "read", + "user-to-server": true, + "server-to-server": true, + "additional-permissions": false + }, { "category": "orgs", "slug": "update-an-organization", @@ -12590,6 +12601,17 @@ "user-to-server": true, "server-to-server": false, "additional-permissions": false + }, + { + "category": "billing", + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary", + "access": "read", + "user-to-server": true, + "server-to-server": false, + "additional-permissions": false } ] }, diff --git a/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json b/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json index e8e4a846ff19..ca2e3ae5195f 100644 --- a/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json +++ b/src/github-apps/data/ghec-2022-11-28/server-to-server-rest.json @@ -1190,6 +1190,12 @@ "verb": "get", "requestPath": "/organizations/{org}/settings/billing/usage" }, + { + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary" + }, { "slug": "get-github-actions-billing-for-an-organization", "subcategory": "billing", diff --git a/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json b/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json index 7051faf508bd..50cd2fece2af 100644 --- a/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json +++ b/src/github-apps/data/ghec-2022-11-28/user-to-server-rest.json @@ -1232,6 +1232,12 @@ "verb": "get", "requestPath": "/organizations/{org}/settings/billing/usage" }, + { + "slug": "get-billing-usage-summary-report-for-an-organization", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary" + }, { "slug": "get-github-actions-billing-for-an-organization", "subcategory": "billing", @@ -1285,6 +1291,12 @@ "subcategory": "enhanced-billing", "verb": "get", "requestPath": "/users/{username}/settings/billing/usage" + }, + { + "slug": "get-billing-usage-summary-report-for-a-user", + "subcategory": "enhanced-billing", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary" } ], "branches": [ diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json index 61fa29449c9c..8c4dcb1e612e 100644 --- a/src/github-apps/lib/config.json +++ b/src/github-apps/lib/config.json @@ -60,5 +60,5 @@ "2022-11-28" ] }, - "sha": "e8e7ce91c9f7b8171f2cb856842e1d1f930a0837" + "sha": "ebc1fecbcfb4449cc61d45e2608ac765b5b144a0" } \ No newline at end of file diff --git a/src/rest/data/fpt-2022-11-28/schema.json b/src/rest/data/fpt-2022-11-28/schema.json index 0e1538dfbb45..49bb8708b1f1 100644 --- a/src/rest/data/fpt-2022-11-28/schema.json +++ b/src/rest/data/fpt-2022-11-28/schema.json @@ -114644,6 +114644,257 @@ ] } }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary", + "title": "Get billing usage summary report for an organization", + "category": "billing", + "subcategory": "enhanced-billing", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "year", + "description": "

If specified, only return results for a single year. The value of year is an integer with four digits representing a year. For example, 2025. Default value is the current year.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "month", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. Default value is the current month. If no year is specified the default year is used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "day", + "description": "

If specified, only return results for a single day. The value of day is an integer between 1 and 31. If no year or month is specified, the default year and month are used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "repository", + "description": "

The repository name to query for usage in the format owner/repository.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "product", + "description": "

The product name to query usage for. The name is not case sensitive.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sku", + "description": "

The SKU to query for usage.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "bodyParameters": [], + "descriptionHTML": "

Note

\n

\nThis endpoint is in public preview and is subject to change.

\n
\n

Gets a summary report of usage for an organization. To use this endpoint, you must be an administrator of an organization within an enterprise or an organization account.

\n

Note: Only data from the past 24 months is accessible via this endpoint.

", + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response when getting a billing usage summary report

", + "example": { + "timePeriod": { + "year": 2025 + }, + "organization": "GitHub", + "usageItems": [ + { + "product": "Actions", + "sku": "actions_linux", + "unitType": "minutes", + "pricePerUnit": 0.008, + "grossQuantity": 1000, + "grossAmount": 8, + "discountQuantity": 0, + "discountAmount": 0, + "netQuantity": 1000, + "netAmount": 8 + } + ] + }, + "schema": { + "type": "object", + "properties": { + "timePeriod": { + "type": "object", + "properties": { + "year": { + "type": "integer", + "description": "The year for the usage report." + }, + "month": { + "type": "integer", + "description": "The month for the usage report." + }, + "day": { + "type": "integer", + "description": "The day for the usage report." + } + }, + "required": [ + "year" + ] + }, + "organization": { + "type": "string", + "description": "The unique identifier of the organization." + }, + "repository": { + "type": "string", + "description": "The name of the repository for the usage report." + }, + "product": { + "type": "string", + "description": "The product for the usage report." + }, + "sku": { + "type": "string", + "description": "The SKU for the usage report." + }, + "usageItems": { + "type": "array", + "items": { + "type": "object", + "properties": { + "product": { + "type": "string", + "description": "Product name." + }, + "sku": { + "type": "string", + "description": "SKU name." + }, + "unitType": { + "type": "string", + "description": "Unit type of the usage line item." + }, + "pricePerUnit": { + "type": "number", + "description": "Price per unit of the usage line item." + }, + "grossQuantity": { + "type": "number", + "description": "Gross quantity of the usage line item." + }, + "grossAmount": { + "type": "number", + "description": "Gross amount of the usage line item." + }, + "discountQuantity": { + "type": "number", + "description": "Discount quantity of the usage line item." + }, + "discountAmount": { + "type": "number", + "description": "Discount amount of the usage line item." + }, + "netQuantity": { + "type": "number", + "description": "Net quantity of the usage line item." + }, + "netAmount": { + "type": "number", + "description": "Net amount of the usage line item." + } + }, + "required": [ + "product", + "sku", + "unitType", + "pricePerUnit", + "grossQuantity", + "grossAmount", + "discountQuantity", + "discountAmount", + "netQuantity", + "netAmount" + ] + } + } + }, + "required": [ + "timePeriod", + "organization", + "usageItems" + ] + } + } + } + ], + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

Response when getting a billing usage summary report

" + }, + { + "httpStatusCode": "400", + "description": "

Bad Request

" + }, + { + "httpStatusCode": "403", + "description": "

Forbidden

" + }, + { + "httpStatusCode": "500", + "description": "

Internal Error

" + }, + { + "httpStatusCode": "503", + "description": "

Service unavailable

" + } + ], + "previews": [], + "progAccess": { + "userToServerRest": true, + "serverToServer": true, + "fineGrainedPat": true, + "permissions": [ + { + "\"Administration\" organization permissions": "read" + } + ] + } + }, { "serverUrl": "https://api.github.com", "verb": "get", @@ -114920,7 +115171,185 @@ }, { "name": "month", - "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. If no year is specified the default year is used.

", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. If no year is specified the default year is used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "day", + "description": "

If specified, only return results for a single day. The value of day is an integer between 1 and 31. If no year or month is specified, the default year and month are used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "descriptionHTML": "

Gets a report of the total usage for a user.

\n

Note: This endpoint is only available to users with access to the enhanced billing platform.

", + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "username": "USERNAME" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response when getting a billing usage report

", + "example": { + "usageItems": [ + { + "date": "2023-08-01", + "product": "Actions", + "sku": "Actions Linux", + "quantity": 100, + "unitType": "minutes", + "pricePerUnit": 0.008, + "grossAmount": 0.8, + "discountAmount": 0, + "netAmount": 0.8, + "repositoryName": "user/example" + } + ] + }, + "schema": { + "type": "object", + "properties": { + "usageItems": { + "type": "array", + "items": { + "type": "object", + "properties": { + "date": { + "type": "string", + "description": "Date of the usage line item." + }, + "product": { + "type": "string", + "description": "Product name." + }, + "sku": { + "type": "string", + "description": "SKU name." + }, + "quantity": { + "type": "integer", + "description": "Quantity of the usage line item." + }, + "unitType": { + "type": "string", + "description": "Unit type of the usage line item." + }, + "pricePerUnit": { + "type": "number", + "description": "Price per unit of the usage line item." + }, + "grossAmount": { + "type": "number", + "description": "Gross amount of the usage line item." + }, + "discountAmount": { + "type": "number", + "description": "Discount amount of the usage line item." + }, + "netAmount": { + "type": "number", + "description": "Net amount of the usage line item." + }, + "repositoryName": { + "type": "string", + "description": "Name of the repository." + } + }, + "required": [ + "date", + "product", + "sku", + "quantity", + "unitType", + "pricePerUnit", + "grossAmount", + "discountAmount", + "netAmount" + ] + } + } + } + } + } + } + ], + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

Response when getting a billing usage report

" + }, + { + "httpStatusCode": "400", + "description": "

Bad Request

" + }, + { + "httpStatusCode": "403", + "description": "

Forbidden

" + }, + { + "httpStatusCode": "500", + "description": "

Internal Error

" + }, + { + "httpStatusCode": "503", + "description": "

Service unavailable

" + } + ], + "previews": [], + "progAccess": { + "userToServerRest": true, + "serverToServer": false, + "fineGrainedPat": true, + "permissions": [ + { + "\"Plan\" user permissions": "read" + } + ] + } + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary", + "title": "Get billing usage summary report for a user", + "category": "billing", + "subcategory": "enhanced-billing", + "parameters": [ + { + "name": "username", + "description": "

The handle for the GitHub user account.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "year", + "description": "

If specified, only return results for a single year. The value of year is an integer with four digits representing a year. For example, 2025. Default value is the current year.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "month", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. Default value is the current month. If no year is specified the default year is used.

", "in": "query", "required": false, "schema": { @@ -114935,10 +115364,37 @@ "schema": { "type": "integer" } + }, + { + "name": "repository", + "description": "

The repository name to query for usage in the format owner/repository.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "product", + "description": "

The product name to query usage for. The name is not case sensitive.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sku", + "description": "

The SKU to query for usage.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } } ], "bodyParameters": [], - "descriptionHTML": "

Gets a report of the total usage for a user.

\n

Note: This endpoint is only available to users with access to the enhanced billing platform.

", + "descriptionHTML": "

Note

\n

\nThis endpoint is in public preview and is subject to change.

\n
\n

Gets a summary report of usage for a user.

\n

Note: Only data from the past 24 months is accessible via this endpoint.

", "codeExamples": [ { "key": "default", @@ -114952,35 +115408,71 @@ "response": { "statusCode": "200", "contentType": "application/json", - "description": "

Response when getting a billing usage report

", + "description": "

Response when getting a billing usage summary report

", "example": { + "timePeriod": { + "year": 2025 + }, + "user": "monalisa", "usageItems": [ { - "date": "2023-08-01", "product": "Actions", - "sku": "Actions Linux", - "quantity": 100, + "sku": "actions_linux", "unitType": "minutes", "pricePerUnit": 0.008, - "grossAmount": 0.8, + "grossQuantity": 1000, + "grossAmount": 8, + "discountQuantity": 0, "discountAmount": 0, - "netAmount": 0.8, - "repositoryName": "user/example" + "netQuantity": 1000, + "netAmount": 8 } ] }, "schema": { "type": "object", "properties": { + "timePeriod": { + "type": "object", + "properties": { + "year": { + "type": "integer", + "description": "The year for the usage report." + }, + "month": { + "type": "integer", + "description": "The month for the usage report." + }, + "day": { + "type": "integer", + "description": "The day for the usage report." + } + }, + "required": [ + "year" + ] + }, + "user": { + "type": "string", + "description": "The unique identifier of the user." + }, + "repository": { + "type": "string", + "description": "The name of the repository for the usage report." + }, + "product": { + "type": "string", + "description": "The product for the usage report." + }, + "sku": { + "type": "string", + "description": "The SKU for the usage report." + }, "usageItems": { "type": "array", "items": { "type": "object", "properties": { - "date": { - "type": "string", - "description": "Date of the usage line item." - }, "product": { "type": "string", "description": "Product name." @@ -114989,10 +115481,6 @@ "type": "string", "description": "SKU name." }, - "quantity": { - "type": "integer", - "description": "Quantity of the usage line item." - }, "unitType": { "type": "string", "description": "Unit type of the usage line item." @@ -115001,37 +115489,51 @@ "type": "number", "description": "Price per unit of the usage line item." }, + "grossQuantity": { + "type": "number", + "description": "Gross quantity of the usage line item." + }, "grossAmount": { "type": "number", "description": "Gross amount of the usage line item." }, + "discountQuantity": { + "type": "number", + "description": "Discount quantity of the usage line item." + }, "discountAmount": { "type": "number", "description": "Discount amount of the usage line item." }, + "netQuantity": { + "type": "number", + "description": "Net quantity of the usage line item." + }, "netAmount": { "type": "number", "description": "Net amount of the usage line item." - }, - "repositoryName": { - "type": "string", - "description": "Name of the repository." } }, "required": [ - "date", "product", "sku", - "quantity", "unitType", "pricePerUnit", + "grossQuantity", "grossAmount", + "discountQuantity", "discountAmount", + "netQuantity", "netAmount" ] } } - } + }, + "required": [ + "timePeriod", + "user", + "usageItems" + ] } } } @@ -115039,7 +115541,7 @@ "statusCodes": [ { "httpStatusCode": "200", - "description": "

Response when getting a billing usage report

" + "description": "

Response when getting a billing usage summary report

" }, { "httpStatusCode": "400", @@ -115049,6 +115551,10 @@ "httpStatusCode": "403", "description": "

Forbidden

" }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + }, { "httpStatusCode": "500", "description": "

Internal Error

" @@ -426621,6 +427127,12 @@ "deleted" ], "default": "active" + }, + { + "type": "string", + "name": "github_repository", + "in": "body", + "description": "

The name of the GitHub repository associated with the artifact. This should be used\nwhen there are no provenance attestations available for the artifact. The repository\nmust belong to the organization specified in the path parameter.

\n

If a provenance attestation is available for the artifact, the API will use\nthe repository information from the attestation instead of this parameter.

" } ], "descriptionHTML": "

Create metadata storage records for artifacts associated with an organization.\nThis endpoint will create a new artifact storage record on behalf of any artifact matching the provided digest and\nassociated with a repository owned by the organization.

", @@ -470162,6 +470674,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -470172,6 +470689,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -470286,6 +470808,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", @@ -470331,6 +470860,7 @@ "registry_type": "maven_repository", "url": "https://maven.pkg.github.com/organization/", "username": "monalisa", + "replaces_base": true, "encrypted_value": "c2VjcmV0", "key_id": "012345678912345678", "visibility": "private" @@ -470388,6 +470918,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": "string", @@ -470395,6 +470930,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry. `selected` means only the repositories specified by `selected_repository_ids` can access the private registry.", "enum": [ @@ -470497,6 +471037,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": "string", @@ -470504,6 +471049,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry. `selected` means only the repositories specified by `selected_repository_ids` can access the private registry.", "enum": [ @@ -470737,6 +471287,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -470747,6 +471302,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -470861,6 +471421,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", @@ -475294,35 +475861,120 @@ "statusCode": "200", "contentType": "application/json", "description": "

Response

", - "example": { - "id": 12345, - "node_id": "PVTF_lADOABCD1234567890", - "name": "Priority", - "data_type": "single_select", - "project_url": "https://api.github.com/projects/67890", - "options": [ - { - "id": "option_1", - "name": "Low", - "color": "GREEN", - "description": "Low priority items" - }, - { - "id": "option_2", - "name": "Medium", - "color": "YELLOW", - "description": "Medium priority items" + "example": [ + { + "id": 12345, + "node_id": "PVTF_lADOABCD1234567890", + "name": "Priority", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_1", + "name": "Low", + "color": "GREEN", + "description": "Low priority items" + }, + { + "id": "option_2", + "name": "Medium", + "color": "YELLOW", + "description": "Medium priority items" + }, + { + "id": "option_3", + "name": "High", + "color": "RED", + "description": "High priority items" + } + ], + "created_at": "2022-04-28T12:00:00Z", + "updated_at": "2022-04-28T12:00:00Z" + }, + { + "id": 67891, + "node_id": "PVTF_lADOABCD9876543210", + "name": "Status", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_4", + "name": "Todo", + "color": "GRAY", + "description": "Items to be worked on" + }, + { + "id": "option_5", + "name": "In Progress", + "color": "BLUE", + "description": "Items currently being worked on" + }, + { + "id": "option_6", + "name": "Done", + "color": "GREEN", + "description": "Completed items" + } + ], + "created_at": "2022-04-29T10:30:00Z", + "updated_at": "2022-04-29T10:30:00Z" + }, + { + "id": 24680, + "node_id": "PVTF_lADOABCD2468024680", + "name": "Team notes", + "data_type": "text", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-05-15T08:00:00Z", + "updated_at": "2022-05-15T08:00:00Z" + }, + { + "id": 13579, + "node_id": "PVTF_lADOABCD1357913579", + "name": "Story points", + "data_type": "number", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-01T14:30:00Z", + "updated_at": "2022-06-01T14:30:00Z" + }, + { + "id": 98765, + "node_id": "PVTF_lADOABCD9876598765", + "name": "Due date", + "data_type": "date", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-10T09:15:00Z", + "updated_at": "2022-06-10T09:15:00Z" + }, + { + "id": 11223, + "node_id": "PVTF_lADOABCD1122311223", + "name": "Sprint", + "data_type": "iteration", + "project_url": "https://api.github.com/projects/67890", + "configuration": { + "duration": 14, + "start_day": 1, + "iterations": [ + { + "id": "iter_1", + "title": "Sprint 1", + "start_date": "2022-07-01", + "duration": 14 + }, + { + "id": "iter_2", + "title": "Sprint 2", + "start_date": "2022-07-15", + "duration": 14 + } + ] }, - { - "id": "option_3", - "name": "High", - "color": "RED", - "description": "High priority items" - } - ], - "created_at": "2022-04-28T12:00:00Z", - "updated_at": "2022-04-28T12:00:00Z" - }, + "created_at": "2022-06-20T16:45:00Z", + "updated_at": "2022-06-20T16:45:00Z" + } + ], "schema": { "type": "array", "items": { @@ -475932,35 +476584,120 @@ "statusCode": "200", "contentType": "application/json", "description": "

Response

", - "example": { - "id": 12345, - "node_id": "PVTF_lADOABCD1234567890", - "name": "Priority", - "data_type": "single_select", - "project_url": "https://api.github.com/projects/67890", - "options": [ - { - "id": "option_1", - "name": "Low", - "color": "GREEN", - "description": "Low priority items" - }, - { - "id": "option_2", - "name": "Medium", - "color": "YELLOW", - "description": "Medium priority items" + "example": [ + { + "id": 12345, + "node_id": "PVTF_lADOABCD1234567890", + "name": "Priority", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_1", + "name": "Low", + "color": "GREEN", + "description": "Low priority items" + }, + { + "id": "option_2", + "name": "Medium", + "color": "YELLOW", + "description": "Medium priority items" + }, + { + "id": "option_3", + "name": "High", + "color": "RED", + "description": "High priority items" + } + ], + "created_at": "2022-04-28T12:00:00Z", + "updated_at": "2022-04-28T12:00:00Z" + }, + { + "id": 67891, + "node_id": "PVTF_lADOABCD9876543210", + "name": "Status", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_4", + "name": "Todo", + "color": "GRAY", + "description": "Items to be worked on" + }, + { + "id": "option_5", + "name": "In Progress", + "color": "BLUE", + "description": "Items currently being worked on" + }, + { + "id": "option_6", + "name": "Done", + "color": "GREEN", + "description": "Completed items" + } + ], + "created_at": "2022-04-29T10:30:00Z", + "updated_at": "2022-04-29T10:30:00Z" + }, + { + "id": 24680, + "node_id": "PVTF_lADOABCD2468024680", + "name": "Team notes", + "data_type": "text", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-05-15T08:00:00Z", + "updated_at": "2022-05-15T08:00:00Z" + }, + { + "id": 13579, + "node_id": "PVTF_lADOABCD1357913579", + "name": "Story points", + "data_type": "number", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-01T14:30:00Z", + "updated_at": "2022-06-01T14:30:00Z" + }, + { + "id": 98765, + "node_id": "PVTF_lADOABCD9876598765", + "name": "Due date", + "data_type": "date", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-10T09:15:00Z", + "updated_at": "2022-06-10T09:15:00Z" + }, + { + "id": 11223, + "node_id": "PVTF_lADOABCD1122311223", + "name": "Sprint", + "data_type": "iteration", + "project_url": "https://api.github.com/projects/67890", + "configuration": { + "duration": 14, + "start_day": 1, + "iterations": [ + { + "id": "iter_1", + "title": "Sprint 1", + "start_date": "2022-07-01", + "duration": 14 + }, + { + "id": "iter_2", + "title": "Sprint 2", + "start_date": "2022-07-15", + "duration": 14 + } + ] }, - { - "id": "option_3", - "name": "High", - "color": "RED", - "description": "High priority items" - } - ], - "created_at": "2022-04-28T12:00:00Z", - "updated_at": "2022-04-28T12:00:00Z" - }, + "created_at": "2022-06-20T16:45:00Z", + "updated_at": "2022-06-20T16:45:00Z" + } + ], "schema": { "type": "array", "items": { diff --git a/src/rest/data/ghec-2022-11-28/schema.json b/src/rest/data/ghec-2022-11-28/schema.json index 79c4480a657b..85522f0ec036 100644 --- a/src/rest/data/ghec-2022-11-28/schema.json +++ b/src/rest/data/ghec-2022-11-28/schema.json @@ -125685,6 +125685,257 @@ ] } }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/organizations/{org}/settings/billing/usage/summary", + "title": "Get billing usage summary report for an organization", + "category": "billing", + "subcategory": "enhanced-billing", + "parameters": [ + { + "name": "org", + "description": "

The organization name. The name is not case sensitive.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "year", + "description": "

If specified, only return results for a single year. The value of year is an integer with four digits representing a year. For example, 2025. Default value is the current year.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "month", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. Default value is the current month. If no year is specified the default year is used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "day", + "description": "

If specified, only return results for a single day. The value of day is an integer between 1 and 31. If no year or month is specified, the default year and month are used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "repository", + "description": "

The repository name to query for usage in the format owner/repository.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "product", + "description": "

The product name to query usage for. The name is not case sensitive.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sku", + "description": "

The SKU to query for usage.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "bodyParameters": [], + "descriptionHTML": "

Note

\n

\nThis endpoint is in public preview and is subject to change.

\n
\n

Gets a summary report of usage for an organization. To use this endpoint, you must be an administrator of an organization within an enterprise or an organization account.

\n

Note: Only data from the past 24 months is accessible via this endpoint.

", + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "org": "ORG" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response when getting a billing usage summary report

", + "example": { + "timePeriod": { + "year": 2025 + }, + "organization": "GitHub", + "usageItems": [ + { + "product": "Actions", + "sku": "actions_linux", + "unitType": "minutes", + "pricePerUnit": 0.008, + "grossQuantity": 1000, + "grossAmount": 8, + "discountQuantity": 0, + "discountAmount": 0, + "netQuantity": 1000, + "netAmount": 8 + } + ] + }, + "schema": { + "type": "object", + "properties": { + "timePeriod": { + "type": "object", + "properties": { + "year": { + "type": "integer", + "description": "The year for the usage report." + }, + "month": { + "type": "integer", + "description": "The month for the usage report." + }, + "day": { + "type": "integer", + "description": "The day for the usage report." + } + }, + "required": [ + "year" + ] + }, + "organization": { + "type": "string", + "description": "The unique identifier of the organization." + }, + "repository": { + "type": "string", + "description": "The name of the repository for the usage report." + }, + "product": { + "type": "string", + "description": "The product for the usage report." + }, + "sku": { + "type": "string", + "description": "The SKU for the usage report." + }, + "usageItems": { + "type": "array", + "items": { + "type": "object", + "properties": { + "product": { + "type": "string", + "description": "Product name." + }, + "sku": { + "type": "string", + "description": "SKU name." + }, + "unitType": { + "type": "string", + "description": "Unit type of the usage line item." + }, + "pricePerUnit": { + "type": "number", + "description": "Price per unit of the usage line item." + }, + "grossQuantity": { + "type": "number", + "description": "Gross quantity of the usage line item." + }, + "grossAmount": { + "type": "number", + "description": "Gross amount of the usage line item." + }, + "discountQuantity": { + "type": "number", + "description": "Discount quantity of the usage line item." + }, + "discountAmount": { + "type": "number", + "description": "Discount amount of the usage line item." + }, + "netQuantity": { + "type": "number", + "description": "Net quantity of the usage line item." + }, + "netAmount": { + "type": "number", + "description": "Net amount of the usage line item." + } + }, + "required": [ + "product", + "sku", + "unitType", + "pricePerUnit", + "grossQuantity", + "grossAmount", + "discountQuantity", + "discountAmount", + "netQuantity", + "netAmount" + ] + } + } + }, + "required": [ + "timePeriod", + "organization", + "usageItems" + ] + } + } + } + ], + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

Response when getting a billing usage summary report

" + }, + { + "httpStatusCode": "400", + "description": "

Bad Request

" + }, + { + "httpStatusCode": "403", + "description": "

Forbidden

" + }, + { + "httpStatusCode": "500", + "description": "

Internal Error

" + }, + { + "httpStatusCode": "503", + "description": "

Service unavailable

" + } + ], + "previews": [], + "progAccess": { + "userToServerRest": true, + "serverToServer": true, + "fineGrainedPat": true, + "permissions": [ + { + "\"Administration\" organization permissions": "read" + } + ] + } + }, { "serverUrl": "https://api.github.com", "verb": "get", @@ -125961,7 +126212,185 @@ }, { "name": "month", - "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. If no year is specified the default year is used.

", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. If no year is specified the default year is used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "day", + "description": "

If specified, only return results for a single day. The value of day is an integer between 1 and 31. If no year or month is specified, the default year and month are used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + } + ], + "bodyParameters": [], + "descriptionHTML": "

Gets a report of the total usage for a user.

\n

Note: This endpoint is only available to users with access to the enhanced billing platform.

", + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "username": "USERNAME" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response when getting a billing usage report

", + "example": { + "usageItems": [ + { + "date": "2023-08-01", + "product": "Actions", + "sku": "Actions Linux", + "quantity": 100, + "unitType": "minutes", + "pricePerUnit": 0.008, + "grossAmount": 0.8, + "discountAmount": 0, + "netAmount": 0.8, + "repositoryName": "user/example" + } + ] + }, + "schema": { + "type": "object", + "properties": { + "usageItems": { + "type": "array", + "items": { + "type": "object", + "properties": { + "date": { + "type": "string", + "description": "Date of the usage line item." + }, + "product": { + "type": "string", + "description": "Product name." + }, + "sku": { + "type": "string", + "description": "SKU name." + }, + "quantity": { + "type": "integer", + "description": "Quantity of the usage line item." + }, + "unitType": { + "type": "string", + "description": "Unit type of the usage line item." + }, + "pricePerUnit": { + "type": "number", + "description": "Price per unit of the usage line item." + }, + "grossAmount": { + "type": "number", + "description": "Gross amount of the usage line item." + }, + "discountAmount": { + "type": "number", + "description": "Discount amount of the usage line item." + }, + "netAmount": { + "type": "number", + "description": "Net amount of the usage line item." + }, + "repositoryName": { + "type": "string", + "description": "Name of the repository." + } + }, + "required": [ + "date", + "product", + "sku", + "quantity", + "unitType", + "pricePerUnit", + "grossAmount", + "discountAmount", + "netAmount" + ] + } + } + } + } + } + } + ], + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

Response when getting a billing usage report

" + }, + { + "httpStatusCode": "400", + "description": "

Bad Request

" + }, + { + "httpStatusCode": "403", + "description": "

Forbidden

" + }, + { + "httpStatusCode": "500", + "description": "

Internal Error

" + }, + { + "httpStatusCode": "503", + "description": "

Service unavailable

" + } + ], + "previews": [], + "progAccess": { + "userToServerRest": true, + "serverToServer": false, + "fineGrainedPat": true, + "permissions": [ + { + "\"Plan\" user permissions": "read" + } + ] + } + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/users/{username}/settings/billing/usage/summary", + "title": "Get billing usage summary report for a user", + "category": "billing", + "subcategory": "enhanced-billing", + "parameters": [ + { + "name": "username", + "description": "

The handle for the GitHub user account.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "year", + "description": "

If specified, only return results for a single year. The value of year is an integer with four digits representing a year. For example, 2025. Default value is the current year.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "month", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. Default value is the current month. If no year is specified the default year is used.

", "in": "query", "required": false, "schema": { @@ -125976,10 +126405,37 @@ "schema": { "type": "integer" } + }, + { + "name": "repository", + "description": "

The repository name to query for usage in the format owner/repository.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "product", + "description": "

The product name to query usage for. The name is not case sensitive.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sku", + "description": "

The SKU to query for usage.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } } ], "bodyParameters": [], - "descriptionHTML": "

Gets a report of the total usage for a user.

\n

Note: This endpoint is only available to users with access to the enhanced billing platform.

", + "descriptionHTML": "

Note

\n

\nThis endpoint is in public preview and is subject to change.

\n
\n

Gets a summary report of usage for a user.

\n

Note: Only data from the past 24 months is accessible via this endpoint.

", "codeExamples": [ { "key": "default", @@ -125993,35 +126449,71 @@ "response": { "statusCode": "200", "contentType": "application/json", - "description": "

Response when getting a billing usage report

", + "description": "

Response when getting a billing usage summary report

", "example": { + "timePeriod": { + "year": 2025 + }, + "user": "monalisa", "usageItems": [ { - "date": "2023-08-01", "product": "Actions", - "sku": "Actions Linux", - "quantity": 100, + "sku": "actions_linux", "unitType": "minutes", "pricePerUnit": 0.008, - "grossAmount": 0.8, + "grossQuantity": 1000, + "grossAmount": 8, + "discountQuantity": 0, "discountAmount": 0, - "netAmount": 0.8, - "repositoryName": "user/example" + "netQuantity": 1000, + "netAmount": 8 } ] }, "schema": { "type": "object", "properties": { + "timePeriod": { + "type": "object", + "properties": { + "year": { + "type": "integer", + "description": "The year for the usage report." + }, + "month": { + "type": "integer", + "description": "The month for the usage report." + }, + "day": { + "type": "integer", + "description": "The day for the usage report." + } + }, + "required": [ + "year" + ] + }, + "user": { + "type": "string", + "description": "The unique identifier of the user." + }, + "repository": { + "type": "string", + "description": "The name of the repository for the usage report." + }, + "product": { + "type": "string", + "description": "The product for the usage report." + }, + "sku": { + "type": "string", + "description": "The SKU for the usage report." + }, "usageItems": { "type": "array", "items": { "type": "object", "properties": { - "date": { - "type": "string", - "description": "Date of the usage line item." - }, "product": { "type": "string", "description": "Product name." @@ -126030,10 +126522,6 @@ "type": "string", "description": "SKU name." }, - "quantity": { - "type": "integer", - "description": "Quantity of the usage line item." - }, "unitType": { "type": "string", "description": "Unit type of the usage line item." @@ -126042,37 +126530,51 @@ "type": "number", "description": "Price per unit of the usage line item." }, + "grossQuantity": { + "type": "number", + "description": "Gross quantity of the usage line item." + }, "grossAmount": { "type": "number", "description": "Gross amount of the usage line item." }, + "discountQuantity": { + "type": "number", + "description": "Discount quantity of the usage line item." + }, "discountAmount": { "type": "number", "description": "Discount amount of the usage line item." }, + "netQuantity": { + "type": "number", + "description": "Net quantity of the usage line item." + }, "netAmount": { "type": "number", "description": "Net amount of the usage line item." - }, - "repositoryName": { - "type": "string", - "description": "Name of the repository." } }, "required": [ - "date", "product", "sku", - "quantity", "unitType", "pricePerUnit", + "grossQuantity", "grossAmount", + "discountQuantity", "discountAmount", + "netQuantity", "netAmount" ] } } - } + }, + "required": [ + "timePeriod", + "user", + "usageItems" + ] } } } @@ -126080,7 +126582,7 @@ "statusCodes": [ { "httpStatusCode": "200", - "description": "

Response when getting a billing usage report

" + "description": "

Response when getting a billing usage summary report

" }, { "httpStatusCode": "400", @@ -126090,6 +126592,10 @@ "httpStatusCode": "403", "description": "

Forbidden

" }, + { + "httpStatusCode": "404", + "description": "

Resource not found

" + }, { "httpStatusCode": "500", "description": "

Internal Error

" @@ -297387,7 +297893,196 @@ }, { "name": "month", - "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. If no year is specified the default year is used.

", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. If no year is specified the default year is used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "day", + "description": "

If specified, only return results for a single day. The value of day is an integer between 1 and 31. If no year or month is specified, the default year and month are used.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "cost_center_id", + "description": "

The ID corresponding to a cost center. The default value is no cost center.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "bodyParameters": [], + "descriptionHTML": "

Gets a report of usage by cost center for an enterprise. To use this endpoint, you must be an administrator or billing manager of the enterprise. By default this endpoint will return usage that does not have a cost center.

\n

Note: This endpoint is only available to enterprises with access to the enhanced billing platform. For more information, see \"About the enhanced billing platform for enterprises.\"

", + "codeExamples": [ + { + "key": "default", + "request": { + "description": "Example", + "acceptHeader": "application/vnd.github.v3+json", + "parameters": { + "enterprise": "ENTERPRISE" + } + }, + "response": { + "statusCode": "200", + "contentType": "application/json", + "description": "

Response when getting a billing usage report

", + "example": { + "usageItems": [ + { + "date": "2023-08-01", + "product": "Actions", + "sku": "Actions Linux", + "quantity": 100, + "unitType": "minutes", + "pricePerUnit": 0.008, + "grossAmount": 0.8, + "discountAmount": 0, + "netAmount": 0.8, + "organizationName": "GitHub", + "repositoryName": "github/example" + } + ] + }, + "schema": { + "type": "object", + "properties": { + "usageItems": { + "type": "array", + "items": { + "type": "object", + "properties": { + "date": { + "type": "string", + "description": "Date of the usage line item." + }, + "product": { + "type": "string", + "description": "Product name." + }, + "sku": { + "type": "string", + "description": "SKU name." + }, + "quantity": { + "type": "integer", + "description": "Quantity of the usage line item." + }, + "unitType": { + "type": "string", + "description": "Unit type of the usage line item." + }, + "pricePerUnit": { + "type": "number", + "description": "Price per unit of the usage line item." + }, + "grossAmount": { + "type": "number", + "description": "Gross amount of the usage line item." + }, + "discountAmount": { + "type": "number", + "description": "Discount amount of the usage line item." + }, + "netAmount": { + "type": "number", + "description": "Net amount of the usage line item." + }, + "organizationName": { + "type": "string", + "description": "Name of the organization." + }, + "repositoryName": { + "type": "string", + "description": "Name of the repository." + } + }, + "required": [ + "date", + "product", + "sku", + "quantity", + "unitType", + "pricePerUnit", + "grossAmount", + "discountAmount", + "netAmount", + "organizationName" + ] + } + } + } + } + } + } + ], + "statusCodes": [ + { + "httpStatusCode": "200", + "description": "

Response when getting a billing usage report

" + }, + { + "httpStatusCode": "400", + "description": "

Bad Request

" + }, + { + "httpStatusCode": "403", + "description": "

Forbidden

" + }, + { + "httpStatusCode": "500", + "description": "

Internal Error

" + }, + { + "httpStatusCode": "503", + "description": "

Service unavailable

" + } + ], + "previews": [], + "progAccess": { + "userToServerRest": false, + "serverToServer": false, + "fineGrainedPat": false, + "permissions": [] + } + }, + { + "serverUrl": "https://api.github.com", + "verb": "get", + "requestPath": "/enterprises/{enterprise}/settings/billing/usage/summary", + "title": "Get billing usage summary report for an enterprise", + "category": "enterprise-admin", + "subcategory": "billing", + "parameters": [ + { + "name": "enterprise", + "description": "

The slug version of the enterprise name.

", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "year", + "description": "

If specified, only return results for a single year. The value of year is an integer with four digits representing a year. For example, 2025. Default value is the current year.

", + "in": "query", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "month", + "description": "

If specified, only return results for a single month. The value of month is an integer between 1 and 12. Default value is the current month. If no year is specified the default year is used.

", "in": "query", "required": false, "schema": { @@ -297403,9 +298098,45 @@ "type": "integer" } }, + { + "name": "organization", + "description": "

The organization name to query usage for. The name is not case sensitive.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "repository", + "description": "

The repository name to query for usage in the format owner/repository.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "product", + "description": "

The product name to query usage for. The name is not case sensitive.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "sku", + "description": "

The SKU to query for usage.

", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, { "name": "cost_center_id", - "description": "

The ID corresponding to a cost center. The default value is no cost center.

", + "description": "

The ID corresponding to a cost center. An ID of 'none' will target usage not associated to any cost center.

", "in": "query", "required": false, "schema": { @@ -297414,7 +298145,7 @@ } ], "bodyParameters": [], - "descriptionHTML": "

Gets a report of usage by cost center for an enterprise. To use this endpoint, you must be an administrator or billing manager of the enterprise. By default this endpoint will return usage that does not have a cost center.

\n

Note: This endpoint is only available to enterprises with access to the enhanced billing platform. For more information, see \"About the enhanced billing platform for enterprises.\"

", + "descriptionHTML": "

Note

\n

\nThis endpoint is in public preview and is subject to change.

\n
\n

Gets a summary report of usage for an enterprise. To use this endpoint, you must be an administrator or billing manager of the enterprise. By default, this endpoint will return usage across all cost centers in the enterprise.

\n

Note: Only data from the past 24 months is accessible via this endpoint.

", "codeExamples": [ { "key": "default", @@ -297428,36 +298159,92 @@ "response": { "statusCode": "200", "contentType": "application/json", - "description": "

Response when getting a billing usage report

", + "description": "

Response when getting a billing usage summary report

", "example": { + "timePeriod": { + "year": 2025 + }, + "enterprise": "GitHub", "usageItems": [ { - "date": "2023-08-01", "product": "Actions", - "sku": "Actions Linux", - "quantity": 100, + "sku": "actions_linux", "unitType": "minutes", "pricePerUnit": 0.008, - "grossAmount": 0.8, + "grossQuantity": 1000, + "grossAmount": 8, + "discountQuantity": 0, "discountAmount": 0, - "netAmount": 0.8, - "organizationName": "GitHub", - "repositoryName": "github/example" + "netQuantity": 1000, + "netAmount": 8 } ] }, "schema": { "type": "object", "properties": { + "timePeriod": { + "type": "object", + "properties": { + "year": { + "type": "integer", + "description": "The year for the usage report." + }, + "month": { + "type": "integer", + "description": "The month for the usage report." + }, + "day": { + "type": "integer", + "description": "The day for the usage report." + } + }, + "required": [ + "year" + ] + }, + "enterprise": { + "type": "string", + "description": "The unique identifier of the enterprise." + }, + "organization": { + "type": "string", + "description": "The name of the organization for the usage report." + }, + "repository": { + "type": "string", + "description": "The name of the repository for the usage report." + }, + "product": { + "type": "string", + "description": "The product for the usage report." + }, + "sku": { + "type": "string", + "description": "The SKU for the usage report." + }, + "costCenter": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the cost center." + }, + "name": { + "type": "string", + "description": "The name of the cost center." + } + }, + "required": [ + "id", + "name" + ] + }, "usageItems": { "type": "array", "items": { "type": "object", "properties": { - "date": { - "type": "string", - "description": "Date of the usage line item." - }, "product": { "type": "string", "description": "Product name." @@ -297466,10 +298253,6 @@ "type": "string", "description": "SKU name." }, - "quantity": { - "type": "integer", - "description": "Quantity of the usage line item." - }, "unitType": { "type": "string", "description": "Unit type of the usage line item." @@ -297478,42 +298261,51 @@ "type": "number", "description": "Price per unit of the usage line item." }, + "grossQuantity": { + "type": "number", + "description": "Gross quantity of the usage line item." + }, "grossAmount": { "type": "number", "description": "Gross amount of the usage line item." }, + "discountQuantity": { + "type": "number", + "description": "Discount quantity of the usage line item." + }, "discountAmount": { "type": "number", "description": "Discount amount of the usage line item." }, + "netQuantity": { + "type": "number", + "description": "Net quantity of the usage line item." + }, "netAmount": { "type": "number", "description": "Net amount of the usage line item." - }, - "organizationName": { - "type": "string", - "description": "Name of the organization." - }, - "repositoryName": { - "type": "string", - "description": "Name of the repository." } }, "required": [ - "date", "product", "sku", - "quantity", "unitType", "pricePerUnit", + "grossQuantity", "grossAmount", + "discountQuantity", "discountAmount", - "netAmount", - "organizationName" + "netQuantity", + "netAmount" ] } } - } + }, + "required": [ + "timePeriod", + "enterprise", + "usageItems" + ] } } } @@ -297521,7 +298313,7 @@ "statusCodes": [ { "httpStatusCode": "200", - "description": "

Response when getting a billing usage report

" + "description": "

Response when getting a billing usage summary report

" }, { "httpStatusCode": "400", @@ -471564,6 +472356,12 @@ "deleted" ], "default": "active" + }, + { + "type": "string", + "name": "github_repository", + "in": "body", + "description": "

The name of the GitHub repository associated with the artifact. This should be used\nwhen there are no provenance attestations available for the artifact. The repository\nmust belong to the organization specified in the path parameter.

\n

If a provenance attestation is available for the artifact, the API will use\nthe repository information from the attestation instead of this parameter.

" } ], "descriptionHTML": "

Create metadata storage records for artifacts associated with an organization.\nThis endpoint will create a new artifact storage record on behalf of any artifact matching the provided digest and\nassociated with a repository owned by the organization.

", @@ -519716,6 +520514,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -519726,6 +520529,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -519840,6 +520648,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", @@ -519885,6 +520700,7 @@ "registry_type": "maven_repository", "url": "https://maven.pkg.github.com/organization/", "username": "monalisa", + "replaces_base": true, "encrypted_value": "c2VjcmV0", "key_id": "012345678912345678", "visibility": "private" @@ -519942,6 +520758,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": "string", @@ -519949,6 +520770,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry. `selected` means only the repositories specified by `selected_repository_ids` can access the private registry.", "enum": [ @@ -520051,6 +520877,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": "string", @@ -520058,6 +520889,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry. `selected` means only the repositories specified by `selected_repository_ids` can access the private registry.", "enum": [ @@ -520291,6 +521127,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -520301,6 +521142,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -520415,6 +521261,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", @@ -524848,35 +525701,120 @@ "statusCode": "200", "contentType": "application/json", "description": "

Response

", - "example": { - "id": 12345, - "node_id": "PVTF_lADOABCD1234567890", - "name": "Priority", - "data_type": "single_select", - "project_url": "https://api.github.com/projects/67890", - "options": [ - { - "id": "option_1", - "name": "Low", - "color": "GREEN", - "description": "Low priority items" - }, - { - "id": "option_2", - "name": "Medium", - "color": "YELLOW", - "description": "Medium priority items" + "example": [ + { + "id": 12345, + "node_id": "PVTF_lADOABCD1234567890", + "name": "Priority", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_1", + "name": "Low", + "color": "GREEN", + "description": "Low priority items" + }, + { + "id": "option_2", + "name": "Medium", + "color": "YELLOW", + "description": "Medium priority items" + }, + { + "id": "option_3", + "name": "High", + "color": "RED", + "description": "High priority items" + } + ], + "created_at": "2022-04-28T12:00:00Z", + "updated_at": "2022-04-28T12:00:00Z" + }, + { + "id": 67891, + "node_id": "PVTF_lADOABCD9876543210", + "name": "Status", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_4", + "name": "Todo", + "color": "GRAY", + "description": "Items to be worked on" + }, + { + "id": "option_5", + "name": "In Progress", + "color": "BLUE", + "description": "Items currently being worked on" + }, + { + "id": "option_6", + "name": "Done", + "color": "GREEN", + "description": "Completed items" + } + ], + "created_at": "2022-04-29T10:30:00Z", + "updated_at": "2022-04-29T10:30:00Z" + }, + { + "id": 24680, + "node_id": "PVTF_lADOABCD2468024680", + "name": "Team notes", + "data_type": "text", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-05-15T08:00:00Z", + "updated_at": "2022-05-15T08:00:00Z" + }, + { + "id": 13579, + "node_id": "PVTF_lADOABCD1357913579", + "name": "Story points", + "data_type": "number", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-01T14:30:00Z", + "updated_at": "2022-06-01T14:30:00Z" + }, + { + "id": 98765, + "node_id": "PVTF_lADOABCD9876598765", + "name": "Due date", + "data_type": "date", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-10T09:15:00Z", + "updated_at": "2022-06-10T09:15:00Z" + }, + { + "id": 11223, + "node_id": "PVTF_lADOABCD1122311223", + "name": "Sprint", + "data_type": "iteration", + "project_url": "https://api.github.com/projects/67890", + "configuration": { + "duration": 14, + "start_day": 1, + "iterations": [ + { + "id": "iter_1", + "title": "Sprint 1", + "start_date": "2022-07-01", + "duration": 14 + }, + { + "id": "iter_2", + "title": "Sprint 2", + "start_date": "2022-07-15", + "duration": 14 + } + ] }, - { - "id": "option_3", - "name": "High", - "color": "RED", - "description": "High priority items" - } - ], - "created_at": "2022-04-28T12:00:00Z", - "updated_at": "2022-04-28T12:00:00Z" - }, + "created_at": "2022-06-20T16:45:00Z", + "updated_at": "2022-06-20T16:45:00Z" + } + ], "schema": { "type": "array", "items": { @@ -525486,35 +526424,120 @@ "statusCode": "200", "contentType": "application/json", "description": "

Response

", - "example": { - "id": 12345, - "node_id": "PVTF_lADOABCD1234567890", - "name": "Priority", - "data_type": "single_select", - "project_url": "https://api.github.com/projects/67890", - "options": [ - { - "id": "option_1", - "name": "Low", - "color": "GREEN", - "description": "Low priority items" - }, - { - "id": "option_2", - "name": "Medium", - "color": "YELLOW", - "description": "Medium priority items" + "example": [ + { + "id": 12345, + "node_id": "PVTF_lADOABCD1234567890", + "name": "Priority", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_1", + "name": "Low", + "color": "GREEN", + "description": "Low priority items" + }, + { + "id": "option_2", + "name": "Medium", + "color": "YELLOW", + "description": "Medium priority items" + }, + { + "id": "option_3", + "name": "High", + "color": "RED", + "description": "High priority items" + } + ], + "created_at": "2022-04-28T12:00:00Z", + "updated_at": "2022-04-28T12:00:00Z" + }, + { + "id": 67891, + "node_id": "PVTF_lADOABCD9876543210", + "name": "Status", + "data_type": "single_select", + "project_url": "https://api.github.com/projects/67890", + "options": [ + { + "id": "option_4", + "name": "Todo", + "color": "GRAY", + "description": "Items to be worked on" + }, + { + "id": "option_5", + "name": "In Progress", + "color": "BLUE", + "description": "Items currently being worked on" + }, + { + "id": "option_6", + "name": "Done", + "color": "GREEN", + "description": "Completed items" + } + ], + "created_at": "2022-04-29T10:30:00Z", + "updated_at": "2022-04-29T10:30:00Z" + }, + { + "id": 24680, + "node_id": "PVTF_lADOABCD2468024680", + "name": "Team notes", + "data_type": "text", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-05-15T08:00:00Z", + "updated_at": "2022-05-15T08:00:00Z" + }, + { + "id": 13579, + "node_id": "PVTF_lADOABCD1357913579", + "name": "Story points", + "data_type": "number", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-01T14:30:00Z", + "updated_at": "2022-06-01T14:30:00Z" + }, + { + "id": 98765, + "node_id": "PVTF_lADOABCD9876598765", + "name": "Due date", + "data_type": "date", + "project_url": "https://api.github.com/projects/67890", + "created_at": "2022-06-10T09:15:00Z", + "updated_at": "2022-06-10T09:15:00Z" + }, + { + "id": 11223, + "node_id": "PVTF_lADOABCD1122311223", + "name": "Sprint", + "data_type": "iteration", + "project_url": "https://api.github.com/projects/67890", + "configuration": { + "duration": 14, + "start_day": 1, + "iterations": [ + { + "id": "iter_1", + "title": "Sprint 1", + "start_date": "2022-07-01", + "duration": 14 + }, + { + "id": "iter_2", + "title": "Sprint 2", + "start_date": "2022-07-15", + "duration": 14 + } + ] }, - { - "id": "option_3", - "name": "High", - "color": "RED", - "description": "High priority items" - } - ], - "created_at": "2022-04-28T12:00:00Z", - "updated_at": "2022-04-28T12:00:00Z" - }, + "created_at": "2022-06-20T16:45:00Z", + "updated_at": "2022-06-20T16:45:00Z" + } + ], "schema": { "type": "array", "items": { diff --git a/src/rest/data/ghes-3.16-2022-11-28/schema.json b/src/rest/data/ghes-3.16-2022-11-28/schema.json index ab179faedfe0..f73aed8d5c44 100644 --- a/src/rest/data/ghes-3.16-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.16-2022-11-28/schema.json @@ -391719,6 +391719,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -391729,6 +391734,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -391958,6 +391968,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -391968,6 +391983,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -392082,6 +392102,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", diff --git a/src/rest/data/ghes-3.17-2022-11-28/schema.json b/src/rest/data/ghes-3.17-2022-11-28/schema.json index 2f841090a47d..eafdb7fe43d7 100644 --- a/src/rest/data/ghes-3.17-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.17-2022-11-28/schema.json @@ -394036,6 +394036,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -394046,6 +394051,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -394275,6 +394285,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -394285,6 +394300,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -394399,6 +394419,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", diff --git a/src/rest/data/ghes-3.18-2022-11-28/schema.json b/src/rest/data/ghes-3.18-2022-11-28/schema.json index 804e5b0e7e44..4afcf3a02d6c 100644 --- a/src/rest/data/ghes-3.18-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.18-2022-11-28/schema.json @@ -396428,6 +396428,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -396438,6 +396443,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -396552,6 +396562,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", @@ -396597,6 +396614,7 @@ "registry_type": "maven_repository", "url": "https://maven.pkg.github.com/organization/", "username": "monalisa", + "replaces_base": true, "encrypted_value": "c2VjcmV0", "key_id": "012345678912345678", "visibility": "private" @@ -396654,6 +396672,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": "string", @@ -396661,6 +396684,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry. `selected` means only the repositories specified by `selected_repository_ids` can access the private registry.", "enum": [ @@ -396763,6 +396791,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": "string", @@ -396770,6 +396803,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry. `selected` means only the repositories specified by `selected_repository_ids` can access the private registry.", "enum": [ @@ -397003,6 +397041,11 @@ ], "type": "string" }, + "url": { + "description": "The URL of the private registry.", + "type": "string", + "format": "uri" + }, "username": { "description": "The username to use when authenticating with the private registry.", "type": [ @@ -397013,6 +397056,11 @@ "monalisa" ] }, + "replaces_base": { + "description": "Whether this private registry replaces the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When `true`, Dependabot will only use this registry and will not fall back to the public registry. When `false` (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.", + "type": "boolean", + "default": false + }, "visibility": { "description": "Which type of organization repositories have access to the private registry.", "enum": [ @@ -397127,6 +397175,13 @@ "in": "body", "description": "

The username to use when authenticating with the private registry. This field should be omitted if the private registry does not require a username for authentication.

" }, + { + "type": "boolean", + "name": "replaces_base", + "in": "body", + "description": "

Whether this private registry should replace the base registry (e.g., npmjs.org for npm, rubygems.org for rubygems). When set to true, Dependabot will only use this registry and will not fall back to the public registry. When set to false (default), Dependabot will use this registry for scoped packages but may fall back to the public registry for other packages.

", + "default": false + }, { "type": "string", "name": "encrypted_value", diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json index c1484df86555..9295543d0d93 100644 --- a/src/rest/lib/config.json +++ b/src/rest/lib/config.json @@ -47,5 +47,5 @@ ] } }, - "sha": "e8e7ce91c9f7b8171f2cb856842e1d1f930a0837" + "sha": "ebc1fecbcfb4449cc61d45e2608ac765b5b144a0" } \ No newline at end of file diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json index 37a030df88bd..5f5418275b3d 100644 --- a/src/webhooks/lib/config.json +++ b/src/webhooks/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "e8e7ce91c9f7b8171f2cb856842e1d1f930a0837" + "sha": "ebc1fecbcfb4449cc61d45e2608ac765b5b144a0" } \ No newline at end of file From c3460ef54b67f6464affb0208a05be2617fc5c5e Mon Sep 17 00:00:00 2001 From: Sam Browning <106113886+sabrowning1@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:34:42 -0400 Subject: [PATCH 3/3] [Universe fast-follow] Add tutorial on creating AI managers (#58281) Co-authored-by: Laura Coursen --- .../edit-agent-profile-ruleset.png | Bin 0 -> 114250 bytes .../prepare-for-custom-agents.md | 4 +- .../reference/agentic-audit-log-events.md | 2 +- .../establish-ai-managers.md | 74 ++++++++++++++++++ .../tutorials/roll-out-at-scale/index.md | 1 + .../start-creating-custom-role.md | 4 + .../create-custom-roles.md | 5 +- 7 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 assets/images/help/enterprises/edit-agent-profile-ruleset.png create mode 100644 content/copilot/tutorials/roll-out-at-scale/establish-ai-managers.md create mode 100644 data/reusables/enterprise-accounts/start-creating-custom-role.md diff --git a/assets/images/help/enterprises/edit-agent-profile-ruleset.png b/assets/images/help/enterprises/edit-agent-profile-ruleset.png new file mode 100644 index 0000000000000000000000000000000000000000..36094768aa3a68ae216df94b020417d16ad8c551 GIT binary patch literal 114250 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%0D@pwQ@QF;|#^K1q0Pn$8+WLd!uYmNcil= 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 [!NOTE] +> Enterprise custom roles, enterprise teams, and the AI Controls view are in public preview and subject to change. + +## Overview + +You can use custom roles and enterprise teams to delegate AI administration permissions without granting enterprise ownership. AI managers can view and manage **nearly all AI features in your enterprise's AI Controls**, including agentic AI features, {% data variables.product.prodname_copilot_short %} features, and Model Context Protocol (MCP) features. + +Unless you grant additional permissions beyond those listed in this article, AI managers **cannot access** the following: +* Access management settings for {% data variables.product.prodname_copilot_short %} +* Settings in the "Billing" section of the {% data variables.product.prodname_copilot_short %} page +* Settings in the "Metrics" section of the {% data variables.product.prodname_copilot_short %} page + +## 1. Create a custom role for AI management + +To get started, you need to create a custom role with the necessary permissions for AI management. + +{% data reusables.enterprise-accounts.start-creating-custom-role %} +1. To clarify the purpose of the role, give it a name and description. +1. In the "Add permissions" section, use the search bar to find and select the following permissions: + + * **Manage enterprise AI controls**: Allows this role to view and manage all settings in the "AI Controls" tab for your enterprise + * **Read enterprise audit logs**: Allows this role to view **all** audit log events for your enterprise, helping your AI managers monitor agentic activity + +1. Click **Create role**. + +## 2. Create an enterprise team for AI management + +Now that you have created your AI manager role, you need to set up an enterprise team and add your future AI managers as members. + +1. In the sidebar of the "People" tab, click {% octicon "people" aria-hidden="true" aria-label="people" %} **Enterprise teams**. +1. Click **Create Enterprise team**. +1. Give your team a name, then click **Create Enterprise team**. +1. On the team page, select the **Add members** dropdown menu, then click the members of your enterprise you want to grant AI management permissions to. +1. To confirm your selections, click **Add**. + +## 3. Assign the AI management role to your team + +With both your AI management role and team created, you can now assign the role to your team, granting management permissions to your team members. + +1. In the sidebar of the "People" tab, select {% octicon "globe" aria-hidden="true" aria-label="globe" %} **Enterprise roles**, then click **Role assignments**. +1. On the "Enterprise role assignments" page, click **Assign role**. +1. In the "Assign role to" section, select the **Select user or team** dropdown menu, then click your AI management team. +1. In the "Select role" section, click your AI management role. +1. At the bottom of the page, click **Assign role**. + +## 4. Grant your AI managers bypass permissions for {% data variables.copilot.agent_profiles %} + +If you have created a ruleset targeting {% data variables.copilot.agent_profiles %} in your enterprise, you can grant bypass access to allow your AI managers to create and edit those profiles. This access also lets your AI managers merge pull requests modifying those files, allowing your developers to propose {% data variables.copilot.custom_agents_short %} while maintaining your enterprise's security standards. + +{% data reusables.enterprise-accounts.ai-controls-tab %} +1. In the "Only enterprise admins can edit agent files" field, click **Edit ruleset** {% octicon "chevron-right" aria-hidden="true" aria-label="chevron-right" %}. + + ![Screenshot of the "Installed agents" section of the agent settings page. A button labeled "Edit ruleset" is outlined in dark orange.](/assets/images/help/enterprises/edit-agent-profile-ruleset.png) + +1. In the "Bypass list" section, select the {% octicon "plus" aria-hidden="true" aria-label="plus" %} **Add bypass** dropdown menu, then click your AI management team. +1. At the bottom of the page, click **Save changes**. + +## Next steps + +Now that you have established AI managers for your enterprise, help them customize and manage your enterprise's AI experience by sharing the following resources: +* [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies) +* [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents) diff --git a/content/copilot/tutorials/roll-out-at-scale/index.md b/content/copilot/tutorials/roll-out-at-scale/index.md index 160d098c5393..61224ece51e9 100644 --- a/content/copilot/tutorials/roll-out-at-scale/index.md +++ b/content/copilot/tutorials/roll-out-at-scale/index.md @@ -8,6 +8,7 @@ topics: - Copilot children: - /assign-licenses + - /establish-ai-managers - /enable-developers - /drive-downstream-impact - /measure-success diff --git a/data/reusables/enterprise-accounts/start-creating-custom-role.md b/data/reusables/enterprise-accounts/start-creating-custom-role.md new file mode 100644 index 000000000000..a3ecc69214bd --- /dev/null +++ b/data/reusables/enterprise-accounts/start-creating-custom-role.md @@ -0,0 +1,4 @@ +{% data reusables.enterprise-accounts.access-enterprise %} +{% data reusables.enterprise-accounts.people-tab %} +1. In the left sidebar, click **{% octicon "globe" aria-hidden="true" aria-label="globe" %} Enterprise roles**, then click **Role management**. +1. Click **Create custom role**. diff --git a/data/reusables/enterprise-onboarding/create-custom-roles.md b/data/reusables/enterprise-onboarding/create-custom-roles.md index 52fcdde1a8c4..8ee9278832f2 100644 --- a/data/reusables/enterprise-onboarding/create-custom-roles.md +++ b/data/reusables/enterprise-onboarding/create-custom-roles.md @@ -10,10 +10,7 @@ Custom roles are sets of permissions for settings and resources that you can ass Enterprise custom roles grant access to a subset of enterprise settings, such as viewing audit logs and creating organizations. {% data variables.product.github %} plans to expand the list of available permissions over time. -{% data reusables.enterprise-accounts.access-enterprise %} -{% data reusables.enterprise-accounts.people-tab %} -1. In the left sidebar, click **{% octicon "globe" aria-hidden="true" aria-label="globe" %} Enterprise roles**, then click **Role management**. -1. Click **Create custom role**. +{% data reusables.enterprise-accounts.start-creating-custom-role %} 1. Enter the details, then click **Create role**. {% endif %}