Show Codex reset credits directly in the macOS app
Summary
Please add first-class visibility for Codex rate-limit reset credits in the macOS Codex app.
There appears to already be account-backed data for free Codex usage resets. A small local script can read the current user's Codex auth, call the reset-credit endpoint, and show:
- how many resets are available
- when each reset was granted
- when each reset expires
This would be useful directly inside the app, near existing usage/limits UI, because reset credits are valuable but currently easy to miss.
Why this matters
Users can have free reset credits available without an obvious in-app place to see them. That creates a small but meaningful discoverability gap:
- users may not know they have resets available
- users may not know when resets expire
- users may not know whether a reset has already been redeemed
- support/debugging conversations about usage limits are harder than necessary
The current usage UI already communicates remaining time and weekly usage. Reset credits fit naturally into that same surface.
Requested behavior
In the macOS Codex app, show a compact reset-credit section in the usage/account area when reset credits exist.
Suggested fields:
N resets available- for each reset: grant date and expiry date
- optional status: available, redeeming, redeemed, expired
- optional action: reset usage, if the account is eligible and the reset flow is supported
If no reset credits exist, the app can either hide the section or show a small "No resets available" state, depending on the existing usage UI pattern.
Workaround / proof of utility
This works today as a local read-only workaround using Codex Desktop auth:
#!/usr/bin/env python3
import json
import urllib.request
from datetime import datetime
from pathlib import Path
from zoneinfo import ZoneInfo
API_URL = "https://chatgpt.com/backend-api/wham/rate-limit-reset-credits"
AUTH_PATH = Path.home() / ".codex" / "auth.json"
TIMEZONE = "America/Vancouver"
def fmt(timestamp):
if not timestamp:
return "not set"
parsed = datetime.fromisoformat(timestamp.replace("Z", "+00:00"))
return parsed.astimezone(ZoneInfo(TIMEZONE)).strftime("%Y-%m-%d %I:%M:%S %p %Z")
auth = json.loads(AUTH_PATH.read_text())
tokens = auth["tokens"]
headers = {
"Authorization": f"Bearer {tokens['access_token']}",
"OpenAI-Beta": "codex-1",
"originator": "Codex Desktop",
}
account_id = tokens.get("account_id")
if account_id:
headers["ChatGPT-Account-ID"] = account_id
request = urllib.request.Request(API_URL, headers=headers)
payload = json.loads(urllib.request.urlopen(request, timeout=30).read().decode())
credits = payload.get("credits") or []
print(f"1. resets available: {payload.get('available_count', 0)}")
print("2. granted: " + ("; ".join(fmt(c.get("granted_at")) for c in credits) or "none"))
print("3. expires: " + ("; ".join(fmt(c.get("expires_at")) for c in credits) or "none"))
Example output:
1. resets available: 1
2. granted: 2026-06-17 05:38:38 PM PDT
3. expires: 2026-07-17 05:38:38 PM PDT
The workaround intentionally prints only the useful reset-credit summary. It does not print auth tokens, account IDs, credit IDs, or the full response payload.
Possible UI placement
The natural location is the macOS app's account or usage menu, close to existing usage remaining information.
One possible presentation:
Usage remaining
5h 77%
Weekly 94%
Reset credits
1 reset available
Granted Jun 17, 2026
Expires Jul 17, 2026
If multiple resets are available, list each expiry date or show a compact expandable row.
Acceptance criteria
- macOS app shows the number of available Codex reset credits when present.
- macOS app shows grant and expiry dates for each reset credit.
- macOS app does not expose sensitive auth/account identifiers in the UI, logs, diagnostics, screenshots, or copied text.
- UI handles zero, one, and multiple reset credits.
- UI handles redeemed, redeeming, expired, and available states if those statuses are returned.
- Date/time rendering uses the user's local timezone.
- If a redeem/reset action is added, it has a confirmation step and clearly reports success/failure.
Notes
The workaround uses an existing backend endpoint that appears to be used by Codex Desktop-authenticated sessions:
GET https://chatgpt.com/backend-api/wham/rate-limit-reset-credits
Headers used by the workaround:
Authorization: Bearer <local Codex token>
ChatGPT-Account-ID: <local account id, when present>
OpenAI-Beta: codex-1
originator: Codex Desktop
The product request is not for users to rely on this private endpoint directly. The request is to expose the same useful information through the supported macOS app UI.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