# LLM 모델 카탈로그·가격·컨텍스트



대화 API에서 쓸 수 있는 28개 모델의 ID, 계열·크기, 멀티모달 지원 여부, 추천 용도, 1M 토큰당 입력·출력 단가(포인트), 최대 컨텍스트를 한 번에 조회합니다. 무료이며 인증키 없이도 호출할 수 있습니다.



인증: Authorization: Bearer $APICK_API_KEY

본문 있는 REST 요청: multipart/form-data. GET 본문 및 MCP JSON-RPC 규격은 해당 명세를 따릅니다.

인증키는 서버에 보관하세요. 모든 예제는 정적 자료입니다.



## POST /rest/llm/models 응답 필드

- `data` (object): 요청 처리 결과 묶음입니다. 조회한 값·작업 상태·오류 설명이 이 안에 들어 있으며, 실제 하위 필드 구성은 서비스마다 다릅니다. 값이 없으면 null·빈 배열·필드 생략 중 해당 서비스의 규칙을 따릅니다.

- `data.count` (integer): 건수입니다. 0이면 해당 항목이 없습니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.currency` (string): 항상 POINT. 1포인트 = 1원(부가세 별도). 가격의 통화 코드입니다. 예: KRW, USD.

- `data.price_unit` (string): 단가 단위 설명 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.billing_rule` (string): 정산 규칙 요약 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.token_mapping` (object): 토큰 사용량 필드와 단가 구분(input/output)의 대응 관계입니다.

- `data.token_mapping.prompt_tokens` (string): 토큰 사용량 필드와 단가 구분의 대응 관계입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.token_mapping.completion_tokens` (string): 토큰 사용량 필드와 단가 구분의 대응 관계입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.examples` (array): 과금 계산 예시 목록입니다. 입력·출력 토큰 수와 그에 따른 포인트 요금을 보여 줍니다.

- `data.models` (array): 사용할 수 있는 모델 목록입니다. 각 항목의 id를 요청의 model 필드에 넣습니다.

- `data.models[].id` (string): 모델 ID입니다. 요청의 model 필드에 이 값을 그대로 넣습니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.models[].family` (string): 모델 계열 이름입니다. 같은 계열의 크기·용도를 비교할 때 사용합니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.models[].size` (string): 모델 파라미터 규모 표기입니다. 예: 8B. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.models[].multimodal` (boolean): 이미지·오디오 같은 텍스트 외 입력을 함께 받을 수 있는지 여부입니다. true/false로 오며, 값이 없으면 필드가 생략되거나 null일 수 있습니다. true = 이미지 입력을 함께 이해하는 모델만 요청한 경우, false = 텍스트 전용 모델만 요청한 경우입니다. 조회 필터로 쓰이며 응답의 모델 목록을 좁힙니다.

- `data.models[].tag` (string): 모델의 용도 태그입니다. 없으면 null입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요. null 허용.

- `data.models[].use_cases` (array): 이 모델을 권장하는 용도 목록입니다. 예: economy, reasoning.

- `data.models[].price` (object): 모델의 100만 토큰당 포인트 단가입니다. input_point_per_1m·output_point_per_1m으로 입력·출력을 구분합니다.

- `data.models[].price.input_point_per_1m` (number): 입력 1M 토큰당 포인트 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.models[].price.output_point_per_1m` (number): 출력 1M 토큰당 포인트 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요.

- `data.models[].price.cached_input_point_per_1m` (number): 반복된 입력으로 할인되는 토큰의 1M당 포인트. 할인이 없는 모델은 입력 단가와 같습니다.

- `data.models[].price.checked_at` (string): 단가 확인 시각 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.models[].price.available` (boolean): false면 지금 단가를 확인할 수 없어 단가 값이 null입니다. 잠시 후 다시 조회하거나 다른 모델을 고르세요. true = 지금 조회 가능한 경우, false = 점검 등으로 지금은 조회할 수 없는 경우입니다. null 허용.

