Halaman ini belum diterjemahkan ke dalam Bahasa Indonesia. Menampilkan teks asli bahasa Inggris.

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:

bash
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:

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 }
  }
}

Every number that represents money is in KRW. The response headers say so explicitly:

HeaderMeaning
X-MyIP-CurrencyAlways KRW. Present on every /api/v1 response
X-MyIP-Generation-Idgen-…. Pass it to GET /api/v1/generation?id=
X-MyIP-Request-IdRequest identifier, useful when reporting a problem
X-MyIP-ModelThe model that actually answered
X-MyIP-ProviderThe provider that actually answered
X-MyIP-Cost-KRWCost of this request. Non-streaming responses only
X-MyIP-Credit-BalanceYour 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

bash
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_loading with a Retry-After header. 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 to error.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_supported with the path in metadata rather than a silent 404 — see Unsupported endpoints.

Next steps

Terakhir diperbarui 5 Sep 2026