# 2.5 Usage Query CC Switch's quota / balance display is split into two categories: **Auto Query** (official subscription types, works out of the box) and **Manual Enable** (built-in templates + custom scripts, requires user configuration before showing). | Category | Scope | User Enable Required | | ------------------------------ | -------------------------------------------------------------------------- | -------------------- | | **Auto Query** | Claude / Codex / Gemini official subscriptions, GitHub Copilot, Codex OAuth reverse proxy | No (enabled by default) | | **Manual Enable (built-in templates)** | Token Plan, third-party balance query | Yes (see below) | | **Manual Enable (custom script)** | Proxies, private deployments, special APIs not covered by built-in templates | Yes (see below) | ## Auto Query (Official Subscription Types) Starting from v3.13.0, the following three categories automatically display the quota at the bottom of the provider card after the provider is enabled — no additional configuration required: | Category | Covered Providers | Displayed Content | | ---------------- | ----------------------------------------------------- | ----------------------------------------- | | Official subscriptions | Claude / Codex / Gemini official login | Official subscription quota | | GitHub Copilot | Copilot provider card | Premium interactions remaining | | Codex OAuth | Codex OAuth reverse proxy card (Claude provider) | ChatGPT account Codex quota | These three share the common trait that **their data source is unique and semantically unambiguous** (the usage rate of an official subscription), so CC Switch directly calls the corresponding official or OAuth query endpoint. ### Auto Query Interactions - **Card footer display**: Usage percentage + reset countdown, colored by usage (< 70% green / 70–89% orange / ≥ 90% red) - **Manual refresh**: Click the refresh icon on the card to re-query - **Simplified card**: For these three types, the **Health Check** and **Usage Query Config** buttons are hidden to avoid interfering with the built-in display - **Session expired notice**: If a token fails to refresh, the card shows a yellow "Session Expired" warning (Copilot / Codex OAuth) --- ## Manual Enable (Built-in Templates + Custom Scripts) Besides the three auto-query types above, **all other providers** (including Token Plan, third-party balance queries, and various proxy services) need to have the **Usage Query** switch manually turned on in the provider card before any quota is displayed. ### Why do these need manual enabling? One important reason: **the same request URL (same vendor) may expose multiple query modes** — for example, both plan-based quota queries and account-level balance queries. CC Switch cannot automatically infer which one you want, so the built-in query for such providers is **disabled by default**, leaving you to pick the right template. ### Built-in Template Coverage v3.13.0 provides **ready-to-use built-in templates** for the following categories — no script writing required: | Category | Covered Providers | Template Type | | ------------------ | --------------------------------------------------------- | ------------------------------- | | Token Plan | Kimi / Zhipu GLM / MiniMax / Volcengine | Plan quota (with usage progress) | | Third-party balance| DeepSeek / StepFun / SiliconFlow / OpenRouter / Novita AI | Official balance query | > **Tip**: Beyond these built-in templates, for uncovered providers you can use the **custom script** approach (see below) to write your own query logic. ### Enable Steps 1. Hover over the provider card to reveal action buttons 2. Click the **Usage Query** button (chart icon) 3. At the top of the configuration panel, toggle on **Enable Usage Query** 4. Select the right built-in template (e.g., Token Plan, third-party balance) or choose "Custom" 5. Fill in API Key / Base URL / Access Token as needed (most cases can be left blank, reusing the provider's own credentials) 6. Click **Test Script** to verify the query returns successfully 7. Save — next time the provider is activated, the quota will show up at the bottom of the card > ⚠️ **Note**: The auto-refresh interval after enabling is controlled by the "Auto Query Interval" field (set to `0` to disable auto-refresh). Background queries only trigger when the provider is in "Currently Active" state. --- ## Custom Script Query (Advanced) ### Overview When a provider **is not covered by the built-in templates**, you can write a custom JavaScript query script. Suitable for proxy services, private deployments, special API formats, etc. **Use cases**: - Check API account remaining balance - Monitor plan usage - Multi-plan balance summary display ## Open Configuration 1. Hover over the provider card to reveal action buttons 2. Click the "Usage Query" button (chart icon) 3. Opens the usage query configuration panel ## Enable Usage Query At the top of the configuration panel, enable the "Enable Usage Query" toggle. ## Preset Templates CC Switch provides three preset templates: ### Custom Template Fully customizable request and extraction logic, suitable for special API formats. ### Generic Template Suitable for most providers with standard API formats: ```javascript ({ request: { url: "{{baseUrl}}/user/balance", method: "GET", headers: { "Authorization": "Bearer {{apiKey}}", "User-Agent": "cc-switch/1.0" } }, extractor: function(response) { return { isValid: response.is_active || true, remaining: response.balance, unit: "USD" }; } }) ``` **Configuration parameters**: | Parameter | Description | |-----------|-------------| | API Key | Authentication key (optional, uses provider's key if empty) | | Base URL | API base URL (optional, uses provider's endpoint if empty) | ### New API Template Designed specifically for New API-type proxy services: ```javascript ({ request: { url: "{{baseUrl}}/api/user/self", method: "GET", headers: { "Content-Type": "application/json", "Authorization": "Bearer {{accessToken}}", "New-Api-User": "{{userId}}" }, }, extractor: function (response) { if (response.success && response.data) { return { planName: response.data.group || "Default Plan", remaining: response.data.quota / 500000, used: response.data.used_quota / 500000, total: (response.data.quota + response.data.used_quota) / 500000, unit: "USD", }; } return { isValid: false, invalidMessage: response.message || "Query failed" }; }, }) ``` **Configuration parameters**: | Parameter | Description | |-----------|-------------| | Base URL | New API service URL | | Access Token | Access token | | User ID | User ID | ## General Configuration ### Timeout Request timeout in seconds, default 10 seconds. ### Auto Query Interval Interval for automatically refreshing usage data (minutes): - Set to `0` to disable auto query - Range: 0-1440 minutes (up to 24 hours) - Only effective when the provider is in "Currently Active" status ## Extractor Return Format The extractor function returns an object containing the following fields. All fields are optional: | Field | Type | Required | Description | |-------|------|----------|-------------| | `isValid` | boolean | No | Whether the account is valid, defaults to true | | `invalidMessage` | string | No | Message when invalid | | `remaining` | number | No | Remaining balance | | `unit` | string | No | Unit (e.g., USD, CNY, times) | | `planName` | string | No | Plan name (supports multi-plan) | | `total` | number | No | Total balance | | `used` | number | No | Used amount | | `extra` | string | No | Additional display text | ## Test Script After configuration, click the "Test Script" button to verify: 1. Sends a request to the configured URL 2. Executes the extractor function 3. Displays the returned result or error message ## Display After successful configuration, the provider card displays: - **Single plan**: Directly shows remaining balance - **Multi-plan**: Shows plan count, click to expand for details ## Variable Placeholders The following placeholders can be used in scripts and are automatically replaced at runtime: | Placeholder | Description | |-------------|-------------| | `{{apiKey}}` | Configured API Key | | `{{baseUrl}}` | Configured Base URL | | `{{accessToken}}` | Configured Access Token (New API) | | `{{userId}}` | Configured User ID (New API) | ## Common Provider Configuration Examples ### Troubleshooting ### Auto Query Not Displayed (Official Subscription Types) **Check**: 1. Confirm the provider is an official subscription type — Claude / Codex / Gemini official login, GitHub Copilot, or Codex OAuth reverse proxy 2. The provider is in "Currently Active" state (inactive providers do not trigger queries) 3. For OAuth types (Copilot / Codex OAuth), check whether the token is still valid; if the card shows "Session Expired", log in again in the **OAuth Auth Center** 4. Network access to the official quota endpoint ### Manual Enable Still Not Showing Quota **Check**: 1. Whether the **Enable Usage Query** toggle at the top of the "Usage Query" panel is on 2. Whether a suitable built-in template (Token Plan / third-party balance / custom) is selected 3. Click **Test Script** to see the specific error 4. Required fields such as API Key / Base URL are filled correctly 5. Network access to the provider's quota endpoint 6. Background auto-refresh only triggers when the provider is in "Currently Active" state ### Query Failed **Check**: 1. Is the API Key correct 2. Is the Base URL correct 3. Is the network accessible 4. Is the timeout sufficient ### Empty Response Data **Check**: 1. Does the extractor function have a `return` statement 2. Does the response data structure match the extractor 3. Use "Test Script" to view the raw response ### Format Failed When there is a script syntax error, clicking the "Format" button will indicate the error location. ## Notes - Usage queries consume a small amount of API request quota - Set a reasonable auto query interval to avoid frequent requests - Sensitive information (API Key, Token) is securely stored locally