API 비용이 절반이라도 마감 뒤에 결과가 도착하면 의미가 없다. OpenRouter Batch API는 오프라인 텍스트 처리나 임베딩 작업에는 잘 맞지만, 즉각적인 응답이 필요한 용도에는 적합하지 않다. 비동기 방식으로 동작하고 완료까지 최대 24시간이 걸릴 수 있으며, 내세우는 할인율도 청구서의 모든 항목에 똑같이 적용되지는 않는다.
결론부터: 어떤 작업에 써야 하나
라벨링, 평가, 임베딩, 적체된 문서 요약처럼 기다릴 수 있는 백그라운드 작업에는 OpenRouter Batch API를 쓰면 된다. 반대로 사용자 대상 채팅, IDE 에이전트, 웹 검색 워크플로, 멀티모달 요청은 동기식 API로 유지하는 편이 맞다.
OpenRouter는 70개가 넘는 모델에서 Batch가 일반적으로 토큰당 가격을 약 50% 낮춘다고 설명한다. 공식 완료 시간 창은 24시간이다. 출시 발표에서 OpenRouter는 베타 기간 중 중앙값 7분, 1시간 이내 완료율 90%를 보고했지만, 이는 SLA가 아니라 관측치다(공식 발표).
50% 할인에 포함되는 항목
할인은 주로 모델 토큰 가격에 적용된다. 추론 청구서의 모든 구성 요소를 일괄 반값으로 낮춰주는 것은 아니다.
| 비용 또는 제어 항목 | Batch API 적용 방식 |
|---|---|
| 입력 및 출력 토큰 | 일반 모델 가격의 약 50%가 일반적 |
| 웹 검색 호출 | 공식 퀵스타트 기준 일반 요금으로 청구 |
| 프롬프트 캐싱 | 모델별로 다르므로 모델 페이지 확인 필요 |
| BYOK 추론 | 추론 비용은 제공업체가 직접 청구하며, OpenRouter는 BYOK 수수료를 별도로 표시 |
| 정확한 적용 가격 | 개별 모델 페이지와 완료된 배치의 사용량에서 확인 |
Will Cygan의 배치 비용 분석에는 Claude Sonnet 5의 입력 1,000만 토큰과 출력 200만 토큰이 동기식에서는 $40, 배치에서는 $20으로 내려가는 사례가 나온다. 다만 이는 특정 모델 기준 계산이지, 모든 모델에 적용되는 견적은 아니다.
“배치 경로는 동기식 요금의 정확히 절반으로 청구된다.” — Will Cygan, Batching (LLM Inference)
제공업체와 모델을 확인하기 전에는 절감액을 예산에 반영하지 않는 편이 좋다. 실제 사용자 @fogelmania는 한 베타 모델의 배치 트래픽이 다른 제공업체로 라우팅되면서 동시 동기식 호출보다 비쌌다고 보고했다: @fogelmania의 게시물. 이 사례가 모든 모델이 그렇게 동작한다는 증거는 아니지만, 완료 후 실제 비용을 점검해야 한다는 경고로는 충분하다.
Batch는 빠른 엔드포인트가 아니라 작업 큐다
OpenRouter의 Batch API 발표와 퀵스타트는 즉시 완료를 받는 호출이 아니라 작업 단위의 흐름을 설명한다. 정상적으로 제출하면 HTTP 202 Accepted와 함께 상태가 validating인 배치 ID를 받는다. 일반적인 상태 전이는 다음과 같다.
validating → in_progress → finalizing → completed
그 밖의 종료 상태는 failed, expired, cancelled다. 인터랙티브 요청을 계속 붙잡아 두지 말고, 워커가 배치 ID를 저장한 뒤 종료 상태가 될 때까지 폴링하도록 구성해야 한다.
OpenRouter는 베타 기간에 23만 건이 넘는 배치를 처리했고, 중앙값은 7분, 90%는 1시간 안에 완료됐다고 밝혔다. 출시 당일 @luismmolina의 사용자 테스트에서는 한 시점에 5~8분이 걸렸다고 보고됐다(테스트 게시물). 하지만 이런 관측치는 24시간이라는 계획 수립 기준을 대체하지 않는다.
재작업을 줄이는 구현 방식
현재 퀵스타트는 JSONL 파일 업로드 대신 인라인 JSON requests 배열을 사용한다. 각 행에는 고유한 custom_id가 필요하며, 이 ID로 완료된 응답이나 오류를 원본 레코드와 연결한다.
최소 요청 형태는 다음과 같다.
{
"endpoint": "/v1/chat/completions",
"model": "openai/gpt-4o",
"requests": [
{
"custom_id": "ticket-0001",
"body": {
"messages": [
{"role": "user", "content": "Classify this ticket: ..."}
]
}
}
]
}
퀵스타트에서 안내하는 제출 주소는 POST https://openrouter.ai/api/beta/batches다. 최상위 endpoint와 model은 배치 전체에 적용되므로, API 형식이나 모델이 다르면 배치를 분리해야 한다. 지원되는 형식은 Chat Completions, Responses, Anthropic Messages, Embeddings다.
제출 후에는 GET https://openrouter.ai/api/beta/batches/:id로 폴링한다. 완료된 배치는 결과를 인라인으로 반환한다. 각 결과에는 response 또는 error가 들어가며, request_counts는 전체 행, 완료 행, 실패 행을 구분해 보여준다. 실패한 행은 custom_id를 기준으로 재시도하고, 배치 전체를 자동으로 다시 실행하지는 말아야 한다.
데이터 정책, BYOK, URL 에셋 때문에 제공업체 동작이 중요하다면 최저가 제공업체 라우팅에 맡기지 말고, 문서화된 제공업체 제어 기능으로 제공업체를 고정해야 한다. 배포 전에 선택한 모델과 제공업체가 적격한 배치 경로를 제공하는지도 확인하자.
Batch가 워크플로를 막는 경우
퀵스타트의 제한 사항을 보면 Batch는 텍스트 중심 워크플로다. 배치 요청에서는 이미지, 오디오, 비디오, 파일 콘텐츠 파트를 거부한다. Base64와 data: URI 에셋도 거부되며, 지원되는 URL 에셋은 제공업체에 따라 달라진다. OpenRouter 자체 웹 검색 플러그인은 Batch에서 사용할 수 없다.
사용자가 응답을 기다리고 있거나, 모델이 로컬 업로드 파일을 확인해야 하거나, 요청에 오디오 또는 비디오가 필요하거나, 애플리케이션이 초 단위 응답 시간 목표를 요구한다면 동기식 API를 사용해야 한다.
비용 예시: 할인이 실제 이득이 되는 때
지원 티켓 10,000건을 생각해 보자. 티켓마다 입력 1,000토큰과 출력 200토큰을 사용한다면, 총 입력은 1,000만 토큰이고 출력은 200만 토큰이다.
| 방식 | 입력 | 출력 | 합계 |
|---|---|---|---|
| 동기식 예시 | 10M × $2 = $20 | 2M × $10 = $20 | $40 |
| 배치 예시 | 10M × $1 = $10 | 2M × $5 = $10 | $20 |
명목상 절감액은 실행당 $20이며, 이 예시를 매주 실행하면 연간 $1,040이다. 다만 복구, 모니터링, 긴급 동기식 폴백 비용이 이 차액보다 커지면 실질 절감액은 줄어든다.
따라서 이 여유 비용까지 판단에 넣어야 한다. 마감이 절대적이라면 24시간 창과, 범위를 줄여 재실행하거나 동기식으로 폴백할 수 있는 남은 시간을 비교하자. 토큰당 비용이 낮더라도 마감 후에는 쓸 수 없는 배치라면, 그 업무 프로세스에는 더 저렴한 선택이 아니다.
FAQ
OpenRouter Batch API는 항상 반값인가요?
아니다. OpenRouter는 할인이 일반적인 수준이며 모델에 따라 달라진다고 설명한다. 웹 검색 비용은 일반 요금으로 유지되고, 캐싱은 모델별로 다르며, BYOK에서는 제공업체 추론 비용과 OpenRouter 수수료가 분리된다.
OpenRouter 배치는 얼마나 걸리나요?
지원되는 완료 시간 창은 24시간이다. 베타 기간의 처리 시간 보고는 참고할 만하지만, 보장된 서비스 수준은 아니다.
JSONL을 업로드하거나 모델을 섞어 쓸 수 있나요?
퀵스타트는 인라인 JSON requests 배열을 받는다. 모델과 API 형식은 배치 전체에 적용되므로, 서로 다른 모델이나 엔드포인트 형식에는 별도 배치가 필요하다.
실패한 행만 재시도할 수 있나요?
가능하다. 완료된 배치가 행 단위 오류를 반환하면 각 행의 custom_id로 더 작은 재시도 배치를 구성하면 된다. 다만 배치 전체 실패, 만료, 취소는 결과를 사용할 수 없을 수 있으므로 별도로 처리해야 한다.
Batch와 동기식 API 중 무엇을 써야 하나요?
긴급하지 않은 백그라운드 작업에는 Batch를 선택한다. 결과가 진행 중인 사용자 상호작용의 일부이거나 지원하지 않는 모달리티와 도구가 필요하다면 동기식 추론을 선택한다.
실무 결론: Batch는 선별적으로 도입하자
워크로드를 옮기기 전에 다음 다섯 가지를 확인하자.
- 모델 페이지에 적격한 배치 경로와 예상한 제공업체가 표시되는지.
- 업무 프로세스가 최대 24시간의 처리 창을 감당할 수 있는지.
- 모든 행에 안정적인
custom_id와 재시도 계획이 있는지. - 애플리케이션이 실제 완료 사용량과 비용을 기록하는지.
- 입력과 결과물에 담당자와 정리 정책이 있는지.
OpenRouter의 퀵스타트에 따르면 배치 입력과 결과는 더 일찍 삭제하지 않는 한 30일간 보관된다. 산출물이 더 이상 필요 없으면 종료된 배치를 삭제하자.
첫 마이그레이션 대상으로 가장 좋은 것은 검토 가능한 고정 코퍼스다. 답변이 늦었을 때의 손실이 토큰 할인으로 아낀 비용보다 큰 고객 대면 경로는 적절한 출발점이 아니다.