Skip to main content

Connecting Codex in the ChatGPT app

Codex in alpha testing

What this means:

  • A separate API key is required: a regular Explyt Enterprise Platform key will not work; ask your organization's administrator to request a Codex key from Explyt support
  • Only OpenAI models and auto are available; Anthropic models work in Codex CLI
  • DLP does not work: the data you send is not checked
  • The connection works only inside Explyt VPC

If the task can be solved with another tool, it is better to choose it: the other connections work without these restrictions — see the list of tools.

  1. On the sign-in screen, click Sign in another way

    • Do not click Continue to sign in: this signs you in through a ChatGPT account, and requests to the gateway will be rejected
    • If you are already signed in through a ChatGPT account, sign out and sign in again
  2. Paste the API key issued to you into the OpenAI API key field and click Continue

    • If you see these instructions but do not have an API key, contact your organization's administrator
    • No OpenAI account is needed: the key is used only for requests to your gateway
  3. Open the app settings (Cmd/Ctrl + ,) → the Configuration section → click Open config.toml

  4. The file that opens already contains the app's own settings — do not delete them. Add three lines to the very beginning of the file:

    model = "auto"
    model_provider = "explyt"
    model_catalog_json = "./model-catalog.json"
  5. Add the block below to the very end of the same file:

    [model_providers.explyt]
    name = "explyt"
    base_url = "<YOUR_URL>"
    wire_api = "responses"
    requires_openai_auth = true
    • Replace <YOUR_URL> with the OpenAI-compatible URL issued to you
      • If you see these instructions but do not have an OpenAI-compatible URL, contact your organization's administrator
  6. Next to config.toml, create the file model-catalog.json with the list of Explyt models

    Download the ready-made model-catalog.json file — or copy its contents manually:

    Contents of model-catalog.json
    {
    "models": [
    {
    "slug": "auto",
    "id": "auto",
    "display_name": "Explyt Auto",
    "description": "Automatic model selection: high quality with maximum availability",
    "context_window": 372000,
    "max_output_tokens": 32768,
    "base_instructions": "default",
    "shell_type": "default",
    "visibility": "list",
    "supported_in_api": true,
    "priority": 1,
    "support_verbosity": false,
    "truncation_policy": {
    "mode": "bytes",
    "limit": 10000
    },
    "experimental_supported_tools": [],
    "supported_reasoning_levels": [
    {
    "effort": "low",
    "description": "low"
    },
    {
    "effort": "medium",
    "description": "medium"
    },
    {
    "effort": "high",
    "description": "high"
    },
    {
    "effort": "xhigh",
    "description": "xhigh"
    }
    ]
    },
    {
    "slug": "OpenAI/gpt-5.6-sol",
    "id": "OpenAI/gpt-5.6-sol",
    "display_name": "OpenAI GPT-5.6 Sol",
    "description": "The highest quality among OpenAI models",
    "context_window": 372000,
    "max_output_tokens": 32768,
    "base_instructions": "default",
    "shell_type": "default",
    "visibility": "list",
    "supported_in_api": true,
    "priority": 2,
    "support_verbosity": false,
    "truncation_policy": {
    "mode": "bytes",
    "limit": 10000
    },
    "experimental_supported_tools": [],
    "supported_reasoning_levels": [
    {
    "effort": "low",
    "description": "low"
    },
    {
    "effort": "medium",
    "description": "medium"
    },
    {
    "effort": "high",
    "description": "high"
    },
    {
    "effort": "xhigh",
    "description": "xhigh"
    }
    ]
    },
    {
    "slug": "OpenAI/gpt-5.6-terra",
    "id": "OpenAI/gpt-5.6-terra",
    "display_name": "OpenAI GPT-5.6 Terra",
    "description": "Balance of quality and speed among OpenAI models",
    "context_window": 372000,
    "max_output_tokens": 32768,
    "base_instructions": "default",
    "shell_type": "default",
    "visibility": "list",
    "supported_in_api": true,
    "priority": 3,
    "support_verbosity": false,
    "truncation_policy": {
    "mode": "bytes",
    "limit": 10000
    },
    "experimental_supported_tools": [],
    "supported_reasoning_levels": [
    {
    "effort": "low",
    "description": "low"
    },
    {
    "effort": "medium",
    "description": "medium"
    },
    {
    "effort": "high",
    "description": "high"
    },
    {
    "effort": "xhigh",
    "description": "xhigh"
    }
    ]
    },
    {
    "slug": "OpenAI/gpt-5.6-luna",
    "id": "OpenAI/gpt-5.6-luna",
    "display_name": "OpenAI GPT-5.6 Luna",
    "description": "The fastest and cheapest among OpenAI models",
    "context_window": 372000,
    "max_output_tokens": 32768,
    "base_instructions": "default",
    "shell_type": "default",
    "visibility": "list",
    "supported_in_api": true,
    "priority": 4,
    "support_verbosity": false,
    "truncation_policy": {
    "mode": "bytes",
    "limit": 10000
    },
    "experimental_supported_tools": [],
    "supported_reasoning_levels": [
    {
    "effort": "low",
    "description": "low"
    },
    {
    "effort": "medium",
    "description": "medium"
    },
    {
    "effort": "high",
    "description": "high"
    },
    {
    "effort": "xhigh",
    "description": "xhigh"
    }
    ]
    },
    {
    "slug": "OpenAI/gpt-5.5",
    "id": "OpenAI/gpt-5.5",
    "display_name": "OpenAI GPT-5.5",
    "description": "Previous-generation OpenAI model",
    "context_window": 272000,
    "max_output_tokens": 16384,
    "base_instructions": "default",
    "shell_type": "default",
    "visibility": "list",
    "supported_in_api": true,
    "priority": 5,
    "support_verbosity": false,
    "truncation_policy": {
    "mode": "bytes",
    "limit": 10000
    },
    "experimental_supported_tools": [],
    "supported_reasoning_levels": [
    {
    "effort": "low",
    "description": "low"
    },
    {
    "effort": "medium",
    "description": "medium"
    },
    {
    "effort": "high",
    "description": "high"
    },
    {
    "effort": "xhigh",
    "description": "xhigh"
    }
    ]
    }
    ]
    }

    To add a model, copy any block and put your own slug value in it.

    • The priority field sets the order in the model picker: the lower the number, the higher the model in the list
    • To get the full list of models, contact your organization's administrator or open <YOUR_URL>/models
    • If the error failed to parse model_catalog_json appears after a Codex update, add the field named in the error message to every model
  7. Fully close and reopen the app

    • The settings are read only at startup
  8. In the bottom-right corner of the input field, click the button with the model name, then the row with the model name and the › arrow in the window that appears

  9. Choose a model from the list

    • Explyt Auto – automatic model selection: high quality with maximum availability
    • OpenAI GPT-5.6 Sol – the highest quality among OpenAI models
    • OpenAI GPT-5.6 Terra – balance of quality and speed among OpenAI models
    • OpenAI GPT-5.6 Luna – the fastest and cheapest among OpenAI models
    • OpenAI GPT-5.5 – previous-generation OpenAI model
    • If there are no Explyt models in the list, Codex did not read the catalog: check that the lines from step 4 are at the beginning of the file and the lines from step 5 are at the end of the file
  10. Send any message and make sure the model responds

    • If the error 404 Not Found appears, the key is wrong or revoked: check that you signed in with the API key and not through a ChatGPT account, or contact your organization's administrator to reissue the key

For errors, see Error messages.