- `data.models[].max_context` (integer): 모델이 한 번에 처리할 수 있는 최대 문맥 길이(토큰)입니다. 숫자로 오며, 단위·범위는 같은 응답의 다른 필드나 이 문서의 설명을 확인하세요. null 허용.

- `data.ic_id` (undefined): 이번 조회에 부여된 식별자입니다. 같은 요청의 결과를 추적하거나 문의할 때 사용하며, 값이 없으면 null입니다. null 허용.

- `data.result` (integer): 조회 결과 본문입니다. 서비스가 찾은 실제 데이터가 들어 있으며, 자료가 없거나 조회에 실패하면 null이거나 필드가 생략됩니다.

- `data.msg` (string): 처리 결과를 사람이 읽을 수 있는 문장으로 설명합니다. 성공·실패 사유가 담기며, 오류 코드는 별도 필드에서 확인합니다.

- `data.success` (integer): 업무 처리 결과 코드입니다. 1은 정상 결과, 0은 실패 또는 무료 응답입니다. 서비스에 따라 2·3처럼 추가 코드를 쓰므로 같은 응답의 status·msg·error 필드도 함께 확인하세요.

- `api` (object): API 호출 메타데이터입니다. 이번 요청의 서버 처리 성공 여부(api.success), 실제 차감 포인트(api.cost), 결제 기록 ID(api.pl_id)를 담습니다. 처리 시간(api.ms)은 응답에 포함된 경우에만 제공됩니다. 업무 결과는 data에서 확인합니다.

- `api.success` (boolean): API 서버가 이번 요청을 정상 처리했는지 여부입니다. true여도 업무 결과가 실패일 수 있으므로 data.success·data.status와 함께 판단합니다. 인증 실패·잘못된 입력·서버 오류 응답에서는 false입니다.

- `api.cost` (integer): 이번 호출에서 실제로 차감된 포인트입니다. 유료 성공 응답에서만 단가만큼 차감되며, 실패·무료 조회·같은 요청의 멱등 재전송은 0입니다. 화면의 표시 단가와 실제 차감액이 다를 수 있으므로 정산은 이 값을 기준으로 합니다.

- `api.ms` (integer): 서버가 요청을 받아 응답 본문을 만들기까지 걸린 처리 시간(밀리초)입니다. 네트워크 왕복 시간과 클라이언트 대기 시간은 포함되지 않습니다.

- `api.pl_id` (undefined): 포인트 차감 기록 ID입니다. 차감이 발생한 호출에만 값이 있으며, 과금 내역을 문의할 때 이 번호를 사용합니다. 무과금 응답은 -1·null이거나 필드가 생략됩니다. null 허용.

## API 요청: POST /rest/llm/models



### 입력

- `family` (string, 선택): 모델 계열 필터 (deepseek, qwen, glm, google, nvidia, llama, mistral, gpt-oss, moonshot, seed, mimo, phi)

- `tag` (string, 선택): 특수 태그 필터 — 'reasoning'(추론 특화) | 'coder'(코딩 특화)

- `use_case` (string, 선택): 추천 용도 필터 — 'general' | 'reasoning' | 'coding' | 'multimodal' | 'economy'

- `multimodal` (boolean, 선택): 멀티모달(이미지 이해) 지원 여부 필터 (true/false) true/false로 보내며, 생략하면 서버 기본값이 적용됩니다. true = 이미지 입력을 함께 이해하는 모델만 요청한 경우, false = 텍스트 전용 모델만 요청한 경우입니다. 조회 필터로 쓰이며 응답의 모델 목록을 좁힙니다.



### 응답 명세

