如何通过 GitHub API 获取 billing quota 重置日期?
结论
GitHub 公开 REST API 目前不返回 GitHub Actions Included minutes 的重置日期,也没有公开接口可以获取设置页面显示的 resets in X days。
GET /users/{username}/settings/billing/actions 只返回分钟配额和使用量,无法根据响应推导账户的 billing period expiration date。
GitHub Actions 的月度 Included minutes 通常会在每个自然月开始时重新分配。如果账户遵循这项规则,可以将下个月 1 日作为预计重置时间,再自行计算剩余天数。这个日期是根据计费规则计算的,并非 API 返回的账户级重置日期。
API 为什么没有重置日期
该接口的响应模型只包含以下数据:
total_minutes_usedtotal_paid_minutes_usedincluded_minutesminutes_used_breakdown
响应中没有 reset_at、billing_period_end 或类似字段。修改 Accept 请求头或提高 Token 权限,也不会增加重置时间字段。
GitHub 设置页面中的 resets in X days 是网页端根据计费周期信息生成的,但这不代表相同信息也会通过公开 API 提供。
按自然月估算重置时间
如需监控或告警,可以按 UTC 时间计算下个月 1 日。这样能减少本地时区和夏令时带来的偏差。
from datetime import datetime, timezone
import calendar
import math
now = datetime.now(timezone.utc)
if now.month == 12:
reset_at = datetime(now.year + 1, 1, 1, tzinfo=timezone.utc)
else:
reset_at = datetime(now.year, now.month + 1, 1, tzinfo=timezone.utc)
remaining_seconds = (reset_at - now).total_seconds()
remaining_days = math.ceil(remaining_seconds / 86400)
print(f"Estimated reset time: {reset_at.isoformat()}")
print(f"Resets in approximately {remaining_days} days")
这里使用 math.ceil(),因此只要距离重置还有不足一天,也会按一天计算。如果只需要计算相差多少个 UTC 日历日期,可以改为:
remaining_days = (reset_at.date() - now.date()).days
结合 API 查询配额
可以通过 API 获取使用量,同时在程序中计算预计重置时间:
curl \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/users/$GITHUB_USER/settings/billing/actions"
程序读取 included_minutes 和 total_minutes_used 后,可以这样计算剩余分钟数:
remaining_minutes = included_minutes - total_minutes_used
为避免结果小于零,可以写成:
remaining_included_minutes = max(
0,
included_minutes - total_minutes_used
)
total_paid_minutes_used 表示付费分钟数,不应再次从 included_minutes 中直接扣除。
注意事项
- 下个月 1 日只是根据 GitHub Actions 月度配额规则估算的日期,不是接口提供的权威账户字段。
- 网页端可能采用不同的时区或取整方式,因此显示的天数可能与自行计算的结果相差一天。
- 企业账户、组织账户、试用方案,以及迁移过计费平台的账户,实际显示逻辑可能不同。如需与账单页面精确一致,应以页面和账户账单设置为准。
- 不建议抓取
github.com/settings/billing页面,也不建议调用网页使用的内部接口。这些接口不属于公开 API,可能随时变化,还可能需要登录 Cookie 和额外验证。 - 如果必须获得权威且机器可读的重置时间,只能向 GitHub Support 确认该账户是否有可用的计费接口。公开 REST API 没有相应字段,因此无法从上述响应中可靠还原这一日期。
备注:内容仅供参考。
