Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/changelog-agent.yml
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ jobs:
- name: Generate changelog draft via Copilot
if: steps.check_parent.outputs.has_parent == 'true' && steps.check_existing.outputs.exists == 'false'
id: generate_draft
uses: actions/ai-inference@17ff458cb182449bbb2e43701fcd98f6af8f6570 # v2.1.0
uses: actions/ai-inference@2c43c91ae16266ca159d311430343c67a5ffa222 # v3
with:
provider: copilot
# No model is pinned: actions/ai-inference forwards --model to the
Expand Down
5 changes: 5 additions & 0 deletions content/billing/reference/billing-roles.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ To add a billing manager, see:
* [AUTOTITLE](/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization#inviting-a-billing-manager)
* [AUTOTITLE](/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/inviting-people-to-manage-your-enterprise)

{% ifversion enterprise-billing-github-app %}

Enterprise owners can also grant a {% data variables.product.prodname_github_app %} the enterprise billing permission, so that an app can access enterprise billing data through the REST API without using a token that belongs to an individual. For more information, see [AUTOTITLE](/billing/tutorials/automate-usage-reporting).
{% endif %}

## Organization owners

You have full administrative access to your organization. You can:
Expand Down
28 changes: 26 additions & 2 deletions content/billing/tutorials/automate-usage-reporting.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,34 @@ Before you begin this tutorial, make sure that:
* Enterprise-level reports: enterprise administrator or billing manager

* You’re familiar with making authenticated requests to the REST API. For an introduction, see [AUTOTITLE](/rest/using-the-rest-api).
* You authenticate using a {% data variables.product.pat_v1 %}. The billing usage endpoints do not support {% data variables.product.pat_v2_plural %}.
* You authenticate using a {% data variables.product.pat_v1 %}. The billing usage endpoints do not support {% data variables.product.pat_v2_plural %}.{% ifversion enterprise-billing-github-app %} For enterprise-level reporting, you can authenticate with a {% data variables.product.prodname_github_app %} instead. See [Authenticating with a {% data variables.product.prodname_github_app %}](#authenticating-with-a-github-app).{% endif %}

Depending on your reporting needs, you may also want access to an internal system (such as a spreadsheet, database, or BI tool) where you can store and analyze the usage data retrieved from the API.

{% ifversion enterprise-billing-github-app %}

## Authenticating with a {% data variables.product.prodname_github_app %}

For enterprise-level reporting, you can authenticate with a {% data variables.product.prodname_github_app %} instead of a {% data variables.product.pat_generic %}. Your automation then does not depend on a token that belongs to an individual enterprise owner or billing manager, so your reports keep running when someone changes role or leaves the enterprise.

An enterprise owner can grant an app the enterprise billing permission at one of two levels of access:

* **Read**: The app can retrieve usage reports, budgets, and cost centers. This is the access the reporting in this tutorial requires.
* **Read and write**: The app can create, update, and delete budgets and cost centers, and add or remove resources from cost centers.

To report on usage with an app:

1. Register a {% data variables.product.prodname_github_app %} that requests the enterprise billing permission. See [AUTOTITLE](/apps/creating-github-apps/registering-a-github-app/registering-a-github-app).
1. Ask an enterprise owner to install the app on your enterprise. See [AUTOTITLE](/apps/using-github-apps/installing-a-github-app-on-your-enterprise).
1. Generate an installation access token for the enterprise installation. See [AUTOTITLE](/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app).
1. Send the installation access token in the `Authorization` header of your requests, in place of a {% data variables.product.pat_generic %}.

An installation access token expires after one hour, so your automation must generate a new token each time it runs or whenever the current token expires.

For the endpoints an app can call with each permission, see [AUTOTITLE](/rest/authentication/permissions-required-for-github-apps).

{% endif %}

## Step 1: Decide what level to report on

Decide which account level you want to report on. This determines **which REST API endpoint you’ll call** and what your report will include.
Expand Down Expand Up @@ -76,7 +100,7 @@ curl -L \
https://api.github.com/enterprises/ENTERPRISE/settings/billing/usage/summary
```

Replace `ENTERPRISE` with the enterprise slug and set the `GITHUB_TOKEN` environment variable to a {% data variables.product.pat_generic %} with the required billing permissions.
Replace `ENTERPRISE` with the enterprise slug and set the `GITHUB_TOKEN` environment variable to a {% data variables.product.pat_generic %} with the required billing permissions.{% ifversion enterprise-billing-github-app %} Alternatively, set `GITHUB_TOKEN` to an installation access token from a {% data variables.product.prodname_github_app %} with the enterprise billing permission.{% endif %}

**Example using the {% data variables.product.prodname_cli %}**

Expand Down
2 changes: 1 addition & 1 deletion content/copilot/reference/ai-models/supported-models.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ This table lists the AI models available in {% data variables.product.prodname_c

## Supported AI models in {% data variables.copilot.copilot_auto_model_selection_short_cap_a %}

This table lists the supported AI models for {% data variables.copilot.copilot_auto_model_selection_short_cap_a %}. Available models may be limited by model policies. See [AUTOTITLE](/copilot/concepts/models/auto-model-selection).
This table lists the supported AI models for {% data variables.copilot.copilot_auto_model_selection_short_cap_a %}. Available models may be limited by model policies. For example, as the long term support model, GPT-5.3-Codex will be used in the event no other models are available. See[AUTOTITLE](/copilot/concepts/models/fallback-and-lts-models) and [AUTOTITLE](/copilot/concepts/models/auto-model-selection).

{% rowheaders %}

Expand Down
7 changes: 7 additions & 0 deletions data/features/enterprise-billing-github-app.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Reference: #releases/issues/10425
# Enterprise owners can grant a GitHub App the enterprise billing fine-grained permission
# (Read, or Read and write) so that an app installation access token can call the enterprise
# billing REST API routes.
versions:
ghec: '*'
ghes: '>=3.23'
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Enterprise-installed {% data variables.product.prodname_github_apps %} cannot ca
* [Manage users in your enterprise](/graphql/reference/enterprise-admin#object-enterprise)
* Create and manage {% data variables.product.prodname_github_app %} installations in your organizations
* Manage enterprise custom repository properties
{%- ifversion enterprise-billing-github-app %}
* Manage enterprise billing, including budgets, cost centers, and usage reports. For more information, see [AUTOTITLE](/rest/billing).
{%- endif %}
* Call the enterprise SCIM APIs

Check the [changelog](https://github.blog/changelog/) for updates on new APIs and permissions for {% data variables.product.prodname_github_apps %}.
21 changes: 20 additions & 1 deletion data/tables/copilot/auto-model-selection.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
- name: GPT-5.3-Codex
cloud_agent: true
chat: true
cli: true
cli: false
app: true

- name: GPT-5.4
Expand Down Expand Up @@ -74,6 +74,12 @@
cli: true
app: true

- name: Claude Opus 4.8
cloud_agent: false
chat: true
cli: true
app: false

- name: Claude Opus 5
cloud_agent: false
chat: true
Expand All @@ -92,6 +98,19 @@
cli: true
app: false

# Google
- name: Gemini 3.6 Flash
cloud_agent: false
chat: true
cli: true
app: false

- name: Gemini 3.7 Flash
cloud_agent: false
chat: true
cli: true
app: false

# Microsoft
- name: MAI-Code-1.1-Flash
cloud_agent: true
Expand Down
4 changes: 4 additions & 0 deletions src/graphql/data/fpt/category-map.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@
"startrepositorymigration": "migrations",
"addassigneestoassignable": "issues",
"addblockedby": "issues",
"addcloseissuereferences": "issues",
"addcomment": "issues",
"addlabelstolabelable": "issues",
"addsubissue": "issues",
Expand All @@ -154,6 +155,7 @@
"rejectpendingissuesuggestions": "issues",
"removeassigneesfromassignable": "issues",
"removeblockedby": "issues",
"removecloseissuereferences": "issues",
"removelabelsfromlabelable": "issues",
"removesubissue": "issues",
"reopenissue": "issues",
Expand Down Expand Up @@ -1572,6 +1574,7 @@
"startrepositorymigrationinput": "migrations",
"addassigneestoassignableinput": "issues",
"addblockedbyinput": "issues",
"addcloseissuereferencesinput": "issues",
"addcommentinput": "issues",
"addlabelstolabelableinput": "issues",
"addsubissueinput": "issues",
Expand Down Expand Up @@ -1615,6 +1618,7 @@
"rejectpendingissuesuggestionsinput": "issues",
"removeassigneesfromassignableinput": "issues",
"removeblockedbyinput": "issues",
"removecloseissuereferencesinput": "issues",
"removelabelsfromlabelableinput": "issues",
"removesubissueinput": "issues",
"reopenissueinput": "issues",
Expand Down
31 changes: 31 additions & 0 deletions src/graphql/data/fpt/changelog.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,35 @@
[
{
"schemaChanges": [
{
"title": "The GraphQL schema includes these changes:",
"changes": [
"<p>Type <code>AddCloseIssueReferencesInput</code> was added</p>",
"<p>Input field <code>clientMutationId</code> of type <code>String</code> was added to input object type <code>AddCloseIssueReferencesInput</code></p>",
"<p>Input field <code>issueId</code> of type <code>ID!</code> was added to input object type <code>AddCloseIssueReferencesInput</code></p>",
"<p>Input field <code>pullRequestIds</code> of type '[ID!]!<code>was added to input object type</code>AddCloseIssueReferencesInput'</p>",
"<p>Type <code>AddCloseIssueReferencesPayload</code> was added</p>",
"<p>Field <code>clientMutationId</code> was added to object type <code>AddCloseIssueReferencesPayload</code></p>",
"<p>Field <code>issue</code> was added to object type <code>AddCloseIssueReferencesPayload</code></p>",
"<p>Type <code>RemoveCloseIssueReferencesInput</code> was added</p>",
"<p>Input field <code>clientMutationId</code> of type <code>String</code> was added to input object type <code>RemoveCloseIssueReferencesInput</code></p>",
"<p>Input field <code>issueId</code> of type <code>ID!</code> was added to input object type <code>RemoveCloseIssueReferencesInput</code></p>",
"<p>Input field <code>pullRequestIds</code> of type '[ID!]!<code>was added to input object type</code>RemoveCloseIssueReferencesInput'</p>",
"<p>Type <code>RemoveCloseIssueReferencesPayload</code> was added</p>",
"<p>Field <code>clientMutationId</code> was added to object type <code>RemoveCloseIssueReferencesPayload</code></p>",
"<p>Field <code>issue</code> was added to object type <code>RemoveCloseIssueReferencesPayload</code></p>",
"<p>Argument 'userLogins: [String!]<code>added to field</code>Enterprise.enterpriseTeams'</p>",
"<p>Field <code>addCloseIssueReferences</code> was added to object type <code>Mutation</code></p>",
"<p>Argument <code>input: AddCloseIssueReferencesInput!</code> added to field <code>Mutation.addCloseIssueReferences</code></p>",
"<p>Field <code>removeCloseIssueReferences</code> was added to object type <code>Mutation</code></p>",
"<p>Argument <code>input: RemoveCloseIssueReferencesInput!</code> added to field <code>Mutation.removeCloseIssueReferences</code></p>"
]
}
],
"previewChanges": [],
"upcomingChanges": [],
"date": "2026-08-26"
},
{
"schemaChanges": [
{
Expand Down
9 changes: 9 additions & 0 deletions src/graphql/data/fpt/schema-enterprise-admin.json
Original file line number Diff line number Diff line change
Expand Up @@ -1957,6 +1957,15 @@
"id": "string",
"href": "/graphql/reference/other#scalar-string"
}
},
{
"name": "userLogins",
"description": "<p>User logins to filter by. A maximum of 3 logins can be passed.</p>",
"type": {
"name": "[String!]",
"id": "string",
"href": "/graphql/reference/other#scalar-string"
}
}
]
},
Expand Down
128 changes: 128 additions & 0 deletions src/graphql/data/fpt/schema-issues.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,38 @@
],
"category": "issues"
},
{
"name": "addCloseIssueReferences",
"id": "addcloseissuereferences",
"href": "/graphql/reference/issues#mutation-addcloseissuereferences",
"description": "<p>Adds one or more pull requests as manually linked closing references on an\nissue. The target must be an issue, not a pull request.</p>",
"isDeprecated": false,
"inputFields": [
{
"name": "input",
"type": "AddCloseIssueReferencesInput!",
"id": "addcloseissuereferencesinput",
"href": "/graphql/reference/issues#input-object-addcloseissuereferencesinput"
}
],
"returnFields": [
{
"name": "clientMutationId",
"type": "String",
"id": "string",
"href": "/graphql/reference/other#scalar-string",
"description": "<p>A unique identifier for the client performing the mutation.</p>"
},
{
"name": "issue",
"type": "Issue",
"id": "issue",
"href": "/graphql/reference/issues#object-issue",
"description": "<p>The issue the closing references were added to.</p>"
}
],
"category": "issues"
},
{
"name": "addComment",
"id": "addcomment",
Expand Down Expand Up @@ -945,6 +977,38 @@
],
"category": "issues"
},
{
"name": "removeCloseIssueReferences",
"id": "removecloseissuereferences",
"href": "/graphql/reference/issues#mutation-removecloseissuereferences",
"description": "<p>Removes one or more manually linked pull requests from an issue. Auto-detected\nclosing references from pull request body keywords are not removed; edit the\npull request body instead.</p>",
"isDeprecated": false,
"inputFields": [
{
"name": "input",
"type": "RemoveCloseIssueReferencesInput!",
"id": "removecloseissuereferencesinput",
"href": "/graphql/reference/issues#input-object-removecloseissuereferencesinput"
}
],
"returnFields": [
{
"name": "clientMutationId",
"type": "String",
"id": "string",
"href": "/graphql/reference/other#scalar-string",
"description": "<p>A unique identifier for the client performing the mutation.</p>"
},
{
"name": "issue",
"type": "Issue",
"id": "issue",
"href": "/graphql/reference/issues#object-issue",
"description": "<p>The issue the closing references were removed from.</p>"
}
],
"category": "issues"
},
{
"name": "removeLabelsFromLabelable",
"id": "removelabelsfromlabelable",
Expand Down Expand Up @@ -11242,6 +11306,38 @@
],
"category": "issues"
},
{
"name": "AddCloseIssueReferencesInput",
"id": "addcloseissuereferencesinput",
"href": "/graphql/reference/issues#input-object-addcloseissuereferencesinput",
"description": "<p>Autogenerated input type of AddCloseIssueReferences.</p>",
"inputFields": [
{
"name": "clientMutationId",
"description": "<p>A unique identifier for the client performing the mutation.</p>",
"type": "String",
"id": "string",
"href": "/graphql/reference/other#scalar-string"
},
{
"name": "issueId",
"description": "<p>ID of the issue to add closing references to.</p>",
"type": "ID!",
"id": "id",
"href": "/graphql/reference/other#scalar-id",
"isDeprecated": false
},
{
"name": "pullRequestIds",
"description": "<p>IDs of the pull requests to link as closing references. Limit: 10.</p>",
"type": "[ID!]!",
"id": "id",
"href": "/graphql/reference/other#scalar-id",
"isDeprecated": false
}
],
"category": "issues"
},
{
"name": "AddCommentInput",
"id": "addcommentinput",
Expand Down Expand Up @@ -12904,6 +13000,38 @@
],
"category": "issues"
},
{
"name": "RemoveCloseIssueReferencesInput",
"id": "removecloseissuereferencesinput",
"href": "/graphql/reference/issues#input-object-removecloseissuereferencesinput",
"description": "<p>Autogenerated input type of RemoveCloseIssueReferences.</p>",
"inputFields": [
{
"name": "clientMutationId",
"description": "<p>A unique identifier for the client performing the mutation.</p>",
"type": "String",
"id": "string",
"href": "/graphql/reference/other#scalar-string"
},
{
"name": "issueId",
"description": "<p>ID of the issue to remove closing references from.</p>",
"type": "ID!",
"id": "id",
"href": "/graphql/reference/other#scalar-id",
"isDeprecated": false
},
{
"name": "pullRequestIds",
"description": "<p>IDs of manually linked pull requests to remove. Auto-detected closing references are left unchanged. Limit: 10.</p>",
"type": "[ID!]!",
"id": "id",
"href": "/graphql/reference/other#scalar-id",
"isDeprecated": false
}
],
"category": "issues"
},
{
"name": "RemoveLabelsFromLabelableInput",
"id": "removelabelsfromlabelableinput",
Expand Down
Loading
Loading