Developer guide
API 호출하기
API 호환 경로와 스트리밍·음성 규칙
Written in 한국어. A version in your language is being prepared.
이 페이지는 인증을 마친 뒤 실제로 부르는 경로를 다룹니다.
OpenAI 호환 경로와 Anthropic 호환 경로의 목록, 요청 본문에 stream 을 켰을 때 응답이 오는 방식,
음성·보이스 경로에만 적용되는 규칙 순서입니다.
모델 ID 와 모델별 허용된 호출은 모델 페이지에, 인증 헤더와 base URL 은 API 키로 인증하기 페이지에 있습니다.
진행 경로
두 호환 규격은 같은 API 키를 쓰고, 대화형 추론 모델은 어느 규격으로도 부를 수 있습니다. 하려는 일과 쓰던 SDK 에 따라 경로를 고릅니다.
| 하려는 일 | 규격 | 경로 |
|---|---|---|
| 대화형 추론, OpenAI SDK 사용 | OpenAI 호환 | POST /chat/completions 또는 POST /responses |
| 대화형 추론, Anthropic SDK 사용 | Anthropic 호환 | POST /v1/messages |
| 임베딩 생성 | OpenAI 호환 | POST /embeddings |
| 음성 합성·전사, 보이스 관리 | OpenAI 호환 | /audio 와 /voices 아래 경로 |
| 호출할 수 있는 모델 확인 | 둘 다 | GET /models |
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 입니다. |
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": "안녕하세요"}]
}'sk-... 자리에는 API 키 화면에서 발급한 키를, model 에는 모델 페이지의 ID 를 넣습니다.
그 밖의 경로
| 경로 | 설명 |
|---|---|
| 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 경로를 규칙을 적용해 중계합니다. POST 중계로 chat/completions, completions, embeddings, responses 를 부르면 404 이며, 넷은 전용 경로가 처리합니다. |
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 입니다. |
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": "안녕하세요"}]
}'스트리밍 (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 으로 거절됩니다. 백그라운드 응답의 사용량을 정확히 한 번만 계량할 수 있을 때까지 닫아 둔 경로입니다. |
첫 청크와 함께 아래 세 헤더가 내려갑니다. 이후에는 청크마다 event: 줄(업스트림이 이벤트 이름을 준 경우에만)과 data: 줄을 보내고 즉시 flush 합니다.
- 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]음성과 보이스 경로
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 이 내려갑니다. 보존 기간은 3일이고 이후에는 404 입니다. |
| Product 선택 | audio/speech 와 audio/transcriptions 는 본문의 model 로 Product 를 고릅니다. 보이스·진단 경로는 X-Product-Sku 헤더 또는 product_sku 쿼리가 필요합니다. |
| 보이스 소유권 | 복제·등록한 보이스는 만든 주체에게 귀속됩니다. 남의 보이스로 합성하거나 삭제하려 하면 403 이고, GET /voices 목록도 본인 소유만 남깁니다. |
| 크기와 시간 | 요청 상한은 28 MiB, 업스트림 호출 제한 시간은 5분입니다. |
| provider 혼잡 | 업스트림이 바쁘면 409 가 그대로 전달되고, Retry-After 를 주면 그 값도 함께 전달됩니다. 게이트웨이가 재시도하거나 큐에 넣지 않습니다. |
