← Blog

Codex 연결 가이드

August 12, 2026

0. 한 줄 결론

플랫폼은 OpenAI Responses API 엔드포인트 POST /v1/responses를 구현했으며, 구현 시 명확히 Codex 요구에 맞게 설계되었습니다(스트리밍 SSE 이벤트 시퀀스, function 도구 호출, store:false 무상태 호환). 따라서 Codex CLI에는 두 가지 연결 방법이 있습니다:

  1. 직접 연결(권장): ~/.codex/config.tomlwire_api = "responses"를 설정하고, 직접 /v1/responses를 사용합니다;
  2. cc-switch: 그래픽 도구로 한 번의 클릭으로 Codex / Claude Code 등의 provider를 전환합니다.

두 방식의 과금은 완전히 동일합니다(동일한 사전 차감 → 라우팅 → 정산 → 원장 파이프라인).


1. 사전 조건

항목 요구사항
Codex CLI 설치 완료(v0.142.4+ 권장, codex --version 확인 가능)
RouteAll 계정 가입 완료, Console → API Keys에서 API Key 생성
API Key 접두사 sk-ra-, 한 번만 표시되며, 복사 시 완전해야 함; 하나의 키로 모든 모델과 엔드포인트 사용 가능
잔액 충전 완료(토큰 단위 과금; 잔액 부족 시 402 반환)
모델명 플랫폼의 정식 모델명(§5.1 조회 참고, /v1/models 실제 반환값 기준)

2. 플랫폼 측 기능 및 한계(/v1/responses)

  • 엔드포인트: POST https://routeall.ai/v1/responses
  • 인증: Authorization: Bearer sk-ra-...

2.1 지원 기능(Codex 호환)

기능 설명
텍스트 입력 / 출력 비스트리밍 JSON + 스트리밍 SSE 모두 지원
function 도구 호출 Codex 에이전트 루프: tools 업스트림 전달 + function_call 스트리밍 이벤트 + function_call_output 입력 재주입
스트리밍 완전한 Responses SSE 이벤트 시퀀스 생성: response.createdoutput_item.addedoutput_text.deltaoutput_item.doneresponse.completed(Codex에 필요한 세 가지 불변 조건 충족)
reasoning.effort reasoning_effort로 전달
알 수 없는 필드 관대성 store / include / text / metadata 등 모두 무시, 400 오류 발생 안 함(Codex 호환)

2.2 한계(무상태 텍스트 서브셋)

필드 동작
previous_response_id 무시 —— 무상태; Codex는 store:false로 매 턴 전체 input을 전송하므로 자연스럽게 호환
input_image 건너뜀(이미지 part는 요청을 중단하지 않고 텍스트만 추출)
내장 도구(web_search 등) 무시 —— type: "function" 도구만 전달
stream: true + 비정상 input 400(Responses 오류 봉투)

2.3 과금 및 오류

  • 과금: /v1/chat/completions완전히 동일한 파이프라인, 실제 charge는 동등; 응답 헤더 X-RouteAll-Charge-Credit는 소매 과금액(원가 아님).
  • 오류 봉투: { "error": { "message", "type", "code", "param" } }; HTTP 상태: 401(키 없음/잘못됨), 402(잔액 부족), 429(속도 제한), 400(매개변수 오류), 503(업스트림 전체 불가).

3. 방법 1: Codex CLI 직접 연결(Responses API, 권장)

3.1 ~/.codex/config.toml 설정

model = "deepseek-v4-pro"           # 기본 모델, 스토어의 정식 명칭으로 변경
model_provider = "routeall"

[model_providers.routeall]
name = "RouteAll"
base_url = "https://routeall.ai/v1" # 플랫폼 OpenAI 호환 base URL(/responses 제외)
env_key = "ROUTEALL_API_KEY"
wire_api = "responses"              # responses = /v1/responses 사용(권장)

3.2 환경 변수 설정

# Linux / macOS
export ROUTEALL_API_KEY="sk-ra-당신의KEY"

# Windows PowerShell
# $env:ROUTEALL_API_KEY = "sk-ra-당신의KEY"

3.3 실행

codex

3.4 임시 모델 전환

codex --model Codex-haiku-4-5 "이 모듈을 리팩토링해줘"
codex --model deepseek-v4-flash "이 정규식을 설명해줘"

3.5 wire_api 정보

wire_api 실제 엔드포인트 설명
responses POST /v1/responses 네이티브 Responses 프로토콜(Codex 기본 프로토콜), 스트리밍/도구 호출 모두 지원, 권장
chat POST /v1/chat/completions OpenAI 호환 형태; 플랫폼은 DTO(B15)를 완화하여 content:null 도구형 다중 턴 호출 지원

