لم تُترجَم هذه الصفحة إلى العربية بعد. يتم عرض النص الإنجليزي الأصلي.

GET /models/{author}/{slug}/endpoints

The endpoints that can serve one model

Returns the endpoints — the candidates — that can actually serve one model. No authentication required.

GET https://openrouter.myip.co.kr/api/v1/models/{author}/{slug}/endpoints

{author}/{slug} is the model id split at the /. For google/gemma-4-26b-a4b the path is /api/v1/models/google/gemma-4-26b-a4b/endpoints. The links.details field of GET /models gives you exactly this path.

Path parameters

authorstringمطلوب

The part of the model id before the /, e.g. google.

slugstringمطلوب

The part after the /, e.g. gemma-4-26b-a4b.

There are no query parameters.

Request example

curl https://openrouter.myip.co.kr/api/v1/models/google/gemma-4-26b-a4b/endpoints

Response

data.idstring

The model id.

data.namestring

Model display name.

data.createdinteger

Unix seconds.

data.descriptionstring

Model description, or an empty string.

data.architectureobject

modality, input_modalities, output_modalities, tokenizer, instruct_type.

data.endpointsobject[]

The candidate list, with the fields below.

data.endpoints[].namestring

A display name of the form "<model name> | <provider name>".

data.endpoints[].provider_namestring

Provider display name — the same value that appears in the X-MyIP-Provider response header.

data.endpoints[].context_lengthinteger | null

Context this candidate accepts; falls back to the model's value.

data.endpoints[].max_prompt_tokensinteger | null

Maximum prompt tokens; equal to context_length.

data.endpoints[].max_completion_tokensinteger | null

Maximum tokens this candidate can generate.

data.endpoints[].pricingobject

Sell rates in KRW per token — the same object as pricing on /models, with currency set to "KRW".

Rates are set per model, so every candidate for a model carries the same pricing: whichever candidate answers, you are charged the same.

data.endpoints[].tagstring | null

A candidate tag. For local GPU candidates this is the inference engine (vllm, llamacpp).

data.endpoints[].quantizationstring | null

Quantization scheme, or null when unknown.

data.endpoints[].supported_parametersstring[]

Parameters this candidate accepts; falls back to the model's list.

data.endpoints[].statusinteger | null

Candidate status. For a local GPU candidate it is 0 when the slot is running and null when it is not. null does not mean unusable — an incoming request wakes the slot (see Local GPU models).

data.endpoints[].uptime_last_30mnumber | null

Uptime over the last 30 minutes, or null when unknown.

data.endpoints[].latency_last_30mnumber | null

Latency over the last 30 minutes; the value provider.sort: "latency" reads. This field is our addition and is not in openrouter's response.

data.endpoints[].throughput_last_30mnumber | null

Throughput over the last 30 minutes; the value provider.sort: "throughput" reads. Also our addition.

Response example

json
{
  "data": {
    "id": "google/gemma-4-26b-a4b",
    "name": "Google: Gemma 4 26B A4B",
    "created": 1786924800,
    "description": "Gemma 4 26B (MoE, 4B active, QAT AWQ-INT4). Default MyIP local GPU slot. Supports tool calling.",
    "architecture": {
      "modality": "text+image->text",
      "input_modalities": ["text", "image"],
      "output_modalities": ["text"],
      "tokenizer": "Other",
      "instruct_type": null
    },
    "endpoints": [
      {
        "name": "Google: Gemma 4 26B A4B | MyIP Local GPU",
        "context_length": 32768,
        "pricing": {
          "prompt": "0.000030",
          "completion": "0.000150",
          "request": "0",
          "image": "0",
          "web_search": "0",
          "internal_reasoning": "0",
          "input_cache_read": "0.000003",
          "input_cache_write": null,
          "currency": "KRW"
        },
        "provider_name": "MyIP Local GPU",
        "tag": "vllm",
        "quantization": null,
        "max_completion_tokens": 32768,
        "max_prompt_tokens": 32768,
        "supported_parameters": [
          "max_tokens", "temperature", "top_p", "top_k", "stop", "seed",
          "frequency_penalty", "presence_penalty", "repetition_penalty",
          "logit_bias", "response_format", "tools", "tool_choice"
        ],
        "status": 0,
        "uptime_last_30m": null,
        "latency_last_30m": null,
        "throughput_last_30m": null
      }
    ]
  }
}

How local GPU candidates get here

The endpoints array is assembled from two sources:

  1. Endpoints synchronised from external providers.
  2. Slots on our own GPU farm. These do not exist in any external catalog, so we synthesise one endpoint entry from the slot configuration.

Without that synthesis, a local-only model would return an empty endpoints array, which reads as "nowhere to run this" — for a model we serve ourselves.

The order of candidates in this response is not the routing order. To see how a real request walks its candidates, read Local-first routing and Provider routing.

Errors

Statuserror_typeRaised when
404not_supportedThe model id does not exist or is disabled
429rate_limit_exceededRequest rate limit exceeded
500serverServer error
json
{
  "error": {
    "code": 404,
    "message": "지원하지 않는 경로입니다: /api/v1/models/nope/nope/endpoints",
    "metadata": { "error_type": "not_supported" }
  }
}

A disabled model and a nonexistent one return the same 404.

آخر تحديث ٠٥‏/٠٩‏/٢٠٢٦