Budgets
Use the REST API to get budget information.
Important
The request body schema below is missing a required field. When budget_scope is user, you must also include a user field set to the GitHub username the budget applies to. If you omit this field, the API returns HTTP 400: Missing required fields: budget_entity_name. For user-scoped budgets, budget_entity_name can be an empty string.
The following example creates a user-scoped budget that limits a single user's monthly Copilot AI credits to $30 USD:
{
"budget_amount": 30,
"prevent_further_usage": true,
"budget_scope": "user",
"budget_entity_name": "",
"budget_type": "BundlePricing",
"budget_product_sku": "ai_credits",
"budget_alerting": {
"will_alert": false,
"alert_recipients": []
},
"user": "USERNAME"
}
Get all budgets
Gets all budgets for an enterprise. The authenticated user must be an enterprise admin or billing manager. Each page returns up to 10 budgets.
Fine-grained access tokens for "Get all budgets"
This endpoint does not work with GitHub App user access tokens, GitHub App installation access tokens, or fine-grained personal access tokens.
Parameters for "Get all budgets"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
enterprise string RequiredThe slug version of the enterprise name. |
| Name, Type, Description |
|---|
page integer The page number of results to fetch. Default: |
per_page integer The number of results per page (max 10). Default: |
scope string Filter budgets by scope type. Can be one of: |
user string Filter consumed amount details for budgets by the specified user login. |
HTTP response status codes for "Get all budgets"
| Status code | Description |
|---|---|
200 | Response when getting all budgets |
403 | Forbidden |
404 | Resource not found |
Code samples for "Get all budgets"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request examples
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/enterprises/ENTERPRISE/settings/billing/budgetsResponse when getting all budgets
Status: 200{
"budgets": [
{
"id": "2066deda-923f-43f9-88d2-62395a28c0cdd",
"budget_type": "ProductPricing",
"budget_product_skus": [
"actions"
],
"budget_scope": "enterprise",
"budget_amount": 1000,
"prevent_further_usage": true,
"budget_alerting": {
"will_alert": true,
"alert_recipients": [
"enterprise-admin",
"billing-manager"
]
}
},
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"budget_type": "SkuPricing",
"budget_product_skus": [
"actions_linux"
],
"budget_scope": "organization",
"budget_amount": 500,
"prevent_further_usage": false,
"budget_alerting": {
"will_alert": true,
"alert_recipients": [
"org-owner"
]
}
},
{
"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"budget_type": "ProductPricing",
"budget_product_skus": [
"packages"
],
"budget_scope": "cost_center",
"budget_amount": 250,
"prevent_further_usage": true,
"budget_alerting": {
"will_alert": false,
"alert_recipients": []
}
}
],
"has_next_page": false,
"total_count": 3
}Create a budget
Creates a new budget for an enterprise. The authenticated user must be an enterprise admin, organization admin, or billing manager of the enterprise.
Fine-grained access tokens for "Create a budget"
This endpoint does not work with GitHub App user access tokens, GitHub App installation access tokens, or fine-grained personal access tokens.
Parameters for "Create a budget"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
enterprise string RequiredThe slug version of the enterprise name. |
| Name, Type, Description | |||
|---|---|---|---|
budget_amount integer RequiredThe budget amount in whole dollars. For license-based products, this represents the number of licenses. | |||
prevent_further_usage boolean RequiredWhether to prevent additional spending once the budget is exceeded. For | |||
budget_alerting object Required | |||
Properties of |
| Name, Type, Description |
|---|
will_alert boolean RequiredWhether alerts are enabled for this budget |
alert_recipients array of strings RequiredArray of user login names who will receive alerts |
budget_scope string RequiredThe scope of the budget. user and multi_user_customer scopes are only supported when budget_product_sku is ai_credits or premium_requests.
Can be one of: enterprise, organization, repository, cost_center, multi_user_customer, user
budget_entity_name string The name of the entity to apply the budget to
Default: ""
budget_type string RequiredThe type of pricing for the budget
budget_product_sku string A single product or SKU that will be covered in the budget
HTTP response status codes for "Create a budget"
| Status code | Description |
|---|---|
200 | Budget created successfully |
400 | Bad Request |
401 | Requires authentication |
403 | Forbidden |
404 | Feature not enabled |
422 | Validation failed, or the endpoint has been spammed. |
500 | Internal server error |
Code samples for "Create a budget"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/enterprises/ENTERPRISE/settings/billing/budgets \
-d '{"budget_amount":200,"prevent_further_usage":true,"budget_scope":"enterprise","budget_entity_name":"","budget_type":"ProductPricing","budget_product_sku":"actions","budget_alerting":{"will_alert":false,"alert_recipients":[]}}'Budget created successfully
Status: 200{
"message": "Budget successfully created.",
"budget": {
"id": "f5236c62-157f-4d8f-a79e-ffb91058ee97",
"budget_type": "ProductPricing",
"budget_product_sku": "actions",
"budget_scope": "organization",
"budget_entity_name": "example-organization",
"budget_amount": 100,
"prevent_further_usage": true,
"budget_alerting": {
"will_alert": false,
"alert_recipients": []
}
}
}Get a budget by ID
Gets a budget by ID. The authenticated user must be an enterprise admin or billing manager.
Fine-grained access tokens for "Get a budget by ID"
This endpoint does not work with GitHub App user access tokens, GitHub App installation access tokens, or fine-grained personal access tokens.
Parameters for "Get a budget by ID"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
enterprise string RequiredThe slug version of the enterprise name. |
budget_id string RequiredThe ID corresponding to the budget. |
HTTP response status codes for "Get a budget by ID"
| Status code | Description |
|---|---|
200 | Response when updating a budget |
400 | Bad Request |
403 | Forbidden |
404 | Resource not found |
500 | Internal Error |
503 | Service unavailable |
Code samples for "Get a budget by ID"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/enterprises/ENTERPRISE/settings/billing/budgets/BUDGET_IDResponse when updating a budget
Status: 200{
"id": "2066deda-923f-43f9-88d2-62395a28c0cdd",
"budget_type": "ProductPricing",
"budget_product_sku": "actions_linux",
"budget_scope": "repository",
"budget_entity_name": "example-repo-name",
"budget_amount": 0,
"prevent_further_usage": true,
"budget_alerting": {
"will_alert": true,
"alert_recipients": [
"mona",
"lisa"
]
}
}Update a budget
Updates an existing budget for an enterprise. The authenticated user must be an enterprise admin, organization admin, or billing manager of the enterprise.
Fine-grained access tokens for "Update a budget"
This endpoint does not work with GitHub App user access tokens, GitHub App installation access tokens, or fine-grained personal access tokens.
Parameters for "Update a budget"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
enterprise string RequiredThe slug version of the enterprise name |
budget_id string RequiredThe unique identifier of the budget |
| Name, Type, Description | |||
|---|---|---|---|
budget_amount integer The budget amount in whole dollars. For license-based products, this represents the number of licenses. | |||
prevent_further_usage boolean Whether to prevent additional spending once the budget is exceeded. For budgets with | |||
budget_alerting object | |||
Properties of |
| Name, Type, Description |
|---|
will_alert boolean Whether alerts are enabled for this budget |
alert_recipients array of strings Array of user login names who will receive alerts |
budget_scope string The scope of the budget
Can be one of: enterprise, organization, repository, cost_center, multi_user_customer, user
budget_entity_name string The name of the entity to apply the budget to
budget_type string The type of pricing for the budget
budget_product_sku string A single product or SKU that will be covered in the budget
HTTP response status codes for "Update a budget"
| Status code | Description |
|---|---|
200 | Budget updated successfully |
400 | Bad Request |
401 | Requires authentication |
403 | Forbidden |
404 | Budget not found or feature not enabled |
422 | Validation failed, or the endpoint has been spammed. |
500 | Internal server error |
503 | Service unavailable |
Code samples for "Update a budget"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/enterprises/ENTERPRISE/settings/billing/budgets/BUDGET_ID \
-d '{"prevent_further_usage":false,"budget_amount":10,"budget_alerting":{"will_alert":false,"alert_recipients":[]}}'Budget updated successfully
Status: 200{
"message": "Budget successfully updated.",
"budget": {
"id": "2066deda-923f-43f9-88d2-62395a28c0cdd",
"budget_type": "ProductPricing",
"budget_product_sku": "actions_linux",
"budget_scope": "repository",
"budget_entity_name": "org-name/example-repo-name",
"budget_amount": 10,
"prevent_further_usage": true,
"budget_alerting": {
"will_alert": true,
"alert_recipients": [
"mona",
"lisa"
]
}
}
}Delete a budget
Deletes a budget by ID. The authenticated user must be an enterprise admin.
Fine-grained access tokens for "Delete a budget"
This endpoint does not work with GitHub App user access tokens, GitHub App installation access tokens, or fine-grained personal access tokens.
Parameters for "Delete a budget"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
enterprise string RequiredThe slug version of the enterprise name. |
budget_id string RequiredThe ID corresponding to the budget. |
HTTP response status codes for "Delete a budget"
| Status code | Description |
|---|---|
200 | Response when deleting a budget |
400 | Bad Request |
403 | Forbidden |
404 | Resource not found |
500 | Internal Error |
503 | Service unavailable |
Code samples for "Delete a budget"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/enterprises/ENTERPRISE/settings/billing/budgets/BUDGET_IDResponse when deleting a budget
Status: 200{
"message": "Budget successfully deleted.",
"budget_id": "2c1feb79-3947-4dc8-a16e-80cbd732cc0b"
}