The interactive 'gh auth login' web flow requests a fixed set of OAuth scopes: repo, read:org, gist, and workflow. Anything beyond that, such as admin:org for managing teams, delete_repo, or read:packages, is not granted and the corresponding gh command fails with a message naming the missing scope.
Do not re-run gh auth login to widen access. 'gh auth refresh -s admin:org' adds scopes to the existing credential in place and can be repeated. 'gh auth status' prints the account, the host, where the credential is stored, and the token scopes currently held, which is the fastest way to check before debugging a 403.
A separate trap: if the GH_TOKEN or GITHUB_TOKEN environment variable is set, gh uses it and ignores anything stored in the keyring, and gh auth refresh cannot modify an environment token. gh auth status flags this. Inside GitHub Actions the environment token is the normal path, and its scopes come from the workflow's permissions block, not from OAuth.