← Beyond AI

GitHub Copilot · billing, explained with pictures

How GitHub Copilot cost centers actually work

With usage-based billing, every Copilot seat adds AI credits to one shared pool. One busy team can use up credits that other teams' seats paid for. Cost centers put a fence around each team. This guide shows what the fence does, what it does not do, and how to give a team more.

by Idan Shimon · July 2026, updated October 2026 · checked against GitHub's docs, changelog and REST API

The short version

  1. One AI credit is one cent. Seats add credits to a single enterprise pool.
  2. A cost center can fence a team to what its own seats include. That protects everyone else.
  3. The fence never adds credits. To give a team more: more seats, or paid overage with a budget.
  4. Overage is billed to your GitHub account by default. Azure is optional.
  5. If someone is locked out, check four switches, in order (section 6).

1The problem: one pool for everyone

Copilot is metered in AI credits. One credit is one US cent. Each Copilot Business seat includes 1,900 credits a month and each Copilot Enterprise seat includes 3,900. By default, all of those credits go into one pool for the whole enterprise. The pool refills at 00:00 UTC on the 1st of each month, and unused credits do not carry over. Code completions and next edit suggestions do not use credits; chat, the CLI, cloud agent and other agent features do.

Sharing is good when a few heavy users balance out many light users. It is bad when one team uses up what other teams' seats paid for, and then those teams are blocked before the month is over.

BEFORE: one shared poolTeam ATeam BTeam CTeam A uses most of the pool.Team C runs out before the month ends.AFTER: each team fenced to its own seatsTeam ATeam BTeam CTeam A stops at its fence.Team A can't eat Team C's share.
Open larger ↗ Left: everyone draws from one pool, and the busiest team takes most of it. Right: with cost center pools turned on, each team can only use what its own seats include.

2The fence: an AI credit pool on a cost center

A cost center is a group of users or enterprise teams, used for billing. When you turn on its AI credit pool, GitHub fences that group to the credits its own seats include. You do not type a number: GitHub adds up the seats for you.

10 Business seats × 1,900 credits= 19,000 credits5 Enterprise seats × 3,900 credits= 19,500 creditsFence for this cost center: 38,500 credits ($385) a monthGitHub adds this up for you. Add a seat: grows now. Remove one: next cycle.1 AI credit = $0.01Business seatsEnterprise seats
Open larger ↗ How GitHub sizes the fence, using the example from GitHub's own documentation. Mixed license types are fine. Adding a seat raises the fence right away; removing one lowers it at the start of the next billing cycle.

When the team reaches its fence, you choose what happens: block the team, or let it continue as paid overage (if your enterprise allows overage).

The most common misunderstandingA fence is a cap, not a reservation. It stops a team from taking more than its share. It does not give the team any extra credits. If the team needs more, see section 4.

One more consequence: the fence protects others only from the teams you fence. A team without a fence can still draw from the shared pool. If you want everyone protected, fence every heavy team, not just one.

3Four controls, two phases

Every billing month has two phases. First, users spend the included credits from the pool. When those run out, usage either stops or continues as metered overage at $0.01 per credit, if the "AI credit paid usage" policy is on. That policy is on by default; an admin has to turn it off to block all overage. Each control works in one or both phases:

Phase 1: included creditspaid for by your seatsPhase 2: metered overage$0.01 per credit, only if paid usage is onPer-user budgetalways stops the userCost center pool capstops the team at its fenceCost center budgetstops only if "stop usage" is onEnterprise budgetcan block everyone, see below
Open larger ↗ Where each control acts. Only the per-user budget covers both phases.
ControlWhat it limitsStops usage?
Per-user budget
universal, per cost center, or individual
One person's total use, from the pool and from overagealways
Cost center AI credit poolHow much of the shared pool a team can useblock or continue as overage
Cost center budgetA team's overage spend after its poolonly if "stop usage" is on
Organization or enterprise budgetOverage spend at that levelonly if "stop usage" is on

Two rules that catch people:

4How to give a team more

This is the question everyone actually asks: "Can Team A get more credits without taking them from everyone else?" Yes, in one of two ways:

