Developer guide
API 호출하기
API 호환 경로와 스트리밍·음성 규칙
Written in 한국어. A version in your language is being prepared.
CLEVI 게이트웨이의 호출 경로는 OpenAI 호환 규격과 Anthropic 호환 규격으로 나뉩니다.
두 규격은 같은 API 키를 사용하며, 대화형 추론 모델은 어느 규격으로도 호출할 수 있습니다.
임베딩과 음성·보이스 경로는 OpenAI 호환 규격에만 있고,
Anthropic 호환 규격은 messages, count_tokens, models 세 경로를 제공합니다.
스트리밍은 요청 본문의 stream으로 켜며, 임베딩과 일부 모델·경로는 지원하지 않습니다. 음성·보이스 경로는 오디오를 그대로 반환하고 산출물을 CleviDrive에 3일 동안 보관하는 등 일반 추론과 다른 규칙을 따릅니다.
모델 ID와 모델별 허용 호출은 모델 페이지에, 인증 헤더와 base URL은 API 키로 인증하기 페이지에 있습니다.
경로 선택
하려는 일과 사용 중인 SDK에 따라 경로를 선택하세요. 표의 경로는 각 규격의 base URL 뒤에 이어지는 상대 경로입니다.
| 하려는 일 | 규격 | 경로 |
|---|---|---|
| 대화형 추론, OpenAI SDK 사용 | OpenAI 호환 | POST /chat/completions 또는 POST /responses |
| 대화형 추론, Anthropic SDK 사용 | Anthropic 호환 | POST /v1/messages |
| 임베딩 생성 | OpenAI 호환 | POST /embeddings |
| 음성 합성·전사, 보이스 관리 | OpenAI 호환 | /audio와 /voices 아래 경로 |
| 호출할 수 있는 모델 확인 | 둘 다 | GET /models |
OpenAI 호환 경로
OpenAI 호환 규격의 base URL은 https://platform.clevi.net/api/v2/aiservice/openai/v1 입니다. 요청과 응답 본문은 OpenAI 규격을 따릅니다. 아래 표는 추론과 모델 경로를 호스트 기준 전체 경로로 표기하며, 음성·보이스 경로는 뒤의 음성과 보이스 경로 절에 정리했습니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| POST | /api/v2/aiservice/openai/v1/chat/completions | 대화형 추론을 요청합니다. stream을 켜면 SSE로 응답합니다. |
| POST | /api/v2/aiservice/openai/v1/responses | Responses 규격으로 호출합니다. stream을 지원합니다. |
| GET | /api/v2/aiservice/openai/v1/responses/{responseId} | 저장된 응답 1건을 조회합니다. |
| GET | /api/v2/aiservice/openai/v1/responses/{responseId}/input_items | 저장된 응답의 입력 항목 목록을 조회합니다. |
| POST | /api/v2/aiservice/openai/v1/responses/{responseId}/cancel | 백그라운드로 진행 중인 응답을 취소합니다. |
| DELETE | /api/v2/aiservice/openai/v1/responses/{responseId} | 저장된 응답을 삭제합니다. |
| POST | /api/v2/aiservice/openai/v1/completions | 레거시 텍스트 완성을 요청합니다. stream을 지원합니다. |
| POST | /api/v2/aiservice/openai/v1/embeddings | 임베딩을 생성합니다. 스트리밍은 지원하지 않습니다. |
| GET | /api/v2/aiservice/openai/v1/models | 이 키로 호출할 수 있는 모델 목록을 반환합니다. |
| GET | /api/v2/aiservice/openai/v1/models/{modelId} | 모델 1건을 조회합니다. 접근할 수 없는 모델이면 404를 반환합니다. |
chat/completions를 호출하는 최소 예제입니다. sk-... 자리에는 API 키 화면에서 발급한 키를, model에는 모델 페이지의 ID를 넣으세요.
curl https://platform.clevi.net/api/v2/aiservice/openai/v1/chat/completions \
-H "X-API-Key: sk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "cip-5.5-im",
"messages": [{"role": "user", "content": "안녕하세요"}]
}'그 밖의 경로
다음 경로는 진단, 레거시 호환, 중계 용도입니다.
| 경로 | 설명 |
|---|---|
| GET /api/v2/aiservice/openai/v1/healthz | 음성 provider의 상태를 확인합니다. |
| /api/v2/aiservice/openai/v1/api/status · /api/options · /api/generate · /outputs/{filename} | 레거시 Cosa의 상태·옵션 조회, 생성 호출(multipart), 산출물 내려받기 경로입니다. |
| /api/v2/aiservice/openai/v1/{routeKey} (GET · POST · PUT · PATCH · DELETE) | 위 표에 없는 provider 경로를 규칙을 적용해 중계합니다. chat/completions, completions, embeddings, responses는 전용 경로가 처리하므로 POST 중계로 호출하면 404를 반환합니다. |
요청과 응답 필드 전체는 OpenAPI 3.0 문서 https://platform.clevi.net/api/v2/console/openapi/cloud-inference-v1 에서 확인할 수 있습니다. 경로 목록은 이 문서에서 생성되며, 문서는 콘솔에 로그인한 세션으로만 열립니다. 같은 문서로 클라이언트를 생성할 수 있습니다.
Anthropic 호환 경로
Anthropic 호환 규격의 base URL은 https://platform.clevi.net/api/v2/aiservice/anthropic 이며, Anthropic SDK가 요청 경로에 /v1을 직접 추가합니다. 요청과 응답 본문은 Anthropic Messages 규격을 따릅니다.
| 메서드 | 경로 | 설명 |
|---|---|---|
| POST | /api/v2/aiservice/anthropic/v1/messages | Messages 규격으로 호출합니다. model, messages, max_tokens가 필요하며 stream을 지원합니다. |
| POST | /api/v2/aiservice/anthropic/v1/messages/count_tokens | 과금 없이 입력 토큰 수만 추정합니다. max_tokens는 필요하지 않습니다. |
| GET | /api/v2/aiservice/anthropic/v1/models | 커서 페이지네이션 방식의 모델 목록을 반환합니다. limit은 1~1000이며 범위를 벗어나면 400을 반환합니다. |
| GET | /api/v2/aiservice/anthropic/v1/models/{modelId} | 모델 1건을 조회합니다. 접근할 수 없는 모델이면 404를 반환합니다. |
messages를 호출하는 최소 예제입니다.
curl https://platform.clevi.net/api/v2/aiservice/anthropic/v1/messages \
-H "X-API-Key: sk-..." \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "cip-5.5-im",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "안녕하세요"}]
}'anthropic-version 헤더를 생략하면 2023-06-01로 처리합니다. 게이트웨이는 anthropic-version과 anthropic-beta 헤더를 그대로 전달합니다.
스트리밍 (SSE)
요청 본문에 stream을 true로 설정하면 서버가 Server-Sent Events로 응답합니다. 지원 여부는 경로와 모델에 따라 다음과 같이 다릅니다.
| 대상 | 동작 |
|---|---|
| OpenAI 호환 POST /chat/completions · POST /completions · POST /responses | stream을 지원합니다. |
| Anthropic 호환 POST /v1/messages | stream을 지원합니다. |
| POST /embeddings | 스트리밍을 지원하지 않습니다. |
| Ivy 검색 계열 모델(ivy-4-mm-search 등) | stream을 켜도 서버가 해제하고 한 번에 응답합니다. |
| GET /responses/{responseId}?stream=true | 400을 반환합니다. 백그라운드 응답의 사용량을 정확히 한 번만 계량할 수 있을 때까지 닫아 둔 경로입니다. |
첫 청크와 함께 다음 세 헤더를 보냅니다. 이후에는 청크마다 data: 줄을 보내고 즉시 flush하며, 업스트림이 이벤트 이름을 제공한 경우에만 event: 줄을 함께 보냅니다.
- Content-Type: text/event-stream
- Cache-Control: no-cache
- X-Accel-Buffering: no
Anthropic 호환 경로의 청크는 event 줄과 data 줄이 짝을 이룹니다.
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"안"}}chat/completions의 청크는 data 줄로 오며, 마지막에 data: [DONE]을 그대로 전달합니다.
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[...]}
data: [DONE]스트리밍 도중 오류가 발생하면 일반 호출과 같은 오류 JSON이 data: 한 줄로 전달되고, HTTP 상태 코드도 함께 바뀝니다.
음성과 보이스 경로
TTS·STT와 Cosa 보이스 관리 경로는 OpenAI 호환 규격에 있으며, 일반 추론과 다른 규칙이 몇 가지 적용됩니다. 어떤 모델이 어느 경로를 허용하는지는 모델 페이지의 Cosa 표에서 확인하세요.
| 메서드 | 경로 | 설명 |
|---|---|---|
| POST | /api/v2/aiservice/openai/v1/audio/speech | 텍스트를 음성으로 합성해 오디오를 그대로 반환합니다. |
| POST | /api/v2/aiservice/openai/v1/audio/transcriptions | 오디오를 텍스트로 전사합니다 (multipart). |
| POST | /api/v2/aiservice/openai/v1/audio/speech/clone | 복제 보이스로 음성을 합성합니다 (multipart). |
| GET | /api/v2/aiservice/openai/v1/voices | 호출자가 사용할 수 있는 보이스 목록을 반환합니다. |
| POST | /api/v2/aiservice/openai/v1/voices | 오디오 샘플로 보이스를 등록합니다 (multipart). |
| POST | /api/v2/aiservice/openai/v1/voices/design | 설명문으로 합성 보이스를 만듭니다. |
| DELETE | /api/v2/aiservice/openai/v1/voices/{voiceId} | 보이스를 삭제합니다. 소유자만 삭제할 수 있습니다. |
다음 규칙은 음성·보이스 경로에만 적용됩니다.
| 규칙 | 내용 |
|---|---|
| 바이너리 전달 | audio/speech, audio/speech/clone, outputs/{filename}의 성공 응답은 오디오를 그대로 전송하면서 동시에 CleviDrive에 저장합니다. |
| 영수증 헤더 | X-Clevi-Drive-File-Id, X-Clevi-Drive-File-Version-Id, X-Clevi-Drive-Download-Url, X-Clevi-Drive-Expires-At, X-Clevi-Drive-Retention-Days: 3 헤더를 응답에 포함합니다. |
| Product 선택 | audio/speech와 audio/transcriptions는 요청 본문의 model로 Product를 선택합니다. 보이스·진단 경로는 X-Product-Sku 헤더 또는 product_sku 쿼리가 필요합니다. |
| 보이스 소유권 | 복제하거나 등록한 보이스는 만든 주체에게 귀속됩니다. 다른 소유자의 보이스로 합성하거나 삭제하려 하면 403을 반환하며, GET /voices 목록에도 본인 소유 보이스만 포함합니다. |
| 크기와 시간 | 요청 상한은 28 MiB, 업스트림 호출 제한 시간은 5분입니다. |
| provider 혼잡 | 업스트림이 혼잡하면 409를 그대로 전달하고, Retry-After가 있으면 그 값도 함께 전달합니다. 게이트웨이는 재시도하거나 큐에 넣지 않습니다. |
