Skip to main content

Connecting Codex in the ChatGPT app

OpenAI models only

The ChatGPT app works only with OpenAI models and auto. Anthropic models are available in Codex CLI.

  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

    Codex in ChatGPT: the sign-in screen

  2. Paste the API key from your personal account into the OpenAI API key field and click Continue

    • The key is in the Connect to Explyt block of your personal account, the Copy key button. Details: where to get the URL and key
    • No OpenAI account is needed: the key is used only for requests to the Explyt gateway

    Codex in ChatGPT: entering the API key

  3. Open the app settings (Cmd/Ctrl + ,) → the Configuration section → click Open config.toml

    Codex in ChatGPT: the Open config.toml button in the settings

  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 = "https://api.explyt.ai/openai/api"
    wire_api = "responses"
    requires_openai_auth = true
    • The base_url field already contains the OpenAI-compatible URL https://api.explyt.ai/openai/api
  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
    • Full list of models: https://api.explyt.ai/openai/api/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

    Codex in ChatGPT: going to the model selection

  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

    Codex in ChatGPT: the list of Explyt models

  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. If that does not help, reissue the key in your personal account (the Reissue link in the Connect to Explyt block) and paste the new one

Requests from Codex spend Explyt subscription minutes the same way as requests from the plugin. The balance is shown in your personal account.

For errors, see Error messages.