Team A"We ran out. Can we get more?"DOOR 1Bring more seats+1Add or upgrade licenses in the team.The fence grows the same day.No new billing setup.DOOR 2Pay as you go past the fence$0.01 / creditTeam keeps working after itsincluded credits run out.Put a lid on it: a cost center budgetwith "stop usage" on.Your GitHub billdefault, no Azure neededTeam's own Azureoptional, for chargebackSecret door 3: just raise the cap?Nope. GitHub sizes the fence from seats.
Open larger ↗ Two doors, and one that does not exist. Overage goes to your normal GitHub bill unless you choose to route that cost center to its own Azure subscription.

Option 1, more seats. Add licensed users to the cost center, or upgrade Business seats to Enterprise. The fence grows immediately, because it is calculated from seats.

Option 2, metered overage. Turn on "AI credit paid usage", set the cost center's pool to continue as overage at the fence, and put a cost center budget with "stop usage" on, so the extra spend has a ceiling. The overage is billed through your normal GitHub billing. If your enterprise is billed through Azure, you can also attach the team's own Azure subscription to that cost center, so its overage is charged to that team. That is optional.

ExampleA team of 20 Enterprise seats has a fence of 78,000 credits ($780). The team wants up to $5,000 more each month. Keep the fence, allow overage, and set a $5,000 cost center budget with "stop usage" on. The team cannot draw more than its $780 of included credits, and its overage stops near $5,000. Treat budgets as a stop, not an exact to-the-cent ceiling: requests already running can finish.

5Setting it up

Everything below can be done in the billing UI (Enterprise → Settings → Billing and licensing → Cost centers). The REST API does the same thing and is easier once you manage more than a few teams.

  1. Create the cost center with the pool turned on.
    gh api --method POST /enterprises/ENTERPRISE/settings/billing/cost-centers \
      -f name='Platform-Engineering' -F ai_credit_pool_enabled=true
    # keep the "id" from the response
  2. Add the team. Use an enterprise team, not a list of names, so people joining or leaving are picked up automatically. With the pool on, only users and enterprise teams are allowed, not organizations or repositories.
    gh api --method POST \
      /enterprises/ENTERPRISE/settings/billing/cost-centers/COST_CENTER_ID/resource \
      --input - <<< '{ "enterprise_teams": ["platform-engineering"] }'
  3. Check the fence. target_amount is the fence and current_amount is what the team has used, both in AI credits (78,000 credits = $780).
    gh api /enterprises/ENTERPRISE/settings/billing/cost-centers/COST_CENTER_ID \
      --jq '.ai_credit_pool_state'
    # { "target_amount": 78000, "current_amount": 12500 }
  4. Optional: cap the overage with a cost center budget on AI credits, with "stop usage" on.
    gh api --method POST /enterprises/ENTERPRISE/settings/billing/budgets \
      -f budget_type='SkuPricing' -f budget_product_sku='copilot_ai_credits' \
      -f budget_scope='cost_center' -f budget_entity_name='COST_CENTER_ID' \
      -F budget_amount=5000 -F prevent_further_usage=true

You need an enterprise owner or billing manager account. Each user can be in only one cost center at a time; adding someone to a second one moves them. Limits: up to 1,000 active cost centers per enterprise, 25,000 resources per cost center, and 50 resources added or removed per call.

6"I'm locked out": four checks, in order

When a user is blocked and does not understand why, it is almost always one of these. Check them in this order:

1Is "AI credit paid usage" on?It is on by default. If an admin turned it off, users stop the moment the pool empties.2Did they hit a per-user budget?Per-user budgets always stop the user. Individual beats cost center beats universal.3Is an enterprise budget blocking?A blocking enterprise budget that does not exclude cost centers can stop a user who still has room.4Was the fence turned on mid-month?Turn it on at the start of a billing cycle. Mid-cycle numbers can look empty.
Open larger ↗ The first check explains most lockouts. The third one is the hardest to spot, because the user's own budget still shows room.

