Codex のレート制限リセット権の有効期限の確認方法

Codex で付与されたレート制限リセット権は有効期限が30日間となっていますが、現状、有効期限がいつまでかを簡単に確認する術がないようです。
以下に Windows 環境で確認するためのスクリプトが記載されていたので、これを参考に Ubuntu 用のスクリプトを作成しました。

スクリプトの作成

ファイル名は何でもよいですが、例えば check_codex_reset_credits.sh として、以下の内容を保存してください。

#!/usr/bin/env bash
set -euo pipefail

AUTH_FILE="${HOME}/.codex/auth.json"
API_URL="https://chatgpt.com/backend-api/wham/rate-limit-reset-credits"

if ! command -v jq >/dev/null 2>&1; then
  echo "ERROR: jq が見つかりません。先にインストールしてください。"
  echo "  sudo apt update && sudo apt install -y jq"
  exit 1
fi

if ! command -v curl >/dev/null 2>&1; then
  echo "ERROR: curl が見つかりません。先にインストールしてください。"
  echo "  sudo apt update && sudo apt install -y curl"
  exit 1
fi

if [ ! -f "$AUTH_FILE" ]; then
  echo "ERROR: 認証ファイルが見つかりません: $AUTH_FILE"
  echo "Codex にログイン済みか確認してください。"
  exit 1
fi

ACCESS_TOKEN="$(jq -r '.tokens.access_token // empty' "$AUTH_FILE")"
ACCOUNT_ID="$(jq -r '.tokens.account_id // empty' "$AUTH_FILE")"

if [ -z "$ACCESS_TOKEN" ]; then
  echo "ERROR: access_token が取得できませんでした。"
  echo "$AUTH_FILE の形式が想定と異なるか、Codex の認証状態が無効です。"
  exit 1
fi

TMP_RESPONSE="$(mktemp)"
trap 'rm -f "$TMP_RESPONSE"' EXIT

if [ -n "$ACCOUNT_ID" ]; then
  HTTP_CODE="$(
    curl -sS \
      -o "$TMP_RESPONSE" \
      -w "%{http_code}" \
      -H "Authorization: Bearer ${ACCESS_TOKEN}" \
      -H "OpenAI-Beta: codex-1" \
      -H "originator: Codex Desktop" \
      -H "ChatGPT-Account-ID: ${ACCOUNT_ID}" \
      --max-time 30 \
      "$API_URL"
  )"
else
  HTTP_CODE="$(
    curl -sS \
      -o "$TMP_RESPONSE" \
      -w "%{http_code}" \
      -H "Authorization: Bearer ${ACCESS_TOKEN}" \
      -H "OpenAI-Beta: codex-1" \
      -H "originator: Codex Desktop" \
      --max-time 30 \
      "$API_URL"
  )"
fi

if [ "$HTTP_CODE" != "200" ]; then
  echo "ERROR: API 呼び出しに失敗しました。HTTP status: $HTTP_CODE"
  echo "レスポンス:"
  cat "$TMP_RESPONSE"
  echo
  exit 1
fi

jq -r '
  def fmt_time:
    if . == null or . == "" then
      "不明"
    else
      # jq の fromdateiso8601 は小数秒つき ISO8601 で失敗することがあるため除去する
      sub("\\.[0-9]+Z$"; "Z")
      | fromdateiso8601
      | localtime
      | strftime("%Y-%m-%d %H:%M:%S %Z")
    end;

  "利用可能なリセット権: \(.available_count // 0) 個",
  "",
  "状態\t付与日時\t有効期限",
  (
    (.credits // [])
    | map([
        (.status // "不明"),
        (.granted_at | fmt_time),
        (.expires_at | fmt_time)
      ])
    | .[]
    | @tsv
  )
' "$TMP_RESPONSE" | column -t -s $'\t'

実行手順

sudo apt update
sudo apt install -y curl jq

chmod +x check_codex_reset_credits.sh
./check_codex_reset_credits.sh

注意

このスクリプトは、参照記事の PowerShell 版と同じく、~/.codex/auth.json から access_tokenaccount_id を読み取り、https://chatgpt.com/backend-api/wham/rate-limit-reset-credits に GET します。

注意点として、この方法は公式に公開された安定 API ではなく、参照記事でも「内部APIを使った非公式な確認方法」と説明されています。
Codex 側の仕様変更で動かなくなる可能性があります。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。