빠른 시작
키를 발급받고 첫 요청을 보내기까지 5분
MyIP OpenRouter 는 OpenAI 호환 게이트웨이입니다. 이미 OpenAI Chat Completions API 를 쓰고 있다면 base URL 과 API 키만 바꾸면 그대로 동작합니다. 요금은 원화(KRW) 로 계산·청구하고, 우리 GPU 에 올라와 있는 모델이 외부 provider 보다 먼저 시도됩니다.
이 문서는 계정 생성부터 첫 요청, 스트리밍, 그리고 방금 쓴 금액을 확인하는 것까지를 다룹니다.
1. 계정 만들기
openrouter.myip.co.kr 에서 네이버 또는 구글로 로그인합니다. 신규 가입 시 1,000원 보너스 크레딧이 지급되며, 로컬 모델 기준 수만 토큰을 쓸 수 있는 금액이라 충전 없이 이 문서를 끝까지 따라 할 수 있습니다.
1 크레딧 = 1 원입니다. 충전(최소 10,000원)은 크레딧과 결제 를 보세요.
2. API 키 발급
설정 → API 키(/settings/keys) 에서 키를 만듭니다. 추론용 키는 다음과 같은 모양입니다.
sk-mo-v1-2f9c…평문 키는 발급 시 딱 한 번만 보여줍니다. 서버에는 SHA-256 해시만 남기므로 잃어버리면 새로 발급하는 수밖에 없습니다. 저장소나 브라우저 코드에 넣지 마세요.
export MYIP_API_KEY="sk-mo-v1-..."3. 첫 요청 보내기
base URL 은 https://openrouter.myip.co.kr/api/v1 입니다. 아래 예제는 기본 모델인 google/gemma-4-26b-a4b 를 씁니다 — 우리 GPU 에서 직접 돌아가고 툴 콜링도 지원합니다.
curl https://openrouter.myip.co.kr/api/v1/chat/completions \
-H "Authorization: Bearer $MYIP_API_KEY" \
-H "Content-Type: application/json" \
-H "HTTP-Referer: https://example.com" \
-H "X-Title: My App" \
-d '{
"model": "google/gemma-4-26b-a4b",
"messages": [
{ "role": "user", "content": "한국의 수도는 어디인가요?" }
]
}'HTTP-Referer 와 X-Title 은 선택입니다. 사용 기록과 랭킹에서 앱을 식별하는 데 쓰이며, 헤더 이름은 기존 OpenAI 호환 생태계와 같은 것을 의도적으로 유지했습니다. 앱 표기 를 보세요.
4. 응답 읽기
응답 본문은 표준 Chat Completions 형상이고, usage 에 이번 요청의 비용이 붙습니다.
{
"id": "gen-01JD8Q2K7M4X9N",
"object": "chat.completion",
"created": 1788412800,
"model": "google/gemma-4-26b-a4b",
"provider": "MyIP Local GPU",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "대한민국의 수도는 서울입니다." },
"finish_reason": "stop",
"native_finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 12,
"total_tokens": 30,
"cost": 0.002340,
"cost_details": { "upstream_inference_cost": 0.000474 }
}
}금액을 뜻하는 숫자는 전부 원화입니다. 응답 헤더가 이를 명시합니다.
| 헤더 | 의미 |
|---|---|
X-MyIP-Currency | 항상 KRW. 모든 /api/v1 응답에 붙습니다 |
X-MyIP-Generation-Id | gen-…. GET /api/v1/generation?id= 에 그대로 넣습니다 |
X-MyIP-Request-Id | 요청 식별자. 문제를 문의할 때 알려 주세요 |
X-MyIP-Model | 실제로 응답한 모델 |
X-MyIP-Provider | 실제로 응답한 provider |
X-MyIP-Cost-KRW | 이번 요청의 비용. 비스트리밍 응답에만 |
X-MyIP-Credit-Balance | 정산 후 잔액. 비스트리밍 응답에만 |
X-MyIP-Model 은 중요합니다. 모델 체인을 넘겼다면 실제로 과금된 모델이 여기 적힙니다.
5. 스트리밍
"stream": true 만 붙이면 됩니다. SSE 로 토큰이 오고, 마지막 usage 이벤트에 비용이 실립니다.
curl -N https://openrouter.myip.co.kr/api/v1/chat/completions \
-H "Authorization: Bearer $MYIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "lgai/exaone-4.0-32b",
"stream": true,
"messages": [{ "role": "user", "content": "짧은 자기소개를 써 줘." }]
}'스트리밍 응답에는 X-MyIP-Cost-KRW 가 붙지 않습니다. 헤더를 쓰는 시점에는 비용을 알 수 없기 때문입니다. usage 이벤트를 읽거나 GET /api/v1/generation?id=<generation id> 로 확인하세요. 자세한 내용은 스트리밍 에 있습니다.
6. 얼마 썼는지 확인하기
curl "https://openrouter.myip.co.kr/api/v1/generation?id=gen-01JD8Q2K7M4X9N" \
-H "Authorization: Bearer $MYIP_API_KEY"여기서 돌려주는 total_cost 는 크레딧에서 실제로 차감된 금액 그 자체입니다 — 조회 시점에 다시 계산한 추정치가 아닙니다. 누적 금액은 GET /api/v1/credits 로 볼 수 있습니다.
만들기 전에 알아 둘 것
- 로컬 모델은 깨어나야 할 때가 있습니다. GPU 에 모든 모델이 동시에 상주하지는 않습니다. 잠들어 있던 모델에 대한 첫 요청은 기다릴 수 있고, 기다림이 예산을 넘으면 다음 후보로 넘어가거나
Retry-After헤더와 함께503 model_loading이 돌아옵니다. 로컬 GPU 모델 을 보세요. - 실패한 요청은 과금하지 않습니다. 어떤 후보도 응답하지 못했다면 차감이 없습니다.
- 오류 형식은 언제나 같습니다.
{"error":{"code":<int>,"message":"…","metadata":{"error_type":"…"}}}이고 HTTP 상태는error.code와 같습니다. 전체 표는 오류와 디버깅 에 있습니다. - 호환 범위는 부분집합입니다. 임베딩·이미지·오디오·Responses API·Batch 는 없습니다. 미구현 경로는 조용한 404 대신
metadata.path를 담은404 not_supported를 돌려줍니다 — 지원하지 않는 엔드포인트 를 보세요.
다음 단계
- 모델 카탈로그 — 무엇이 있고 어떻게 검색하는가
- 로컬 GPU 모델 — 콜드스타트와 예산, 그리고 우리 서비스의 차별점
- 모델 폴백 —
models[]로 후보 체인 정하기 - 툴 콜링 — 모델이 함수를 호출하게 하기
- OpenAI SDK — 한 줄로 끝나는 이관
마지막 수정 2026. 9. 5.