// control_key
required to talk to /admin and /v1
Paste your CODEX_GATEWAY_API_KEY below. It's stored only in this browser's
localStorage and used as the Authorization: Bearer header on
every request the UI makes.
api_key
[not set]
// auth_codex
channel #1 · oauth · codex quotaSet the control key above to enable this panel.
// auth_chatgpt_web
channel #2 · session cookies · separate quotaSet the control key above to enable this panel.
// endpoint
point clients here
base_url
https://gpt.intag.xyz/v1
api_key
use the control_key you set above
openai python sdk
from openai import OpenAI
client = OpenAI(
base_url="https://gpt.intag.xyz/v1",
api_key="<your-gateway-key>",
)
# Channel #1 — Codex OAuth
resp = client.chat.completions.create(
model="gpt-5.2-codex-high",
messages=[{"role": "user", "content": "refactor this..."}],
stream=True,
)
# Channel #2 — ChatGPT.com web session (same client, different model prefix)
resp = client.chat.completions.create(
model="web/gpt-5",
messages=[{"role": "user", "content": "draft a release note..."}],
stream=True,
)
for chunk in resp:
print(chunk.choices[0].delta.content or "", end="")
openai node sdk
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://gpt.intag.xyz/v1",
apiKey: "<your-gateway-key>",
});
const stream = await client.chat.completions.create({
model: "gpt-5.2-codex-high",
messages: [{ role: "user", content: "refactor this..." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}
curl
curl https://gpt.intag.xyz/v1/chat/completions \
-H "Authorization: Bearer <your-gateway-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.2-codex-medium",
"messages": [{"role":"user","content":"hi"}]
}'
// usage
Set the control key above to load usage.
// models
24 codex · 8 webClick a model name to copy. openai/ prefix is also accepted.
GPT-5.2 5
-
gpt-5.2default -
gpt-5.2-minimalminimal -
gpt-5.2-lowlow -
gpt-5.2-mediummedium -
gpt-5.2-highhigh
GPT-5.2 Codex 4
-
gpt-5.2-codexdefault -
gpt-5.2-codex-lowlow -
gpt-5.2-codex-mediummedium -
gpt-5.2-codex-highhigh
GPT-5.1 5
-
gpt-5.1default -
gpt-5.1-minimalminimal -
gpt-5.1-lowlow -
gpt-5.1-mediummedium -
gpt-5.1-highhigh
GPT-5.1 Codex 4
-
gpt-5.1-codexdefault -
gpt-5.1-codex-lowlow -
gpt-5.1-codex-mediummedium -
gpt-5.1-codex-highhigh
GPT-5.1 Codex Max 4
-
gpt-5.1-codex-maxdefault -
gpt-5.1-codex-max-lowlow -
gpt-5.1-codex-max-mediummedium -
gpt-5.1-codex-max-highhigh
GPT-5.1 Codex Mini 2
-
gpt-5.1-codex-mini-mediummedium -
gpt-5.1-codex-mini-highhigh
web/auto
Auto
web/gpt-5
GPT-5
web/gpt-5-thinking
GPT-5 Thinking
web/gpt-5-instant
GPT-5 Instant
web/gpt-5-pro
GPT-5 Pro
web/gpt-4o
GPT-4o
web/o3
o3
web/o4-mini
o4-mini
The web model list refreshes from chatgpt.com once you authenticate channel #2. Hit to re-fetch.
// settings
read-only, configured via .env
public_url
https://gpt.intag.xyz
originator
codex_cli_rs
default_reasoning
medium
client_id
app_EMoamEEZ73f0CkXaXp7hrann
web_impersonate
chrome124
web_delete_after
True
To change any of these, edit .env and restart the container:
docker compose restart gateway