The quick fix for a single user: a blocked user can request more budget right from the limit message. Owners and billing managers see it under "Requests from members" in billing settings and can approve, change the amount, or deny it. Approving restores access immediately. This is not available for enterprises with managed users.

7If you automate it: keep your own history

If you want to rebalance budgets automatically or predict when you need more seats, the number that matters is rate, not today's total. "Last month 20 people hit their limit in the last ten days; this month 60 hit it before the 15th" is what tells you to buy more seats before developers hit a wall.

GitHub's detailed usage reports can cover past date ranges, which is the right starting point. Live per-user views are only a picture of right now. Either way, it pays to keep your own copy:

8Questions readers ask

I had a second AI model play a grumpy enterprise admin and throw the hardest questions it could at this article. Here are the three that landed.

"If another team drains the shared pool first, are my team's unused credits still there?"

Not guaranteed. GitHub describes the fence as a cap on how much a team can use, not credits set aside for it. A team without a fence can still eat into the shared pool. The practical answer: fence every heavy team, not just the one that worries you today.

"Is the overage budget a hard ceiling? Can my bill go past it?"

"Stop usage" blocks new usage once the budget is reached. GitHub does not promise a to-the-cent cut-off, and requests already running can finish. Treat a $5,000 budget as "stops around $5,000", and leave yourself a little room.

"What if someone switches teams mid-month? Fresh credits, or a clean escape from their limit?"

Honest answer: nobody has written this downThe docs say a user can be in one cost center at a time, and that per-user team budgets follow people as they join or leave. What happens to the credits they already used when they move? Not documented. Does Dana from Platform, who hit her limit on the 12th, become a brand-new person in Data Science on the 13th? Maybe. Maybe not. GitHub isn't saying.

So test it yourself. It takes ten minutes and one volunteer who doesn't mind being a lab rat:

  1. Pick a test user with a small per-user budget in cost center A, and let them use some credits.
  2. Move them to cost center B, which has a different per-user budget.
  3. Check both: the user's remaining budget, and each cost center's current_amount. Did the usage move with them, stay behind, or vanish?
  4. Tell me what you found. First reader with screenshots gets credited in the follow-up post. Bragging rights included, AI credits not.

Sources

GitHub changes billing often. Everything here was checked against GitHub's docs and changelog on October 23, 2026; confirm them in your own enterprise before relying on them.

Close ×
BEFORE: one shared poolTeam ATeam BTeam CTeam A uses most of the pool.Team C runs out before the month ends.AFTER: each team fenced to its own seatsTeam ATeam BTeam CTeam A stops at its fence.Team A can't eat Team C's share.
Close ×
10 Business seats × 1,900 credits= 19,000 credits5 Enterprise seats × 3,900 credits= 19,500 creditsFence for this cost center: 38,500 credits ($385) a monthGitHub adds this up for you. Add a seat: grows now. Remove one: next cycle.1 AI credit = $0.01Business seatsEnterprise seats
Close ×
Phase 1: included creditspaid for by your seatsPhase 2: metered overage$0.01 per credit, only if paid usage is onPer-user budgetalways stops the userCost center pool capstops the team at its fenceCost center budgetstops only if "stop usage" is onEnterprise budgetcan block everyone, see below
Close ×
Team A"We ran out. Can we get more?"DOOR 1Bring more seats+1Add or upgrade licenses in the team.The fence grows the same day.No new billing setup.DOOR 2Pay as you go past the fence$0.01 / creditTeam keeps working after itsincluded credits run out.Put a lid on it: a cost center budgetwith "stop usage" on.Your GitHub billdefault, no Azure neededTeam's own Azureoptional, for chargebackSecret door 3: just raise the cap?Nope. GitHub sizes the fence from seats.
Close ×
1Is "AI credit paid usage" on?It is on by default. If an admin turned it off, users stop the moment the pool empties.2Did they hit a per-user budget?Per-user budgets always stop the user. Individual beats cost center beats universal.3Is an enterprise budget blocking?A blocking enterprise budget that does not exclude cost centers can stop a user who still has room.4Was the fence turned on mid-month?Turn it on at the start of a billing cycle. Mid-cycle numbers can look empty.