Skip to content

Latest commit

 

History

History
143 lines (120 loc) · 5.31 KB

File metadata and controls

143 lines (120 loc) · 5.31 KB
summary z.ai provider data sources: API token in config/env and quota API response parsing.
read_when
Debugging z.ai token storage or quota parsing
Updating z.ai API endpoints

z.ai provider

z.ai is API-token based. No browser cookies.

Token sources (fallback order)

  1. Config token (~/.config/codexbar/config.json or legacy ~/.codexbar/config.jsonproviders[].apiKey).
  2. Environment variable Z_AI_API_KEY.

Config location

  • New installs: ~/.config/codexbar/config.json
  • Legacy installs: ~/.codexbar/config.json
  • Override for scripts/tests: CODEXBAR_CONFIG=/path/to/config.json

Setup

Set API region to Global (api.z.ai) or BigModel CN (open.bigmodel.cn).

  • UI: Settings → Providers → z.ai. For team usage, add a token account, turn on Team mode, then enter the API key, Organization ID, and Project ID.

  • CLI personal:

    printf '%s' "$Z_AI_API_KEY" | codexbar config set-api-key --provider zai --stdin
  • CLI team:

    printf '%s' "$Z_AI_API_KEY" | codexbar config set-api-key --provider zai --stdin \
      --label Team \
      --usage-scope team \
      --organization-id org_... \
      --workspace-id proj_...
  • Check:

    codexbar config validate
    codexbar usage --provider zai --account Team

Personal config can use providers[].apiKey. Team config uses tokenAccounts:

{
  "id": "zai",
  "enabled": true,
  "region": "bigmodel-cn",
  "tokenAccounts": {
    "version": 1,
    "activeIndex": 0,
    "accounts": [
      {
        "id": "00000000-0000-0000-0000-000000000001",
        "label": "Team",
        "token": "<z.ai API key>",
        "addedAt": 0,
        "lastUsed": null,
        "usageScope": "team",
        "organizationId": "org_...",
        "workspaceID": "proj_..."
      }
    ]
  }
}

Keep organizationId and workspaceID single-line. Do not paste display names, URLs, or multiple IDs.

Finding the BigModel team IDs

For BigModel China team usage, CodexBar needs the Bigmodel-Organization and Bigmodel-Project request headers:

  1. Open the BigModel API-key page and create/copy the API key:
    • https://bigmodel.cn/usercenter/proj-mgmt/apikeys
    • Some accounts still redirect through https://open.bigmodel.cn/usercenter/apikeys.
  2. Open the team usage dashboard:
    • https://bigmodel.cn/coding-plan/team/usage-stats
  3. Select the organization/team and project to track.
  4. Open browser DevTools → Network, refresh the team usage page, and inspect the request to api/monitor/usage/quota/limit or api/monitor/usage/model-usage. Copy these request headers:
    • Bigmodel-OrganizationorganizationId
    • Bigmodel-ProjectworkspaceID

Copy each value once, on one line. Multi-line or duplicated IDs can make the API return data: {}, leaving MCP, 5-hour, and hourly usage empty.

API endpoint

  • GET https://api.z.ai/api/monitor/usage/quota/limit
  • BigModel (China mainland) host: https://open.bigmodel.cn
  • Override host via Providers → z.ai → API region or Z_AI_API_HOST=open.bigmodel.cn.
  • Override the full quota URL (e.g. coding plan endpoint) via Z_AI_QUOTA_URL=https://open.bigmodel.cn/api/coding/paas/v4.
  • Endpoint overrides must be explicit HTTPS URLs or bare hosts/paths that CodexBar normalizes to HTTPS. Explicit http:// overrides fail closed before the bearer token is attached to a request. If both z.ai overrides are set, Z_AI_QUOTA_URL has priority for quota requests; a stale lower-priority Z_AI_API_HOST is ignored for that quota path, but direct model-usage requests still validate Z_AI_API_HOST before sending bearer auth.
  • Headers:
    • authorization: Bearer <token>
    • accept: application/json

BigModel team usage

  • The default usage scope is personal. Only a token account with usageScope: team is queried as team usage.
  • Each z.ai token account can enable Team mode via UI, CLI, or config. Team accounts store:
    • usageScope: team
    • organizationId: BigModel organization id
    • workspaceID: BigModel project id
  • Team quota scope appends type=2; team hourly model usage appends type=3. Both send the BigModel selectors:
    • Bigmodel-Organization: <org id>
    • Bigmodel-Project: <project id>
  • Live API checks return success with empty limits when one of the selectors is missing, so CodexBar treats both Organization ID and Project ID as required for team usage.

Usage dashboard

  • Global: https://z.ai/manage-apikey/coding-plan/personal/my-plan
  • BigModel China: https://bigmodel.cn/coding-plan/personal/usage
  • BigModel China team: https://bigmodel.cn/coding-plan/team/usage-stats
  • CodexBar's Usage Dashboard action follows the configured API region.

Parsing + mapping

  • Response fields:
    • data.limits[] → each limit entry.
    • data.planName (or plan, plan_type, packageName) → plan label.
  • Limit types:
    • TOKENS_LIMIT → primary (tokens window).
    • TIME_LIMIT → secondary (MCP/time window) if tokens also present.
  • Window duration:
    • Unit + number → minutes/hours/days.
  • Reset:
    • nextResetTime (epoch ms) → date.
  • Usage details:
    • usageDetails[] per model (MCP usage list).

Key files

  • Sources/CodexBarCore/Providers/Zai/ZaiUsageStats.swift
  • Sources/CodexBarCore/Providers/Zai/ZaiSettingsReader.swift
  • Sources/CodexBar/ZaiTokenStore.swift (legacy migration helper)