Before automating Copilot model-policy changes, record the policy scope, current model identifier, inherited controls and intended audience. Keep the API response separate from a check of what an affected user can actually select. A readable policy response is evidence about configuration, not permission to change it or proof of individual access.

On October 19, 2026, GitHub announced generally available GET and PATCH model-policy endpoints for enterprises, enterprise teams, agent apps and organizations. This guide turns that announcement into a small review workflow: inspect, propose, authorize, then verify. It is a proposed operating checklist, not a report of a tenant migration we performed. See the official announcement.

A potato administrator pauses between a policy document labelled Read and an unpressed button labelled Change.
AI-generated conceptual illustration: inspecting a setting and authorizing its change are separate steps.

First decide which policy question you are answering

“Is this model enabled?” is incomplete. Enabled where, for which audience, and under which management mode? Start the review with a sentence such as: “We want to understand access for the documentation team, without changing any policy.” That keeps a diagnostic task from quietly becoming an access expansion.

GitHub distinguishes organization-based control from an opt-in enterprise-teams preview. Enabling the latter deactivates organization-level model settings. API general availability therefore should not be read as a declaration that every related management mode is out of preview. The enterprise model-availability guide documents those differences.

Four separate cards labelled Enterprise, Organization, Team and App surround a potato holding a magnifying glass.
AI-generated scope inventory, not an inheritance diagram. Name the scope before interpreting its response.

Do not switch modes merely to make an endpoint fit an existing script. That is a separate migration decision with a wider audience than the original troubleshooting question.

A GET request does not guarantee a read-only credential

The organization endpoint has a particularly easy trap: its documented fine-grained permission is organization Administration write, even for GET. Organization owners can use it; the organization must be independent or in an enterprise that is not using enterprise-teams model policy. Consult the current organization API reference before selecting an authentication route.

By contrast, the enterprise AI-controls reference lists read access for its GET operations and separate write access for updates. Team and apps responses describe policy settings and editability; they are not final per-user access decisions.

For an inspection-only task, use an already approved route with an authorized administrator. If that route is unavailable, record the missing access and ask the owner to supply the relevant non-secret evidence. Do not create a broadly privileged credential just because the command begins with GET. Never paste tokens or authorization headers into the review record.

Capture a before-state that someone else can compare

Use one row per model and keep the collection time beside the scope. A screenshot without a timestamp or a response without its target can answer the wrong question beautifully.

An empty clipboard form has Model ID, Policy, Editable and Observed at fields beside a potato clerk.
AI-generated evidence-form illustration. Use the text table below for a real record; the empty form is not a captured API result.
Record fieldWhat to retainWhat not to infer
ObservationDate, time zone, scope, endpoint documentation link and response status.A response from yesterday is necessarily the current baseline.
Model identityThe identifier returned by the relevant GET operation, plus its display label.A remembered marketing name is a valid API identifier.
State and controlReturned policy fields and any editability or inherited-policy information present.A missing field is equivalent to an explicit false value.
Proposed deltaExact model, old observation, intended new setting and business reason.Every field in a full response belongs in the change request.
AudienceIntended group and a named owner for checking overlapping memberships.One team response describes all access paths for a person.
DispositionNo change, needs evidence, approved change or deferred; decision owner.Successful retrieval means the change is approved.

This is our suggested review format, not a GitHub payload schema. Keep raw responses in your approved private evidence location when appropriate; put only the necessary comparison in the review. Use “not observed” rather than filling gaps from another scope's response.

Check overlapping teams before interpreting Optional

In enterprise-teams mode, team access is additive. An enterprise-wide disabled model cannot be enabled by a team; an enterprise-wide enabled model remains enabled. For delegated models, one team enabling a model can give a member access even if another team's setting is Optional. GitHub describes Optional as not currently enabled for that team, not as a per-person denial. See the team-access rules.

A central potato stands in overlapping Team A and Team B circles; side figures hold Enabled and Optional labels.
AI-generated membership schematic. The side labels represent team settings; the central member belongs to both groups. This example assumes the model is delegated to teams.

For a fictional review, suppose the requested pilot is Team B, while one pilot participant also belongs to Team A. Write down both memberships before claiming that the participant is a clean test of Team B's setting. If you cannot verify the other membership or policy, keep the user-access conclusion unresolved. Do not remove memberships just to simplify a test.

Keep the change small, then read the result again

For organization updates, GitHub requires model identifiers from GET. Inherited enterprise policies are locked; default availability is also locked when its editability is false. Organization PATCH changes are atomic, and its response contains effective policies for all available models, not only the requested changes. Those are organization-endpoint behaviors, not a promise about every API. See the organization update contract.

  1. Have the owner review the proposed delta and affected audience.
  2. Refresh the before-state immediately before the authorized change. If it differs, resolve that difference instead of overwriting it from an old record.
  3. Follow the current endpoint's documented request format. Keep unrelated models and management-mode changes out of the proposal.
  4. Retain the actual response, then retrieve the same scope again. Compare the intended change and inspect unexpected differences.
  5. Ask an authorized affected user to check the relevant Copilot surface. Record the account context, client version, time and observed model availability without collecting prompts or private work.

Refreshing is a review safeguard, not a transaction lock. If another administrator is changing the same scope, coordinate ownership rather than treating “we read it first” as concurrency protection. If the request outcome is uncertain, read the current state before repeating it.

Separate unchecked trays labelled Policy response and User check hold a document and a blank-screen laptop.
AI-generated verification illustration. Neither an API response nor a user check substitutes for the other.

Close with two conclusions and a next action

Use a short handoff with separate configuration and experience conclusions:

A useful stopping point may be “no policy change needed.” If the issue is a retired model rather than an access setting, use our model-replacement record to separate replacement choice from policy administration. The goal is an explainable decision, not a script that can flip more switches.