PAYATHON 2026

如何通过 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_used
  • total_paid_minutes_used
  • included_minutes
  • minutes_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 没有相应字段,因此无法从上述响应中可靠还原这一日期。

备注:内容仅供参考。