```json

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "description": "조건에 맞는 모델 수"
        },
        "currency": {
          "type": "string",
          "description": "항상 POINT. 1포인트 = 1원(부가세 별도)"
        },
        "price_unit": {
          "type": "string",
          "description": "단가 단위 설명"
        },
        "billing_rule": {
          "type": "string",
          "description": "정산 규칙 요약"
        },
        "token_mapping": {
          "type": "object",
          "properties": {
            "prompt_tokens": {
              "type": "string"
            },
            "completion_tokens": {
              "type": "string"
            }
          },
          "description": "대화 응답의 usage.prompt_tokens는 입력, usage.completion_tokens는 출력 단가로 계산한다는 뜻입니다."
        },
        "examples": {
          "type": "array",
          "items": {}
        },
        "models": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "대화 API의 model에 그대로 넣는 값"
              },
              "family": {
                "type": "string",
                "description": "모델 계열"
              },
              "size": {
                "type": "string",
                "description": "크기 표시. 예: 8B, 35B-MoE, flagship"
              },
              "multimodal": {
                "type": "boolean",
                "description": "이미지 입력 지원 여부"
              },
              "tag": {
                "nullable": true,
                "type": "string",
                "description": "reasoning, coder 또는 null"
              },
              "use_cases": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "추천 용도 목록"
              },
              "price": {
                "type": "object",
                "properties": {
                  "input_point_per_1m": {
                    "type": "number",
                    "description": "입력 1M 토큰당 포인트"
                  },
                  "output_point_per_1m": {
                    "type": "number",
                    "description": "출력 1M 토큰당 포인트"
                  },
                  "cached_input_point_per_1m": {
                    "type": "number",
                    "description": "반복된 입력으로 할인되는 토큰의 1M당 포인트. 할인이 없는 모델은 입력 단가와 같습니다."
                  },
                  "checked_at": {
                    "type": "string",
                    "description": "단가 확인 시각"
                  },
                  "available": {
                    "type": "boolean",
                    "description": "false면 지금 단가를 확인할 수 없어 단가 값이 null입니다. 잠시 후 다시 조회하거나 다른 모델을 고르세요.",
                    "nullable": true
                  }
                }
              },
              "max_context": {
                "type": "integer",
                "description": "모델이 한 번에 받을 수 있는 최대 토큰 수(대화 기록 전체 포함). 확인할 수 없으면 null입니다.",
                "nullable": true
              }
            }
          }
        },
        "ic_id": {
          "nullable": true
        },
        "result": {
          "type": "integer"
        },
        "msg": {
          "type": "string"
        },
        "success": {
          "type": "integer"
        }
      }
    },
    "api": {
      "type": "object",
      "properties": {
        "success": {
          "type": "boolean"
        },
        "cost": {
          "type": "integer",
          "description": "항상 0"
        },
        "ms": {
          "type": "integer"
        },
        "pl_id": {
          "nullable": true
        }
      }
    }
  }
}

```

### 정적 응답 예시

```json

{
  "data": {
    "count": 1,
    "currency": "POINT",
    "price_unit": "1,000,000 토큰당 포인트 (input/output 별도 단가, 1포인트 = 1원, 부가세별도)",
    "billing_rule": "실제 입력·캐시·출력 토큰 원가에 적용 환율과 1.4를 곱하고 요청 합계에서 한 번 올림합니다. 사용량 미확정은 정산 보류합니다.",
    "token_mapping": {
      "prompt_tokens": "input",
      "completion_tokens": "output"
    },
    "examples": [],
    "models": [
      {
        "id": "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",
        "family": "llama",
        "size": "8B",
        "multimodal": false,
        "tag": null,
        "use_cases": [
          "economy"
        ],
        "price": {
          "input_point_per_1m": 92.3,
          "output_point_per_1m": 184.6,
          "cached_input_point_per_1m": 92.3,
          "checked_at": "2026-10-20T00:00:00.000Z",
          "available": true
        },
        "max_context": 131072
      }
    ],
    "ic_id": null,
    "result": 1,
    "msg": "",
    "success": 1
  },
  "api": {
    "success": true,
    "cost": 0,
    "ms": 14,
    "pl_id": null
  }
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/llm/models' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'family=qwen'

```

