Skip to content

[Bug]: account-gated native models are advertised and routed through unentitled ChatGPT accounts #2097

Description

@Ingwannu

Client or integration

Codex App

Area

Authentication and account pool

Summary

OpenCodex advertises the account-gated gpt-daybreak-blue-latest model to every ChatGPT/Codex account after #1814, even when the authenticated account's upstream model catalog does not contain that slug. In Pool mode this lets a bare Daybreak request bind to an unentitled account and relay the upstream 400:

{"detail":"The 'gpt-daybreak-blue-latest' model is not supported when using Codex with a ChatGPT account."}

The catalog and runtime should use authenticated per-account /models evidence for account-gated native models. A gated row should be visible only when at least one eligible account reports it, selector-qualified rows should exist only for selectors whose account reports it, and Pool routing should exclude accounts that do not report it.

Reproduction

  1. Configure the canonical openai Codex-forward provider in Pool mode with two valid ChatGPT accounts.
  2. Use one account whose authenticated GET /backend-api/codex/models?client_version=0.0.0 response includes gpt-daybreak-blue-latest, and one whose response does not.
  3. Run catalog sync. Observe that the bare Daybreak row and every account-selector clone are generated from the static native set instead of the per-account model rosters.
  4. Allow an unqualified Daybreak request to select the unentitled account, or select that account's qualified row.
  5. Observe the upstream 400 quoted above.

This is distinct from #1747. That draft proposes a broad user-configurable custom-model account binding across GUI, CLI, API, docs, and routing. This bug is the narrower built-in native entitlement boundary: discovery and automatic Pool routing should never offer an account-gated native model through an account that upstream says cannot use it.

Version

2.25.0 / current dev at a5ec64172

Operating system

Ubuntu 22.04 Linux

Provider and model

OpenAI ChatGPT/Codex forward provider / gpt-daybreak-blue-latest

Logs or error output

{"detail":"The 'gpt-daybreak-blue-latest' model is not supported when using Codex with a ChatGPT account."}

Screenshots and supporting files

Authenticated, redacted model-discovery comparison on the same host:

main account: gpt-5.6-sol, gpt-daybreak-blue-latest
secondary account: gpt-5.6-sol

The local usage ledger also shows successful Daybreak requests resolving to gpt-5.6-sol on the entitled account and exact unsupported-model 400s when the gated route is rejected. No tokens, account ids, emails, or request bodies are included.

Redacted configuration

{
  "providers": {
    "openai": {
      "adapter": "openai-responses",
      "baseUrl": "https://chatgpt.com/backend-api/codex",
      "authMode": "forward",
      "codexAccountMode": "pool"
    }
  },
  "codexAccounts": [
    { "id": "<redacted-secondary>", "plan": "plus" }
  ]
}

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Metadata

Metadata

Assignees

No one assigned

    Labels

    account-poolOAuth, credentials, Codex pool, quota, failover, plansbugSomething isn't workingcatalogModel catalog, slugs, visibility, routed entries

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions