Docs: account quotas in Site administration (#128)
#121 added per-account quotas and documented them in Limits, Configuration, the audit log and the API reference. Site administration, where a site administrator looks for what they can change, didn't mention them. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016q5wwBFck8JHq14gHUM2CL
Canberk Demirci authored · GitHub committed signed1 parent 93ef0c8commit a9eccbbec65d0a11d4c0ab72eb1cba47acb9adceBrowse files
1 file changed+16−0
modifiedapps/diffinery/docs/admin/site-administration.md+16−0View file
| @@ -124,6 +124,22 @@ | ||
| 124 | 124 | |
| 125 | 125 | The link id comes from `GET /api/v3/diffinery/user/linked-accounts`, called by the account that owns the link; Diffinery has no endpoint that lists other people's links. The request answers `204`, or `404 link not found`, and is audited as `account.link_cleared` with the link (`github.com/diffy`) as the target and the Diffinery account's id in the detail. Imports that already ran keep their attribution; later imports treat that GitHub user as a mannequin until someone links the account again. People unlink their own accounts on **Settings → Linked accounts** (`account.unlink_github`). |
| 126 | 126 | |
| 127 | +## Account quotas | |
| 128 | + | |
| 129 | +Every person and organization has [quotas](/docs/reference/limits#account-quotas) on hosted minutes per month, hosted jobs running at once, agent sandboxes open at once and repositories. Accounts run by a site administrator have none. The defaults come from the `QUOTA_*` variables in [Configuration](/docs/self-hosting/configuration). There is no page for quotas; use the API: | |
| 130 | + | |
| 131 | +```sh | |
| 132 | +diffinery api GET /admin/accounts/acme/quotas | |
| 133 | +echo '{"hosted_minutes": 6000, "repositories": -1}' | diffinery api PATCH /admin/accounts/acme/quotas --input - | |
| 134 | +``` | |
| 135 | + | |
| 136 | +| Request | What it does | Who | | |
| 137 | +| --- | --- | --- | | |
| 138 | +| `GET /api/v3/admin/accounts/{login}/quotas` | The account's quotas and what it uses: `hosted_minutes` (`used`, `limit`), `hosted_jobs` (`running`, `limit`), `sandboxes` (`open`, `limit`), `repositories` (`count`, `limit`), with `exempt` and `period_start` (the start of the month, UTC) | site administrator, any token scope | | |
| 139 | +| `PATCH /api/v3/admin/accounts/{login}/quotas` | Changes only the quotas you send: a whole number, `-1` for unlimited, or `null` to go back to the default. Answers like `GET`. Audited as `account.quotas.set`. | site administrator, with an `admin` token not limited to repositories, or a browser session | | |
| 140 | + | |
| 141 | +`{login}` is a person or an organization; an agent gets `404 no person or organization with that name`, because agents use their owner's quotas. Anyone else gets `403 only site administrators can see and change quotas`. People see their own usage with `GET /api/v3/user/usage`, and organization owners and admins see their organization's with `GET /api/v3/orgs/{org}/usage`. | |
| 142 | + | |
| 127 | 143 | ## Audit log |
| 128 | 144 | |
| 129 | 145 | **Settings → Audit log** (`/settings/audit`) shows the 200 most recent security-relevant events: sign-ins, passkeys, tokens, invites, account status changes, repository and access changes, pushes, merges and push protection. Repository and organization settings changed through the REST API or the CLI are recorded too: repository settings, archiving, collaborators, branch protection, Actions secrets and variables (repository, environment and organization), webhooks, a repository's workflow token settings, and deleted Actions artifacts and caches. Imports from GitHub (`import.create`, `import.push`, `import.finish` and the rest) and linked GitHub accounts are recorded too. Settings changes made through the API have `via: api` in their **Detail**. Each row has **When**, **Actor** (and who an agent acted for), **Action**, **Target** and **Detail**. See [Audit log](/docs/security/audit-log) for every action and how to use it. |