빠른 시작

키를 발급받고 첫 요청을 보내기까지 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 해시만 남기므로 잃어버리면 새로 발급하는 수밖에 없습니다. 저장소나 브라우저 코드에 넣지 마세요.

bash
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-RefererX-Title 은 선택입니다. 사용 기록과 랭킹에서 앱을 식별하는 데 쓰이며, 헤더 이름은 기존 OpenAI 호환 생태계와 같은 것을 의도적으로 유지했습니다. 앱 표기 를 보세요.

4. 응답 읽기

응답 본문은 표준 Chat Completions 형상이고, usage 에 이번 요청의 비용이 붙습니다.

json
{
  "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-Idgen-…. 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. 얼마 썼는지 확인하기

bash
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 를 돌려줍니다 — 지원하지 않는 엔드포인트 를 보세요.

다음 단계

마지막 수정 2026. 9. 5.