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

모델 하나를 서빙하는 후보들

모델 하나를 실제로 처리할 수 있는 엔드포인트(후보) 목록을 돌려줍니다. 인증이 필요 없습니다.

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

경로의 {author}/{slug} 는 모델 id 를 / 로 나눈 두 조각입니다. google/gemma-4-26b-a4b 라면 /api/v1/models/google/gemma-4-26b-a4b/endpoints 입니다. GET /models 응답의 links.details 가 정확히 이 경로를 줍니다.

경로 파라미터

authorstring필수

모델 id 의 / 앞부분. 예: google.

slugstring필수

모델 id 의 / 뒷부분. 예: gemma-4-26b-a4b.

쿼리 파라미터는 없습니다.

요청 예제

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

응답

data.idstring

모델 id.

data.namestring

모델 표시 이름.

data.createdinteger

유닉스 초.

data.descriptionstring

모델 설명. 없으면 빈 문자열.

data.architectureobject

modality, input_modalities, output_modalities, tokenizer, instruct_type.

data.endpointsobject[]

후보 목록. 아래 필드를 갖습니다.

data.endpoints[].namestring

"<모델 이름> | <provider 이름>" 형식의 표시용 이름.

data.endpoints[].provider_namestring

provider 표시명. 응답 헤더 X-MyIP-Provider 에 실리는 값과 같습니다.

data.endpoints[].context_lengthinteger | null

이 후보가 받는 컨텍스트 길이. 후보별 값이 없으면 모델의 값을 씁니다.

data.endpoints[].max_prompt_tokensinteger | null

프롬프트 최대 토큰. context_length 와 같은 값입니다.

data.endpoints[].max_completion_tokensinteger | null

생성 가능한 최대 토큰.

data.endpoints[].pricingobject

KRW/토큰 판매 단가. /modelspricing 과 같은 객체이며 currency"KRW" 입니다.

단가는 모델 단위로 정해집니다. 그래서 같은 모델의 모든 후보가 같은 pricing 을 갖습니다 — 어느 후보가 응답하든 청구액이 달라지지 않습니다.

data.endpoints[].tagstring | null

후보 구분 태그. 로컬 GPU 후보에는 추론 엔진 이름(vllm, llamacpp)이 들어갑니다.

data.endpoints[].quantizationstring | null

양자화 방식. 모르면 null.

data.endpoints[].supported_parametersstring[]

이 후보가 받는 파라미터. 후보별 값이 없으면 모델의 목록을 씁니다.

data.endpoints[].statusinteger | null

후보 상태. 로컬 GPU 후보는 슬롯이 떠 있으면 0, 내려가 있으면 null 입니다. null 이라고 못 쓰는 것은 아닙니다 — 요청이 오면 슬롯을 깨웁니다(로컬 GPU 모델).

data.endpoints[].uptime_last_30mnumber | null

최근 30분 가동률. 모르면 null.

data.endpoints[].latency_last_30mnumber | null

최근 30분 지연. provider.sort: "latency" 가 읽는 값입니다. openrouter 응답에는 없는 우리 추가 필드입니다.

data.endpoints[].throughput_last_30mnumber | null

최근 30분 처리량. provider.sort: "throughput" 이 읽는 값입니다. 역시 우리 추가 필드입니다.

응답 예제

json
{
  "data": {
    "id": "google/gemma-4-26b-a4b",
    "name": "Google: Gemma 4 26B A4B",
    "created": 1786924800,
    "description": "Gemma 4 26B (MoE 활성 4B, QAT AWQ-INT4). MyIP 로컬 GPU 기본 슬롯. 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
      }
    ]
  }
}

로컬 GPU 후보가 어떻게 여기 나타나는가

endpoints 배열은 두 곳을 합쳐 만듭니다.

  1. 외부 provider 에서 동기화해 둔 엔드포인트.
  2. 우리 GPU 팜의 슬롯. 이쪽은 외부 카탈로그에 존재하지 않으므로 슬롯 설정에서 엔드포인트 한 건을 합성합니다.

이 합성이 없으면 로컬 전용 모델의 endpoints 가 빈 배열이 되어 "쓸 수 있는 곳이 없다"로 읽힙니다. 실제로는 우리가 직접 서빙하는 모델인데도 말이죠.

응답의 후보 순서는 라우팅 우선순위와 같지 않습니다. 실제 요청이 어떤 순서로 시도되는지는 로컬 우선 라우팅Provider 라우팅을 보세요.

오류

상태error_type발생 조건
404not_supported그 모델 id 가 없거나 비활성화됨
429rate_limit_exceeded요청 빈도 제한 초과
500server서버 오류
json
{
  "error": {
    "code": 404,
    "message": "지원하지 않는 경로입니다: /api/v1/models/nope/nope/endpoints",
    "metadata": { "error_type": "not_supported" }
  }
}

비활성화된 모델과 존재하지 않는 모델은 같은 404 를 받습니다.

마지막 수정 2026. 9. 5.