Bu sayfa henüz Türkçe diline çevrilmedi. İngilizce özgün metin gösteriliyor.
Quickstart
From API key to first response in five minutes
MyIP OpenRouter is an OpenAI-compatible gateway. If your code already talks to the OpenAI Chat Completions API, you change one base URL and one API key and you are done. Requests are priced and billed in Korean won, and models that we host on our own GPUs are tried before any external provider.
This page takes you from an empty account to a working request, a streamed response, and a receipt you can verify.
1. Create an account
Sign in at openrouter.myip.co.kr with Naver or Google. New accounts receive a 1,000 KRW signup bonus, which is enough for tens of thousands of tokens on our local models — you can finish this page without paying anything.
One credit is one won. See Credits and payment for top-ups (minimum 10,000 KRW).
2. Create an API key
Go to Settings → API keys (/settings/keys) and create a key. Inference keys look like this:
sk-mo-v1-2f9c…The plaintext key is shown once. We store only its SHA-256 hash, so if you lose it you create a new one. Keep it out of your repository and browser code:
export MYIP_API_KEY="sk-mo-v1-..."3. Send your first request
The base URL is https://openrouter.myip.co.kr/api/v1. Everything below uses google/gemma-4-26b-a4b, our default model — it runs on our own GPU and supports tool calling.
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 and X-Title are optional. They identify your app in our usage records and rankings; the header names are deliberately the same ones the OpenRouter ecosystem already uses, so existing client code keeps working. See App attribution.
4. Read the response
The body is the standard Chat Completions shape, with the cost of the request attached to 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 }
}
}Every number that represents money is in KRW. The response headers say so explicitly:
| Header | Meaning |
|---|---|
X-MyIP-Currency | Always KRW. Present on every /api/v1 response |
X-MyIP-Generation-Id | gen-…. Pass it to GET /api/v1/generation?id= |
X-MyIP-Request-Id | Request identifier, useful when reporting a problem |
X-MyIP-Model | The model that actually answered |
X-MyIP-Provider | The provider that actually answered |
X-MyIP-Cost-KRW | Cost of this request. Non-streaming responses only |
X-MyIP-Credit-Balance | Your balance after this request. Non-streaming responses only |
X-MyIP-Model matters: if you asked for a chain of models, this is the one you were billed for.
5. Stream the response
Add "stream": true. You get server-sent events; the final usage event carries the cost.
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": "짧은 자기소개를 써 줘." }]
}'Streaming responses do not carry X-MyIP-Cost-KRW — the cost is not known when the headers are written. Read it from the usage event instead, or from GET /api/v1/generation?id=<generation id>. Details in Streaming.
6. Check what it cost
curl "https://openrouter.myip.co.kr/api/v1/generation?id=gen-01JD8Q2K7M4X9N" \
-H "Authorization: Bearer $MYIP_API_KEY"The total_cost you get back is the exact amount deducted from your credits — not an estimate recomputed at read time. GET /api/v1/credits returns your totals.
What to know before you build
- Local models may need to wake up. Models on our GPUs are not all resident at once. A first request to a cold model can wait, and if it waits too long the request either falls through to another candidate or returns
503 model_loadingwith aRetry-Afterheader. Read Local GPU models. - Failed requests are free. If no candidate answered, nothing is deducted.
- Errors always look the same.
{"error":{"code":<int>,"message":"…","metadata":{"error_type":"…"}}}, with the HTTP status equal toerror.code. The full table is in Errors and debugging. - We implement a subset of the OpenRouter surface. No embeddings, images, audio, Responses API, or Batch. Unimplemented paths return
404 not_supportedwith the path inmetadatarather than a silent 404 — see Unsupported endpoints.
Next steps
- Models — what is in the catalog and how to query it
- Local GPU models — cold starts, budgets, and what makes us different
- Model fallbacks — declaring a candidate chain with
models[] - Tool calling — letting the model call your functions
- OpenAI SDK — the one-line migration
Son güncelleme 5 Eyl 2026