모델 목록
curl --request GET \
--url https://api.gravitex.ai/v1/modelsimport requests
url = "https://api.gravitex.ai/v1/models"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.gravitex.ai/v1/models', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/models",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/models"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.gravitex.ai/v1/models")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyAPI 문서
모델 목록
API 키로 사용 가능한 모델 목록을 OpenAI, Anthropic 또는 Gemini 형식으로 조회합니다.
GET
/
v1
/
models
모델 목록
curl --request GET \
--url https://api.gravitex.ai/v1/modelsimport requests
url = "https://api.gravitex.ai/v1/models"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.gravitex.ai/v1/models', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gravitex.ai/v1/models",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/models"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.gravitex.ai/v1/models")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/v1/models")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body소개
API 키로 사용 가능한 모든 모델을 조회합니다. 동일한 엔드포인트https://api.gravitex.ai/v1/models는 요청 헤더에 따라 해당 플랫폼의 네이티브 형식으로 응답을 자동 반환하므로, URL을 바꾸거나 여러 통합을 유지할 필요가 없습니다.
자동 형식 감지
GravitexAI는 인증 헤더를 검사하여 클라이언트 유형을 감지하고, 공식 OpenAI / Anthropic / Gemini ListModels 스키마로 응답을 반환하므로 네이티브 SDK를 바로 사용할 수 있습니다.
형식 감지 규칙
| 요청 시그니처 | 응답 형식 |
|---|---|
x-api-key + anthropic-version 헤더 | Anthropic |
x-goog-api-key 헤더 또는 ?key=xxx 쿼리 매개변수 | Gemini |
Authorization: Bearer ... (기본값) | OpenAI |
여러 자격 증명이 함께 전달되면 우선순위는 Anthropic > Gemini > OpenAI입니다.
인증
string
OpenAI 호환 인증, 형식:
Bearer sk-xxxxxxxxxxstring
Anthropic 인증 — 원시 API 키(
Bearer 접두사 없음)string
Anthropic API 버전, 예:
2023-06-01string
Gemini 인증 — 원시 API 키
요청 예시
- OpenAI format
- Anthropic format
- Gemini format
curl https://api.gravitex.ai/v1/models \
-H "Authorization: Bearer sk-XyLy**************************mIqSt"
from openai import OpenAI
client = OpenAI(
api_key="sk-XyLy**************************mIqSt",
base_url="https://api.gravitex.ai/v1"
)
models = client.models.list()
for model in models.data:
print(f"{model.id} ({model.owned_by})")
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'sk-XyLy**************************mIqSt',
baseURL: 'https://api.gravitex.ai/v1'
});
const models = await client.models.list();
models.data.forEach(m => console.log(`${m.id} (${m.owned_by})`));
curl https://api.gravitex.ai/v1/models \
-H "x-api-key: sk-XyLy**************************mIqSt" \
-H "anthropic-version: 2023-06-01"
import anthropic
client = anthropic.Anthropic(
api_key="sk-XyLy**************************mIqSt",
base_url="https://api.gravitex.ai"
)
for model in client.models.list().data:
print(f"{model.id} ({model.display_name})")
curl "https://api.gravitex.ai/v1/models" \
-H "x-goog-api-key: sk-XyLy**************************mIqSt"
import requests
resp = requests.get(
"https://api.gravitex.ai/v1/models",
headers={"x-goog-api-key": "sk-XyLy**************************mIqSt"}
)
for model in resp.json()["models"]:
print(f"{model['name']} ({model['displayName']})")
응답 예시
- OpenAI format
- Anthropic format
- Gemini format
{
"object": "list",
"data": [
{
"id": "gpt-5.4",
"object": "model",
"created": 1715232000,
"owned_by": "openai"
},
{
"id": "claude-sonnet-4-5-20250929",
"object": "model",
"created": 1743465600,
"owned_by": "anthropic"
},
{
"id": "gemini-2.5-pro",
"object": "model",
"created": 1746057600,
"owned_by": "google"
}
]
}
{
"data": [
{
"type": "model",
"id": "claude-opus-4-5-20251101",
"display_name": "Claude Opus 4.5",
"created_at": "2025-11-01T00:00:00Z"
},
{
"type": "model",
"id": "claude-sonnet-4-5-20250929",
"display_name": "Claude Sonnet 4.5",
"created_at": "2025-09-29T00:00:00Z"
}
],
"has_more": false,
"first_id": "claude-opus-4-5-20251101",
"last_id": "claude-sonnet-4-5-20250929"
}
{
"models": [
{
"name": "models/gemini-2.5-pro",
"version": "001",
"displayName": "Gemini 2.5 Pro",
"description": "Google's flagship multimodal reasoning model",
"inputTokenLimit": 1048576,
"outputTokenLimit": 8192,
"supportedGenerationMethods": ["generateContent", "countTokens"]
},
{
"name": "models/gemini-3.1-pro-preview",
"version": "preview",
"displayName": "Gemini 3.1 Pro Preview",
"inputTokenLimit": 1048576,
"outputTokenLimit": 8192,
"supportedGenerationMethods": ["generateContent", "countTokens"]
}
]
}
응답 필드
OpenAI 형식
| Field | Type | Description |
|---|---|---|
object | string | 항상 list |
data | array | 모델 목록 |
data[].id | string | 모델 식별자; 요청의 model 매개변수로 사용 |
data[].object | string | 항상 model |
data[].created | integer | 출시 타임스탬프(Unix 초) |
data[].owned_by | string | 제공자, 예: openai, anthropic, google |
Anthropic 형식
| Field | Type | Description |
|---|---|---|
data | array | 모델 목록 |
data[].type | string | 항상 model |
data[].id | string | 모델 식별자 |
data[].display_name | string | 사람이 읽기 쉬운 이름 |
data[].created_at | string | 출시 시간(ISO 8601 문자열) |
has_more | boolean | 추가 페이지 존재 여부 |
first_id / last_id | string | 페이지네이션 커서 |
Gemini 형식
| Field | Type | Description |
|---|---|---|
models | array | 모델 목록 |
models[].name | string | 리소스 이름, 형식 models/{id} |
models[].displayName | string | 사람이 읽기 쉬운 이름 |
models[].description | string | 모델 설명 |
models[].inputTokenLimit | integer | 최대 입력 토큰 수 |
models[].outputTokenLimit | integer | 최대 출력 토큰 수 |
models[].supportedGenerationMethods | array | 이 모델이 지원하는 메서드 |
오류 처리
| Status | Meaning | Suggested action |
|---|---|---|
200 | 성공 | — |
401 | API 키가 유효하지 않거나 만료됨 | 키를 확인하고 비활성화되지 않았는지 확인 |
429 | 요청이 너무 많음 | 백오프 후 재시도; 할당량 증가는 BD에 문의 |
500 | 내부 서버 오류 | 잠시 후 재시도; 지속되면 지원팀에 문의 |
{
"error": {
"message": "Invalid API key",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
모범 사례
- 결과 캐싱 — 모델 목록은 자주 바뀌지 않으므로 1시간 이상 캐싱하면 불필요한 요청을 줄일 수 있습니다.
- 시작 시 검증 — 부팅 시 한 번 호출하여 키가 유효하고 대상 모델을 사용할 수 있는지 확인하세요.
- 권한 인식 — 반환 목록은 API 키 권한에 따라 달라지며, 키마다 다른 모델이 표시될 수 있습니다.
- SDK 즉시 사용 — 공식 OpenAI / Anthropic / Google SDK를 사용할 때 base URL을
https://api.gravitex.ai로 지정하면 추가 어댑터 없이 동작합니다.
Python 예시 의존성:
- OpenAI 형식:
pip install openai - Anthropic 형식:
pip install anthropic - Gemini 형식:
pip install requests
⌘I
