AI Platform API Reference

June 2, 2026 · View on GitHub

Reference document extracted from cc-switch project for implementing platform balance/quota APIs.


Balance APIs (账户余额)

Return UsageResult with balance information for pay-as-you-go billing models.

PlatformURLAuthResponse KeyUnit
DeepSeekGET https://api.deepseek.com/user/balanceBearer {api_key}balance_infos[].total_balanceCurrency (CNY)
StepFunGET https://api.stepfun.com/v1/accountsBearer {api_key}balanceCNY
SiliconFlow CNGET https://api.siliconflow.cn/v1/user/infoBearer {api_key}data.totalBalanceCNY
SiliconFlow ENGET https://api.siliconflow.com/v1/user/infoBearer {api_key}data.totalBalanceUSD
OpenRouterGET https://openrouter.ai/api/v1/creditsBearer {api_key}data.total_credits - data.total_usageUSD
Novita AIGET https://api.novita.ai/v3/user/balanceBearer {api_key}availableBalance / 10000USD (unit: 0.0001)

Subscription/Quota APIs (套餐额度)

Return SubscriptionQuota with tiered usage data (5-hour window, weekly limit).

PlatformURLAuthTier TypesNotes
ClaudeGET https://api.anthropic.com/api/oauth/usageBearer {oauth_token}five_hour, seven_day, seven_day_opus, seven_day_sonnetOAuth-based, reads from Keychain
Codex/ChatGPTGET https://chatgpt.com/backend-api/wham/usageBearer {oauth_token}18000sfive_hour, 604800sseven_dayOAuth-based
GeminiPOST https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist + POST https://cloudcode-pa.googleapis.com/v1internal:retrieveUserQuotaBearer {access_token}gemini_pro, gemini_flash, gemini_flash_liteTwo-step: get project ID first, then quota
KimiGET https://api.kimi.com/coding/v1/usagesBearer {api_key}five_hour, weekly_limitFrom limits[].detail and usage
GLM/智谱GET https://api.z.ai/api/monitor/usage/quota/limit{api_key} (no Bearer)five_hour, weekly_limitFrom limits[].TOKENS_LIMIT.percentage, sorted by nextResetTime
MiniMax CNGET https://api.minimaxi.com/v1/api/openplatform/coding_plan/remainsBearer {api_key}five_hour, weekly_limitFrom model_remains[0]
MiniMax ENGET https://api.minimax.io/v1/api/openplatform/coding_plan/remainsBearer {api_key}five_hour, weekly_limitSame response format as CN

Response Formats

DeepSeek Balance Response

{
  "is_available": true,
  "balance_infos": [
    { "currency": "CNY", "total_balance": "100.00", "granted_balance": "50.00", "topped_up_balance": "50.00" }
  ]
}

GLM Coding Plan Response

{
  "code": 200,
  "success": true,
  "data": {
    "limits": [
      { "type": "TIME_LIMIT", "remaining": 928, "usage": 1000, "currentValue": 72 },
      { "type": "TOKENS_LIMIT", "percentage": 44, "nextResetTime": 174... }
    ],
    "level": "pro"
  }
}

Kimi Coding Plan Response

{
  "limits": [
    { "detail": { "limit": 1000, "remaining": 500, "resetTime": "2026-05-24T12:00:00Z" } }
  ],
  "usage": { "limit": 5000, "remaining": 3000, "resetTime": "2026-05-30T00:00:00Z" }
}

MiniMax Coding Plan Response

{
  "base_resp": { "status_code": 0, "status_msg": "success" },
  "model_remains": [{
    "model_name": "general",
    "current_interval_remaining_percent": 72.5,
    "current_weekly_remaining_percent": 85.0,
    "end_time": 174...,
    "weekly_end_time": 174...,
    "remains_time": 3600000,
    "weekly_remains_time": 86400000
  }]
}

Tier Naming Convention

Tier NameTime WindowDescription
five_hour5 hoursShort-term usage window
seven_day7 daysWeekly usage window
weekly_limit7 daysAlternative weekly tier name
gemini_pro-Gemini Pro model quota
gemini_flash-Gemini Flash model quota
gemini_flash_lite-Gemini Flash Lite model quota

UsageData Structure (for Balance APIs)

struct UsageData {
    plan_name: Option<String>,      // Display name (e.g., "CNY", "USD")
    remaining: Option<f64>,         // Remaining balance/credits
    total: Option<f64>,             // Total allowance (if available)
    used: Option<f64>,              // Used amount (if available)
    unit: Option<String>,           // Currency unit
    is_valid: Option<bool>,        // Validity flag
    invalid_message: Option<String>, // Error message if invalid
    extra: Option<serde_json::Value> // Additional data
}

Provider Detection Patterns

Balance Providers

DeepSeek      → contains("api.deepseek.com")
StepFun      → contains("api.stepfun.ai") || contains("api.stepfun.com")
SiliconFlow CN → contains("api.siliconflow.cn")
SiliconFlow EN → contains("api.siliconflow.com")
OpenRouter   → contains("openrouter.ai")
NovitaAI     → contains("api.novita.ai")

Coding Plan Providers

Kimi         → contains("api.kimi.com/coding")
GLM CN       → contains("open.bigmodel.cn") || contains("bigmodel.cn")
GLM EN       → contains("api.z.ai")
MiniMax CN   → contains("api.minimaxi.com")
MiniMax EN   → contains("api.minimax.io")

Notes

  1. Auth Header Variations:

    • Most platforms use Authorization: Bearer {api_key}
    • GLM uses Authorization: {api_key} (no Bearer prefix)
  2. Token Refresh:

    • Gemini access tokens expire in ~1 hour, require refresh using refresh_token
    • Claude/Codex tokens stored in macOS Keychain
  3. Unit Conversions:

    • Novita AI: amounts are in 0.0001 USD units, divide by 10000 to get USD
  4. Time Format:

    • Timestamps may be in seconds or milliseconds (milliseconds > 1e12)
    • ISO 8601 format used for reset times