### Node.js (서버 ESM)

```javascript

const form = new FormData();
form.append("family", "qwen");
const response = await fetch("https://apick.app/rest/llm/models", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
  body: form,
  signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const result = await response.json();
console.log(result);

```

### python

```python

import os
import requests
parts = [
    ("family", (None, "qwen")),
]
response = requests.request("POST", "https://apick.app/rest/llm/models",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120))
response.raise_for_status()
result = response.json()
print(result)

```

### php

```php

<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
    'family' => 'qwen',
];
$curl = curl_init('https://apick.app/rest/llm/models');
curl_setopt_array($curl, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($result);

```

## 사용 예시 1. 전체 모델 목록

필터 없이 호출해 28개 모델을 모두 받습니다. 앱 시작 시 한 번 받아 두고 모델 선택 화면에 씁니다.

```bash

printf '%s\r\n' '--apick-empty--' | curl --fail-with-body --request POST 'https://apick.app/rest/llm/models' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --header 'Content-Type: multipart/form-data; boundary=apick-empty' \
  --data-binary @-

```

- `data.count`가 받은 모델 수입니다.

- `data.models[].price.available`이 `false`인 모델은 단가가 `null`이니 잠시 후 다시 조회하거나 다른 모델을 고릅니다.

## 사용 예시 2. 이미지를 읽는 모델만

사진·영수증·화면 캡처를 함께 보내야 할 때 멀티모달 모델만 고릅니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/llm/models' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'multimodal=true'

```

- 모든 항목의 `data.models[].multimodal`이 `true`입니다.

- 고른 `id`로 대화 API에 `messages[0][content][0][type]`·`image_url` 형식을 보냅니다.

## 사용 예시 3. 추론 특화 모델만

정책 해석·수학·복잡한 판단처럼 깊은 추론이 필요한 작업에 쓸 모델을 고릅니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/llm/models' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'tag=reasoning'

```

- `data.models[].tag`가 모두 `reasoning`입니다. 대화 요청에 `speed=slow`를 함께 보내면 추론이 깊어집니다.

## 사용 예시 4. 대량 처리용 경제형 모델

수천 건의 분류·요약처럼 단가가 중요한 작업용 모델을 고릅니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/llm/models' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'use_case=economy'

```

- `data.models[].price.output_point_per_1m`이 낮은 순으로 비교해 고릅니다.

- 긴 입력을 넣을 계획이면 `data.models[].max_context`도 함께 확인합니다.

## 코드·오류

### 업무 실패 응답

입력 오류·대상 없음·일시 실패는 data.error(사유)와 data.success=0으로 오며 api.cost는 0(과금 없음)입니다. HTTP 상태는 400·404·408·424 중 하나입니다. 입력 오류는 값을 고쳐 다시 요청하고, 408·424는 잠시 후 한 번 다시 시도하세요.

```json

{
  "data": {
    "error": "입력값을 확인해 주세요.",
    "success": 0
  },
  "api": {
    "success": true,
    "cost": 0,
    "ms": 5
  }
}

