Trang này chưa được dịch sang Tiếng Việt. Đang hiển thị bản gốc tiếng Anh.
Models
Which models we serve and where they run
A model id is always vendor/name — google/gemma-4-26b-a4b, lgai/exaone-4.0-32b. There are no variant suffixes: no :free, no :nitro, no :floor. One id means one model, and how it is served is a routing decision described in Provider routing.
Where models come from
Every model in the catalog is served by one or both of these:
| Source | What it is | Priority |
|---|---|---|
| Local GPU slots | Models we run ourselves on our own hardware with vLLM or llama.cpp | Tried first |
| External providers | Upstream APIs we forward to, configured by our operators | Tried after local |
When a model exists in both places, the local slot wins by default. That is the point of the service; see Local-first routing.
The models you can use today
These are public and available to any account:
| Model | Context | Modalities | Tool calling | Input | Output |
|---|---|---|---|---|---|
google/gemma-4-26b-a4b | 32,768 | text + image → text | Yes | ₩30 / 1M tokens | ₩150 / 1M tokens |
lgai/exaone-4.0-32b | 32,768 | text → text | No | ₩30 / 1M tokens | ₩150 / 1M tokens |
google/gemma-4-26b-a4b is the default model — it is what you get if you omit model and models entirely.
Listing models
curl https://openrouter.myip.co.kr/api/v1/modelsNo authentication required. The response is {"data":[…]}, one object per model:
{
"id": "lgai/exaone-4.0-32b",
"canonical_slug": "lgai/exaone-4.0-32b",
"name": "LG AI: EXAONE 4.0 32B",
"created": 1786000000,
"description": "EXAONE 4.0 32B (AWQ-INT4). MyIP local GPU slot.",
"context_length": 32768,
"architecture": {
"modality": "text->text",
"input_modalities": ["text"],
"output_modalities": ["text"],
"tokenizer": "Other",
"instruct_type": null
},
"pricing": {
"prompt": "0.000030000000",
"completion": "0.000150000000",
"request": "0",
"image": "0",
"web_search": "0",
"internal_reasoning": "0",
"input_cache_read": "0.000003000000",
"input_cache_write": null,
"currency": "KRW"
},
"top_provider": { "context_length": 32768, "max_completion_tokens": 32768, "is_moderated": false },
"supported_parameters": ["max_tokens", "temperature", "top_p", "top_k", "stop", "seed",
"frequency_penalty", "presence_penalty", "repetition_penalty", "logit_bias", "response_format"],
"per_request_limits": null,
"links": { "details": "/api/v1/models/lgai/exaone-4.0-32b/endpoints" }
}Reading pricing
Prices are KRW per token, encoded as strings — the same encoding the OpenAI-compatible ecosystem uses, with a different unit. "0.000030000000" means ₩30 per 1M prompt tokens.
currency is a field we added, and X-MyIP-Currency: KRW is on the response. Both exist so that a client written against a USD-denominated API cannot quietly misread the number. request, image and web_search are always "0": we do not have per-request, image, or search billing.
Reading supported_parameters
This is the list of request parameters the model advertises. It is advisory — we forward every parameter we do not consume, and the upstream decides what to do with the rest. If you need a hard guarantee, use provider: { "require_parameters": true } so that candidates missing the parameters you sent are dropped from the chain.
Note what is present and absent: response_format is there on our local models (Structured outputs), and tools/tool_choice only on models that actually support them (Tool calling).
Filtering the catalog
GET /api/v1/models accepts these query parameters:
| Parameter | Type | Effect |
|---|---|---|
q | string | Full-text search over id, name and description |
category | string | Matches a modality family |
input_modalities | csv | Model must have all of them, e.g. text,image |
output_modalities | csv | Same, for outputs |
supported_parameters | csv | Model must advertise all of them |
context | int | Minimum context length |
min_price, max_price | number | KRW per prompt token |
model_authors | csv | Matches the vendor part of the id |
providers | csv | Provider slugs that serve the model |
sort | string | price, pricing-high-to-low, context, newest, top-weekly |
offset, limit | int | Pagination |
Examples:
# Models that accept images
curl "https://openrouter.myip.co.kr/api/v1/models?input_modalities=text,image"
# Models with tool calling, cheapest first
curl "https://openrouter.myip.co.kr/api/v1/models?supported_parameters=tools,tool_choice&sort=price"
# Models served from our own GPUs
curl "https://openrouter.myip.co.kr/api/v1/models?providers=local-gpu"Related endpoints
GET /api/v1/models/count→{"data":{"total":N}}, the number of public, enabled models.GET /api/v1/models/user(Bearer, inference key) → models this key can actually call. It includes models that are not in the public list but excludes models with no working provider mapping.GET /api/v1/models/{author}/{slug}/endpoints→ every endpoint serving that model, external and local, with context, quantization, and astatusfield. Local slots appear here withtagset to the engine (vllmorllamacpp), andstatus: 0while the slot is running.GET /api/v1/providers→ the provider list, including the slugs you use inprovider.order/only/ignore.
curl https://openrouter.myip.co.kr/api/v1/models/google/gemma-4-26b-a4b/endpointsWhen a model disappears
Models can be disabled by our operators, and provider mappings can be turned off. The catalog is the truth at any moment; a request for a disabled or unknown id returns 400 model_not_found. A known id with no usable candidate left — every provider disabled, filtered out by your provider{} preferences, or in cooldown — returns 404 no_endpoints_found instead. The two are different codes because the fixes are different.
Cập nhật lần cuối 5 thg 9, 2026