GPT Realtime API 요금: 말하기가 듣기보다 4배 비싸다 (실측)
목차
OpenAI Realtime API로 음성 대화를 하면 사용자가 말하는 동안 분당 $0.0192, 모델이 응답하는 동안 분당 $0.0768이 든다. 말하기 비용은 듣기의 정확히 4배다. 음성 세션 요금 대부분은 이 비율로 설명할 수 있다. 수치를 보기 전에 명칭부터 정리하자. “GPT Live”는 ChatGPT의 일반 사용자용 기능이며 API가 없다. 해당 기능을 구현하는 API 제품은 gpt-realtime-2.1과 gpt-realtime-2.1-mini이며, 이 글에서는 두 모델을 측정했다.
TL;DR
- gpt-realtime-2.1은 사용자 음성 100 ms마다 정확히 1 audio token, 모델 음성 50 ms마다 1 audio token을 청구한다. 듣기는 분당 $0.0192, 말하기는 분당 $0.0768이다.
- 서버 VAD를 사용했을 때 60초의 무음에는 input token이 전혀 청구되지 않았다.
- 자동 캐시는 30번째 turn에서 input의 93%를 처리했다. history item 하나를 삭제하자 한 turn 동안 정상가 input이 3배로 늘었다.
- 긴 음성 응답을 2초 만에 취소했지만 audio 4초분이 청구됐다.
- gpt-realtime-2.1-mini의 과금 방식은 동일하며 audio 가격은 3.2배 저렴하다.
여기 나온 모든 수치는 2026-07-19에 두 모델을 대상으로 실행한 WebSocket 세션에서 측정했다. 모든 서버 event를 기록했다. 두 모델은 Synthorai gateway의 /v1/realtime endpoint에서 제공되며, 측정도 이 endpoint에서 진행했다. protocol과 과금 방식은 OpenAI에 직접 연결할 때와 같다. 측정 harness는 표준 라이브러리만 사용하는 단일 Python 파일이며, 아래의 모든 수치는 원본 response.done usage record로 확인할 수 있다.
Realtime API에는 어떻게 연결하나?
Realtime은 text API와 달리 HTTP request/response 방식이 아니다. 세션마다 WebSocket 하나를 열고 JSON event를 주고받는다. client는 microphone audio를 streaming하고, server는 음성 응답을 streaming한다. 하나의 connection이 전체 대화를 처리한다.
import websocket, json
ws = websocket.create_connection(
"wss://synthorai.io/v1/realtime?model=gpt-realtime-2.1",
header=["Authorization: Bearer sk-..."])
ws.send(json.dumps({"type": "session.update", "session": {
"type": "realtime", "output_modalities": ["audio"],
"audio": {"input": {"format": {"type": "audio/pcm", "rate": 24000}}}}}))
# stream mic audio as base64 chunks: {"type": "input_audio_buffer.append", ...}
# then either let server VAD end the turn, or commit and ask for an answer:
ws.send(json.dumps({"type": "response.create"}))
# read events until "response.done": billing usage rides on that event
과금에 영향을 주는 세션 lifecycle은 다음과 같다. session.update에서 instruction, voice, tool, turn detection을 설정하며, 이 부분이 캐시 가능한 prefix가 된다. input_audio_buffer.append / commit은 사용자 audio를 추가하고, response.create는 응답 생성을 시작한다. 각 response.done에는 해당 응답의 전체 usage 내역이 포함된다. API 버전에 따른 차이도 있다. GA API는 output_modalities와 중첩된 audio.input/audio.output 설정을 사용한다. beta 시절의 response.modalities field를 보내면 unknown_parameter로 거부된다.
GPT Realtime의 분당 비용은 얼마인가?
공식 환산 비율은 token 단위까지 정확히 일치했다. 30.0초 clip에는 input audio token 300개가 청구됐다. 100 ms당 1개다. 4.5초 음성 응답에는 output audio token 90개가 청구됐다. 50 ms당 1개다. token당 가격을 분당으로 환산하면 다음과 같다.
| 구분 | gpt-realtime-2.1 | gpt-realtime-2.1-mini |
|---|---|---|
| 듣기 (사용자 audio input, 정상가) | $0.0192/min | $0.0060/min |
| 말하기 (모델 audio output) | $0.0768/min | $0.0240/min |
| 듣기, 캐시 재사용 | $0.00024/min (1/80) | $0.00018/min |
| 음성 인식 추가 기능 (선택 사항) | +$0.017/min | +$0.017/min |
표에 나오지 않은 비용이 두 가지 있다. 먼저 음성 응답에는 text output도 함께 청구된다. transcript와 reasoning token이 포함된다. gpt-realtime-2.1은 reasoning을 수행하며, 모든 실행에서 output_token_details.reasoning_tokens가 0보다 크게 나왔다. 짧은 테스트 응답에서는 $24/M의 text 요금이 적용되어 audio token 비용보다 약 24%가 추가됐다.
음성 인식 추가 기능은 별도 항목으로 과금된다. usage record는 {"type": "duration", "seconds": 30} 형태다. token과 무관하게 분당 $0.017의 duration 기준으로 청구되며, transcript는 모델 input에 들어가지 않는다. 이 설정 하나를 켜면 input 측 비용이 2.1에서는 약 2배, mini에서는 약 4배로 늘어난다. compliance나 제품 요구 사항상 text가 반드시 필요할 때만 켜는 편이 좋다.
무음, 끼어들기, tool 호출에도 비용이 드나?
무음은 무료다. 서버 VAD를 활성화한 세션에 60초간 무음을 streaming한 뒤 질문을 보냈다. usage는 audio를 전혀 보내지 않은 control session과 byte 단위까지 같았다. VAD는 음성으로 감지한 audio만 commit한다. 따라서 대기 음악이 흐르거나, 고객이 서식을 읽거나, 연결만 열린 유휴 상태에서는 input token이 청구되지 않는다. 다만 실제 background noise가 VAD를 작동시킬 수 있다. 완전한 무음은 최저 비용 기준일 뿐, 소음이 있는 통화에서 무료를 보장하지는 않는다.
끼어들기가 발생하면 사용자가 실제로 들은 지점이 아니라 생성이 진행된 지점까지 청구된다. 아직 생성되지 않은 나머지 구간은 청구되지 않는다. 40까지 천천히 세는 음성 응답을 요청한 뒤 2.0초를 듣고 취소했다. 청구량은 audio token 81개, 즉 4.0초분이었다. response.cancel이 도착하기 전에 생성이 재생보다 2초 앞서 진행된 것이다. mini에서는 같은 실험에 6.3초분이 청구됐다. 작은 모델이 실시간 재생보다 더 멀리 앞서 생성하기 때문이다. client가 barge-in을 감지하는 즉시 response.cancel을 보내야 한다. cancel이 도착할 때까지 과금이 계속된다.
Tool 호출 자체는 비용에 영향을 주지 않는다. function definition 하나를 등록한 세션에서 호출을 생성하고 결과를 넣었다. 바로 다음 응답의 input 중 99%가 캐시 요금으로 청구됐다. function-call item과 그 output은 다른 history처럼 캐시되며, tool definition은 2번째 turn부터 캐시되는 정적 prefix에 포함된다.
긴 세션에서도 캐시 덕분에 비용을 줄일 수 있는 이유
Realtime API는 응답을 생성할 때마다 전체 대화를 input으로 다시 읽는다. 따라서 turn별 input은 세션 길이에 비례해 증가한다. 비용을 낮춰 주는 것은 자동 prefix caching이다. 캐시된 audio의 재사용 가격은 $32/M이 아니라 $0.40/M으로, 정상가의 1/80이다. 30-turn 세션에서는 캐시 비율이 꾸준히 올라 30번째 turn에 input의 93%에 도달했다.