```

## 상세 기능·요금

이럴 때 씁니다 상황보내는 값 대화 API의 model에 넣을 ID 찾기아무 값 없이 호출하고 data.models[].id를 사용합니다. 이미지를 읽는 모델만 고르기multimodal=true 추론·코딩에 강한 모델 고르기tag=reasoning 또는 tag=coder 대량 처리용 저렴한 모델 고르기use_case=economy 긴 문서를 넣기 전에 한도 확인응답의 max_context와 입력 길이를 비교합니다. 모델 선택 가이드 용도추천 모델이유 일반 챗봇·간단한 질의응답·대량 처리 meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo 단가가 가장 낮은 편이라 짧은 답변을 많이 만들 때 적합합니다. 업무 규칙을 지키는 상담·에이전트 meta-llama/Llama-3.3-70B-Instruct-Turbo 지시를 잘 따르고 응답이 빠릅니다. 복잡한 추론·정책 해석 deepseek-ai/DeepSeek-V4-Pro (tag: reasoning) 대화 요청에 speed=slow를 함께 보내면 단계적인 추론이 깊어집니다. 코드 작성·리팩터링 Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo (tag: coder) 코딩 특화 모델입니다. 이미지 이해 google/gemma-4-31B-it · Qwen/Qwen3-VL-30B-A3B-Instruct multimodal: true 모델만 이미지를 읽습니다. 이미지 전달 형식은 대화 API 레퍼런스를 참고하세요. 고른 id를 /rest/llm/chat의 model에 넣으면 됩니다. 사용 방식별 안내는 단발 호출, 멀티챗, 챗봇 구축, 에이전트 구축 가이드를 참고하세요.

## 상세 요청

MethodURL POST https://apick.app/rest/llm/models 모든 항목은 선택입니다. 여러 조건을 함께 보내면 모두 만족하는 모델만 돌려줍니다. 조건에 맞는 모델이 없으면 빈 목록(count: 0)을 받습니다. form-data 전체 예제 보기

## 상세 응답

필드타입설명 data.countInteger조건에 맞는 모델 수 data.currencyString항상 POINT. 1포인트 = 1원(부가세 별도) data.price_unitString단가 단위 설명 data.billing_ruleString정산 규칙 요약 data.token_mappingObject대화 응답의 usage.prompt_tokens는 입력, usage.completion_tokens는 출력 단가로 계산한다는 뜻입니다. data.models[].idString대화 API의 model에 그대로 넣는 값 data.models[].familyString모델 계열 data.models[].sizeString크기 표시. 예: 8B, 35B-MoE, flagship data.models[].multimodalBoolean이미지 입력 지원 여부 data.models[].tagString/nullreasoning, coder 또는 null data.models[].use_casesArray추천 용도 목록 data.models[].price.input_point_per_1mNumber입력 1M 토큰당 포인트 data.models[].price.output_point_per_1mNumber출력 1M 토큰당 포인트 data.models[].price.cached_input_point_per_1mNumber반복된 입력으로 할인되는 토큰의 1M당 포인트. 할인이 없는 모델은 입력 단가와 같습니다. data.models[].price.availableBooleanfalse면 지금 단가를 확인할 수 없어 단가 값이 null입니다. 잠시 후 다시 조회하거나 다른 모델을 고르세요. data.models[].price.checked_atString단가 확인 시각 data.models[].max_contextInteger/null모델이 한 번에 받을 수 있는 최대 토큰 수(대화 기록 전체 포함). 확인할 수 없으면 null입니다. api.costInteger항상 0 단가는 환율에 따라 바뀔 수 있습니다. 비용을 미리 계산하려면 호출 직전에 조회한 값을 쓰고, 실제 차감액은 대화 응답의 api.cost로 확인하세요. { "data": { "count": 1, "currency": "POINT", "price_unit": "1,000,000 토큰당 포인트 (input/output 별도 단가, 1포인트 = 1원, 부가세별도)", "billing_rule": "실제 입력·캐시·출력 토큰 원가에 적용 환율과 1.4를 곱하고 요청 합계에서 한 번 올림합니다. 사용량 미확정은 정산 보류합니다.", "token_mapping": { "prompt_tokens": "input", "completion_tokens": "output" }, "examples": [], "models": [ { "id": "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo", "family": "llama", "size": "8B", "multimodal": false, "tag": null, "use_cases": ["economy"], "price": { "input_point_per_1m": 92.3, "output_point_per_1m": 184.6, "cached_input_point_per_1m": 92.3, "checked_at": "2026-10-20T00:00:00.000Z", "available": true }, "max_context": 131072 } ], "ic_id": null, "result": 1, "msg": "", "success": 1 }, "api": { "success": true, "cost": 0, "ms": 14, "pl_id": null } }
