01첫 요청
운영 요청은 서버에서 발급한 고객 API 키를 Bearer 토큰으로 전달합니다. 키를 브라우저나 앱 번들에 포함하지 마세요.
curl https://blindpick.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BLINDPICK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "auto",
"messages": [{"role": "user", "content": "이 문서를 세 줄로 요약해줘"}],
"router": {"optimize_for": "balanced", "fallback": "approved-models"}
}'
OpenAI JavaScript SDK
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.BLINDPICK_API_KEY,
baseURL: "https://blindpick.ai/api/v1"
});
const result = await client.chat.completions.create({
model: "auto",
messages: [{ role: "user", content: "핵심 위험을 분석해줘" }]
});
console.log(result.choices[0].message.content);
02Streaming
stream: true는 OpenAI 호환 SSE delta와 [DONE]을 반환합니다. stream_options.include_usage를 켜면 마지막 chunk에서 사용량을 확인할 수 있습니다.
const stream = await client.chat.completions.create({
model: "auto",
messages: [{ role: "user", content: "출시 체크리스트를 작성해줘" }],
stream: true,
stream_options: { include_usage: true }
});
for await (const event of stream) {
process.stdout.write(event.choices[0]?.delta?.content ?? "");
}
응답 헤더 X-Blindpick-Stream-Mode는 native 또는 buffered, X-Request-Id와 X-Blindpick-Decision-Id는 지원 문의와 실행 추적에 사용합니다.
03Routing 옵션
| 필드 | 값 | 용도 |
|---|
model | auto 또는 모델 ID | 자동 선택 또는 모델 고정 |
router.optimize_for | auto, quality, balanced, latency, throughput, cost, reliability | 목표를 모델 점수·provider 정렬·폴백 설정으로 자동 변환 |
router.provider_sort | latency, throughput, price | OpenRouter 사용 시 승인 provider 안에서 정렬 |
router.preset | balanced, performance, speed, economy | 이전 버전 호환용 저수준 가중치 |
router.provider | provider ID | 지정 시 해당 모델 공급자로 강제 제한 |
router.data_class | general, confidential, restricted | 데이터 처리 경로 제한 |
router.fallback | off, same-model, approved-models | 실패 시 허용 범위 |
router.max_cost_usd | 양수 | 요청당 비용 상한 |
optimize_for만 지정하면 요청 의도, Arena형 선호 신뢰도, 품질·속도·비용, provider health를 함께 계산해 모델과 실행 설정을 만듭니다. 요청 옵션은 발급된 API 키의 보안·비용 정책을 완화하지 못합니다.
POST /api/v1/routes/preview에 같은 요청을 보내면 실행 없이 감지 의도, 컴파일된 정책, 후보 점수, 선택 근거를 확인할 수 있습니다.
04오류와 재시도
| HTTP | 의미 | 권장 처리 |
|---|
| 400 | 요청 또는 정책 제약 오류 | 요청을 수정하고 재시도하지 않음 |
| 401 / 403 | 키·scope·권한 오류 | 키와 권한 확인 |
| 402 | 크레딧 부족 | 충전 또는 한도 조정 |
| 409 | capability 확인 또는 실행 상태 충돌 | 응답 지시에 따라 명시적 capability 선택 |
| 429 | 요청 한도 초과 | 지수 백오프와 jitter 적용 |
| 503 | 일시적 provider·서비스 불가 | Retry-After 이후 제한적으로 재시도 |
오류 본문은 error.message, error.type, error.code 형식입니다. 결제·권한 오류는 자동 재시도하지 말고, 429·503만 동일 idempotency 조건에서 제한적으로 재시도하세요.
05고급 Responses API
대화 외에 Agent·개발 작업이 필요한 경우 POST /api/v1/responses를 사용합니다. GET /api/v1/capabilities로 현재 키에서 실제 실행 가능한 기능을 먼저 확인하며, 사용할 수 없는 기능은 일반 채팅으로 조용히 대체하지 않습니다.
POST /api/v1/responses — 동기 응답 또는 background job 생성GET /api/v1/responses/:id — 상태와 결과 조회GET /api/v1/responses/:id/events — 진행 이벤트 SSEPOST /api/v1/responses/:id/cancel — 작업 취소