캐시 여부는 각 response.done에 다음과 같이 표시된다.
"usage": {
"input_tokens": 891,
"input_token_details": {
"text_tokens": 891, "audio_tokens": 0,
"cached_tokens": 832,
"cached_tokens_details": { "text_tokens": 832, "audio_tokens": 0 }
}
}
공식 문서에 나오지 않은 특성 세 가지도 측정했다. 캐시는 약 128-token prefix부터 적용된다. text API의 문서상 최소치는 1,024다. 캐시는 64-token block 단위로 늘어난다. 같은 key를 쓰면 정적 prefix를 세션 간에도 재사용할 수 있다. 마지막 특성은 60분 세션 제한 때문에 중요하다. 새 세션의 첫 turn부터 instruction에 캐시 요금이 적용됐다. 따라서 세션을 교체할 때 정상가로 다시 읽는 부분은 대화 history뿐이며, system prompt는 계속 캐시된다.
history를 수정하면 할인이 사라진다. 정확한 비용도 측정했다. 세션 중간에 초기 item 하나를 삭제하자 캐시 비율은 정확히 한 turn 동안 급락한 뒤 다시 복구됐다.
| Turn | Input | 캐시 | 정상가 |
|---|---|---|---|
| 8 (삭제 전) | 319 | 256 | 63 |
| 9 (첫 사용자 item 삭제) | 326 | 128 | 198 |
| 10 | 352 | 320 | 32 |
비용을 줄여 주는 특성이 하나 더 있다. 모델이 생성한 음성 응답은 이후 input에 audio가 아니라 text로 다시 들어간다. 8-turn 음성 대화에서 input audio는 turn마다 사용자 clip 크기만큼 정확히 늘었다. assistant 측 응답은 $4/M이 적용되는 transcript token으로 다시 들어갔다. 누적 비용에서 비싼 부분은 사용자 audio뿐이다.
운영 원칙은 간단하다. history는 append-only로 유지한다. 세션 전체와 세션 간에 instruction과 tool definition을 byte 단위까지 동일하게 유지한다. 동적인 내용은 prefix가 아니라 최신 user message에 넣는다. history를 줄여야 한다면 매 turn마다 조금씩 삭제하지 말고, 드물게 한 번에 많이 삭제한다. provider 전반의 동작 방식은 prompt caching 가이드와 실측한 캐시 최소치에서 확인할 수 있다.
gpt-realtime-2.1과 mini 중 무엇을 선택해야 하나?
두 모델의 과금 방식은 동일하다. 환산 비율, 64-token 캐시 양자화, 비용 곡선 형태가 같다. 가격과 동작에는 차이가 있다.
| gpt-realtime-2.1 | gpt-realtime-2.1-mini | |
|---|---|---|
| Audio input / output (1M token당) | $32 / $64 | $10 / $20 (3.2배 저렴) |
| Text input / output | $4 / $24 | $0.60 / $2.40 (6.7배 저렴) |
| 캐시된 audio | $0.40 (1/80) | $0.30 (1/33) |
| Text turn latency (실측) | 0.5-0.9 s | 0.5-0.6 s |
| 동일한 prompt에서의 응답 길이 | 기준 | output token이 일관되게 더 많음 |
| Barge-in 초과 생성량 (2 s 재생) | 4.0 s 청구 | 6.3 s 청구 |
두 가지를 눈여겨볼 만하다. 캐시 재사용 구간에서는 가격 차이가 $0.40과 $0.30으로 크게 줄어든다. 따라서 캐시 비율이 높은 긴 세션에서는 mini의 이점이 조금 줄어든다. 그래도 전체 비용은 신규 token이 좌우한다. mini의 속도는 끼어들기 상황에서 오히려 불리하다. 재생보다 더 앞서 생성하기 때문에 barge-in이 발생할 때마다 폐기되는 audio가 약 2배 많다. 그래도 비용은 측정한 모든 시나리오에서 mini가 더 저렴했다. 3.2배의 가격 차이가 두 효과를 모두 상쇄한다.
짧은 명령을 처리하는 assistant, IVR, 동시 접속량이 많은 고객 지원에는 기본적으로 mini를 선택하면 된다. 복잡한 tool orchestration이나 여러 단계의 reasoning이 필요한 세션에는 2.1이 적합하다. OpenAI는 2.1을 instruction following용 flagship 모델로 소개한다. 이 글의 비용 측정 harness에서는 그 품질을 평가하지 않았다.
일반적인 음성 시나리오의 실제 비용은 얼마인가?
| 시나리오 | 주요 비용 | 측정 결과 |
|---|---|---|
| 음성 채팅, companion | 말하기 구간 + 누적 history | history를 append-only로 유지한다. 60분마다 세션을 교체하면 history는 한 번 정상가로 다시 읽지만 prompt는 캐시된 상태로 유지된다 |
| 실시간 번역 | 말하기 시간 ≈ 듣기 시간 | 전용 gpt-realtime-translate SKU는 분당 $0.034의 고정 요금이다. 2.1로 번역을 구현하면 정가 기준으로 약 3배가 든다 |
| Call center | 통화 중 무음 비율 | 무음은 무료이므로 조용한 시간의 비용은 ≈$0이다. compliance용 음성 인식은 각 통화 방향에 $0.017/min이 추가되며 별도 예산 항목이 필요하다 |
| Device assistant | 연결 설정 + 첫 turn | 연결을 유지하는 편이 재연결보다 낫다. idle 상태는 무료이며, 세션 설정에 사용자가 체감하는 지연이 약 2.5 s 발생했다 |
| Tool을 사용하는 음성 agent | Tool round trip | Tool 호출 후에도 캐시는 유지된다. 다음 turn에서 99%가 캐시됐다. definition은 정적으로 유지해야 한다 |
| 회의록 | Realtime에 적합하지 않음 | duration 기준으로 과금되는 음성 인식과 text model을 함께 쓰면 누적 비용과 60분 제한을 모두 피할 수 있다 |
끼어들기가 잦은 시나리오에서는 상호작용당 비용을 계산할 때 barge-in 초과 생성량을 더해야 한다. 끼어들기 한 번마다 사용자가 들은 audio와 생성이 앞서 진행된 몇 초분이 함께 청구된다.
FAQ
GPT Live와 GPT Realtime API는 같은 것인가?
아니다. GPT Live는 ChatGPT app에 포함된 음성 기능이며 별도의 API나 요금 페이지가 없다. 같은 경험을 programmatically 구현하려는 개발자는 Realtime API 모델인 gpt-realtime-2.1과 gpt-realtime-2.1-mini를 사용한다. 이 글에서 측정한 것도 두 모델의 가격이다.
Realtime 세션은 얼마나 오래 유지할 수 있나?
최대 60분이며, 종료된 세션은 재개할 수 없다. text history는 새 세션에 다시 넣을 수 있다. 이때 한 번 정상가로 청구되지만 정적 prompt는 캐시 상태를 유지한다. assistant audio는 다시 재생할 수 없다. 따라서 장시간 동작하는 음성 제품은 60분이 되기 전에 세션을 교체할 계획이 필요하다.
Turn 사이에 idle timeout이 있나?
문서에 명시된 idle timeout은 없다. 측정 결과 서버 VAD를 사용할 때 무음에는 token이 전혀 청구되지 않았다. 상호작용 사이에 연결을 열어 두어도 connection 자체 외에는 비용이 들지 않는다. 사용 빈도가 낮은 제품에서는 상호작용마다 재연결하는 것보다 하나의 긴 세션을 유지하는 편이 더 저렴하고 빠르다. 세션 설정에 약 2.5초가 걸렸기 때문이다.
API는 어떤 audio format을 요구하나?
input과 output 모두 기본값은 24 kHz mono PCM16이다. session.update의 audio.input.format과 audio.output.format에서 설정한다. 과금은 format과 무관하다. audio token은 duration으로만 결정되며, input은 100 ms당 1 token, output은 50 ms당 1 token이다.
60분 제한에 대응하는 engineering pattern에는 세션 교체, history 전달, 재연결 후 유지되는 정보가 있다. 이 주제는 별도로 다뤄야 하며, 이 글에서 측정한 수치가 해당 비용 계산의 입력값이 된다. text API에서 모델 계열별 과금 token이 어떻게 구성되는지는 함께 작성한 token usage 구성 분석에서 확인할 수 있다.