This guide configures the RunZero dashboard's Actions minutes panel so it can read real usage from GitHub billing APIs.
- Personal account tracking: set
OWNER=<your-username>and keepORG=empty. - Organization tracking: set
ORG=<your-org>.
RunZero uses these endpoints:
- Personal owner mode:
GET /users/{owner}/settings/billing/actions - Organization mode:
GET /orgs/{org}/settings/billing/actions
Use a Personal Access Token and place it in .env as ACCESS_TOKEN=....
Minimum practical access:
- Required for runner lifecycle and queue discovery:
- Classic PAT:
repo(plus org administration scope when managing org runners). - Required for Actions minutes panel:
- Token must be allowed to read billing for the target account/org.
If billing access is missing, the panel intentionally shows an error status instead of fake numbers.
ACCESS_TOKEN=ghp_xxx
OWNER=your-username
# ORG=your-org-name
# Optional: refresh cadence for minutes panel in seconds
ACTIONS_BILLING_REFRESH_INTERVAL=300docker compose build autoscaler
make restartOpen dashboard: http://localhost:49505
Check panel: GitHub Actions Minutes
Billing synced from GitHub.means permissions are correct.- If it shows
Billing unavailable, update token permissions and restart.
curl -sS http://localhost:49505/api/status | node -e 'let d="";process.stdin.on("data",c=>d+=c);process.stdin.on("end",()=>{const j=JSON.parse(d);console.log(JSON.stringify(j.actions_billing ?? {}, null, 2));});'Expected fields when successful:
scope_typescope_nameincluded_minutestotal_minutes_usedtotal_paid_minutes_usedminutes_remainingstatus: ok