참고: 게이트웨이 api. 서브도메인은 현재 외부에 공개되지 않았습니다(서버 PUBLIC_API_DOMAIN=api.localhost 내부용); /v1/*은 메인 사이트 routeall.ai에서 직접 제공되므로 base_url은 https://routeall.ai/v1을 사용합니다.


4. 방법 2: cc-switch(그래픽 원클릭 전환)

cc-switch는 오픈소스 공급자 전환 도구(farion1231/cc-switch)로, Codex / Claude Code / OpenCode / Gemini 등의 provider 설정을 관리하고 클릭 한 번으로 전환할 수 있습니다.

4.1 설치

GitHub farion1231/cc-switch → Releases에서 해당 시스템 설치 패키지 다운로드(Windows / macOS / Linux).

4.2 새 공급자 추가

  1. cc-switch를 열고 Codex 탭으로 이동 → 「새 공급자 추가」;
  2. 입력:
    • 공급자 이름: RouteAll(임의)
    • API Host / Base URL: https://routeall.ai/v1
    • API Key: sk-ra-당신의KEY
    • 모델 목록: 플랫폼 정식 모델명(예: deepseek-v4-pro, Codex-haiku-4-5, 여러 줄 가능)
  3. 저장.

4.3 적용 및 전환

RouteAll 선택 → 「전환 / 활성화」. cc-switch가 provider 설정을 ~/.codex/config.toml에 기록합니다(방법 1의 설정과 동일). 이후 정상적으로 codex를 실행하면 됩니다.

참고: cc-switch 일부 버전은 Codex의 프로토콜을 /v1/chat/completions(즉 wire_api = "chat")로 변경할 수 있습니다. 플랫폼은 두 경로 모두 지원합니다(B15에서 도구형 클라이언트의 chat 400 문제 수정). 만약 프로토콜 선택이 가능한 버전이라면, Responses를 선택하는 것이 네이티브에 더 적합합니다.


5. 검증

5.1 사용 가능한 모델 목록 가져오기(목록 기준, 모델명 추측 금지)

curl https://routeall.ai/v1/models \
  -H "Authorization: Bearer sk-ra-당신의KEY"
# 또는 공개 디렉터리(인증 불필요, 채널이 있는 모델만 나열)
curl https://routeall.ai/v1/public/models

5.2 비스트리밍(연결 확인)

curl https://routeall.ai/v1/responses \
  -H "Authorization: Bearer sk-ra-당신의KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro",
    "input": "안녕, 한 문장으로 너를 소개해줘",
    "max_output_tokens": 200
  }'

성공 시 Responses 형식(output[].content[].output_text + output_text + usage)이 반환됩니다.

5.3 스트리밍(Codex 실제 형태)

curl -N https://routeall.ai/v1/responses \
  -H "Authorization: Bearer sk-ra-당신의KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro",
    "input": "짧은 농담 하나 해줘",
    "stream": true
  }'

이벤트 순서: response.createdoutput_item.addedoutput_text.delta ×N → output_item.doneresponse.completed.

5.4 도구 호출(에이전트 루프 형태)

curl https://routeall.ai/v1/responses \
  -H "Authorization: Bearer sk-ra-당신의KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-pro",
    "input": [{"role": "user", "content": "17*23을 계산해줘"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "calculator",
        "description": "사칙연산 수행",
        "parameters": {
          "type": "object",
          "properties": { "expr": { "type": "string" } }
        }
      }
    }],
    "tool_choice": "auto"
  }'

outputtype: "function_call" 항목(call_id / name / arguments)이 포함되며, 이후 function_call_output 항목을 다시 보내 결과를 주입하고 멀티 턴을 계속할 수 있습니다.


6. 문제 해결

증상 원인 및 조치
401 Unauthorized 키가 잘못되었거나 복사 누락/비활성화. 키는 sha256만 저장되며 백오피스에서 평문 확인 불가, 생성 시 반드시 완전히 복사하세요
402 Insufficient balance 잔액 부족, Console에서 충전(CNY / USD / USDT)
429 Rate limited 키당 분당 요청 제한(기본 60 RPM, 조정 가능); 동시성 낮추거나 지수 백오프 후 재시도
400 매개변수 오류 응답 본문 error.message 확인(예: Responses input 형식 오류, 모델명 부재)
503 업스트림 오류 해당 모델의 모든 채널을 사용할 수 없음, 모델 변경 또는 나중에 재시도
모델 '존재하지 않음/호출 불가' 모델명은 /v1/models 반환값의 정식 명칭이어야 하며, active + 채널이 존재해야 함; 추측하지 마세요
Codex에서 stream closed before response.completed 오류 일반적으로 네트워크 중단; 게이트웨이에서 정상 종료 처리(completed 여전히 전송), 재시도
Codex에서 413 Payload Too Large 플랫폼 요청 본문 상한 확대(Codex 긴 컨텍스트 문제 수정됨); 계속 발생하면 컨텍스트 축소

7. 과금 및 보안 안내

  • 과금 기준: 모델 공식 가격 × 사용자 그룹 배율; 스트리밍은 실제 usage 기준 정산; 캐시 적중 시 전액 청구(B12 전략, 캐시 차익은 플랫폼 귀속, 고객 charge는 변함 없음).
  • 과금 가시성: 응답 헤더 X-RouteAll-Charge-Credit(소매 금액); cost/margin은 사용자 응답에 절대 포함되지 않음(INV-8).
  • 키 보안: sk-ra-는 sha256만 저장, 백오피스에서 확인 불가; 절대 클라이언트나 저장소에 포함하지 마세요.
  • 작은 모델(curl 검증)로 먼저 연결을 확인한 후, Codex / 긴 작업으로 전환하는 것을 권장합니다.

Codex 연결 가이드 - RouteAll Responses API 설정 — RouteAll