BazaarLink 문서
BazaarLink은 대만을 위한 통합 AI API 게이트웨이로 — OpenAI, Anthropic, Google, Meta 등 수백 개의 모델에 단일 OpenAI 호환 API 엔드포인트를 통해 접근할 수 있습니다.
Read https://bazaarlink.ai/skill.md and follow the instructions to integrate BazaarLink into your app.요금제
BazaarLink는 제로 마크업으로 모델 사용 가격을 책정합니다(각 공급자의 공식 정가와 동일). 플랫폼 수수료는 충전(입금) 시 부과됩니다: 10% 거래 수수료와 TWD 채널의 5% 대만 VAT. TWD 견적 및 전자 통합 송장과 함께 USD로 청구됩니다. 셀프 서비스 종량제 충전; 기업은 월별 청구서를 준비할 수 있습니다(Net-30, 협상 가능).
작동 방식
- 소비(차변): 각 API 호출은 공급자의 공식 USD 정가에 따라 실제 토큰 사용량에 따라 청구되며 잔고에서 공제됩니다. 추가 인상이 없고 소비에 대한 추가 수수료가 없습니다.
- 탑업(입금): TWD가 실시간 판매율로 USD로 변환되어 잔액에 추가됩니다. 충전 시 10% 거래 수수료가 부과됩니다.
- • 신용카드: 추가 US$0.60 정액 요금이 적용됩니다. 영수증이 발행됩니다.
- • TWD 채널: 5% 대만 VAT가 추가되고 대만 전자 통합 송장이 발행됩니다.
- • 은행 송금: 대규모 또는 기업 충전의 경우 당사에 문의하여 송금 및 맞춤 송장 발행을 준비하세요.
- 송장 발행: 대만 비용 워크플로에 대해 전자 통합 송장이 지원됩니다. 조달 또는 월별 청구가 필요한 회사는 기업 조건(Net-30, 협상 가능)을 조정할 수 있습니다.
환율에 대하여
외환환산은 실시간 환율을 사용합니다. 월별 청구는 청구(명세서) 시점의 요율을 사용하고 선불 충전은 충전 시간 요율로 변환됩니다. 요율과 타임스탬프는 청구 기록과 함께 유지됩니다.
실패한 요청 과금 보호
업스트림 요청이 실패하고 정산할 수 있는 사용량 데이터가 없으면 BazaarLink가 예약 금액 전액을 자동으로 돌려드립니다. 스트림이 시작된 뒤 중단되었더라도 해당 시도의 청구액은 0달러입니다.
- 업스트림에 연결할 수 없거나 요청이 거부되거나 사용 가능한 결과가 없는 경우
- 일부 콘텐츠가 전송된 뒤라도 최종 사용량 데이터를 받기 전에 스트림이 중단된 경우
- usage가 없거나 모든 값이 0인 빈 usage 객체만 있는 경우
출력 토큰이 0이라고 항상 무료인 것은 아닙니다
요청이 정상 완료되고 공급자가 유효한 usage를 반환하면 BazaarLink는 그 사용량을 정산합니다. 출력 토큰만 보고 무료 여부를 판단하지 마세요. 출력 토큰이 0이어도 입력 토큰이나 유효한 업스트림 보고 비용이 있으면 요금이 발생할 수 있습니다. 최종 청구액은 usage.cost 또는 활동 기록에서 확인하세요.
빠른 시작
세 가지 통합 방법
5분 이내에 시작하세요. BazaarLink은 OpenAI SDK와 완전히 호환됩니다 — 변경할 것은
기본 URL
https://bazaarlink.ai/api/v1OpenAI SDK 사용
BazaarLink은 OpenAI SDK와 완전히 호환됩니다. 기본 URL과 API 키만 변경하면 됩니다 — 나머지 코드는 동일합니다.
sk-bl-.✗ gpt-4.1 claude-sonnet-4.6 gemini-2.5-flash
업스트림 키 직접 사용(BYOK)
본인의 업스트림 공급자 API 키(OpenAI 또는 Anthropic 호환 인터페이스)를 개인 계정이나 조직에 연결하면, 해당 요청은 당신의 키로 업스트림에 직접 연결됩니다. 무중단(seamless)과 엄격(strict) 두 가지 폴백 모드를 선택할 수 있습니다. 개인은 키 페이지의 BYOK 탭에서, 조직은 조직 설정에서 관리합니다. BYOK 설정으로 이동 →
콘텐츠 필터링
API 트래픽에 대한 양방향 콘텐츠 보호: 프롬프트 인젝션이 감지된 요청은 차단(400)되고, 요청과 응답의 민감한 데이터(API 키, 카드 번호, 주민등록번호 등)는 자동으로 가려집니다. 규칙과 예외 목록을 커스터마이즈할 수 있으며 사용 통계도 제공됩니다. 콘텐츠 필터 설정으로 이동 →
OpenRouter에서 마이그레이션
BazaarLink의 API는 OpenRouter와 호환됩니다 — 대부분의 통합은 두 가지 값만 변경하면 전환됩니다: 기본 URL을 https://bazaarlink.ai/api/v1 로, API 키를 sk-bl- 로 시작하는 BazaarLink 키로 변경하세요.
- 기본 URL: https://openrouter.ai/api/v1 → https://bazaarlink.ai/api/v1
- API 키: sk-or-... → sk-bl-... (/keys 에서 생성)
- 모델 ID: 동일한 provider/model 형식 (예: anthropic/claude-sonnet-4.6); 전체 카탈로그는 GET /api/v1/models 에서 확인
- models[] 폴백, 공급자 라우팅 설정, 스트리밍, 도구 호출, 구조화된 출력은 동일한 요청 형식을 사용합니다
인증
모든 API 요청에는 API 키가 포함된 Authorization 헤더가 필요합니다.
Authorization: Bearer sk-bl-YOUR_API_KEY다음에서 API 키를 받으세요 대시보드. 키를 안전하게 보관하세요 — 클라이언트 측 코드에 노출하지 마세요.
선택적 헤더
원칙
BazaarLink은 세 가지 핵심 원칙을 기반으로 설계되었습니다:
1. 통합 인터페이스
하나의 API, 하나의 SDK, 수백 개의 모델. OpenAI, Anthropic, Google Gemini, Meta Llama 등을 코드 변경 없이 전환하세요 — 모델 ID만 변경하면 됩니다.
2. 가격 최적화
BazaarLink은 선택한 모델에 가장 비용 효율적인 공급자로 자동 라우팅합니다. 사용한 만큼만 USD로 청구되며 전체 영수증 발행을 지원합니다.
3. 고가용성
자동 장애 복구로 공급자가 다운되면 요청이 원활하게 재라우팅됩니다. 코드 변경 없음, 다운타임 없음.
멀티모달
BazaarLink은 멀티모달 입력을 지원합니다 — 지원하는 모델에 텍스트와 함께 이미지, 오디오, 파일을 전송하세요. 콘텐츠는 업스트림 공급자로 직접 전달됩니다.
지원 모달리티
예시:
이미지 전송
image_url 부분과 함께 content 배열 형식을 사용하세요. 지원 형식: PNG, JPEG, WebP, GIF(애니메이션 포함). 단일 메시지에 여러 이미지를 포함할 수 있습니다 — 각각 별도의 image_url 부분으로:
제한
BazaarLink에는 두 가지 독립된 제한이 있습니다: 분당 요청 수에 대한 속도 제한과 계정 지출에 대한 크레딧 제한입니다. 속도 제한을 초과하면 HTTP 429가, 크레딧이 소진되면 HTTP 402가 반환됩니다.
속도 제한
속도 제한은 사용자별(키별이 아님)이며 분당 요청 수(RPM)로 측정됩니다. 일일 상한은 없습니다. 등급은 계정 크레딧 잔액에 따라 자동으로 결정됩니다.
속도 제한이 초과되면 Retry-After 헤더와 함께 429 응답을 받습니다. 요청 재시도 시 지수 백오프를 구현하세요.
응답 헤더
성공한 모든 응답에는 클라이언트 측 추적을 위한 rate limit 헤더가 포함됩니다:
X-RateLimit-Limit: 200 # Max requests per minute for your tier
X-RateLimit-Remaining: 198 # Remaining requests in current window
X-RateLimit-Reset: 1740000060 # Unix timestamp when the window resets
X-Request-Id: chatcmpl-abc123 # Unique request ID for debugging크레딧 제한
402 응답은 요청이 너무 빠른 것이 아니라 계정 잔액 또는 키의 지출 한도가 0에 도달했음을 의미합니다. 이 응답에는 속도 제한 헤더가 포함되지 않으며, 스트리밍 도중 한도에 도달하면 HTTP 상태 변경이 아닌 SSE 오류 이벤트로 반환됩니다.
개인 서킷 브레이커
모든 API 키에 적용되는 고정된 1분 및 1시간 USD 지출 한도입니다. 창 임계값에 도달하면 새 요청은 HTTP 429를 받으며, 창은 정시 경계에서 자동으로 초기화됩니다.
이미지 생성
modalities:["image"]를 붙인 /v1/chat/completions 또는 OpenAI DALL·E 호환 /v1/images/generations로 이미지를 생성합니다.
curl -N https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-5.4-image-2","messages":[{"role":"user","content":"a red cat on a sofa"}],"modalities":["image","text"],"stream":true}'비디오 생성
비동기 3단계 흐름(submit → poll → content). 동영상 생성에는 30초~5분이 걸립니다.
curl https://bazaarlink.ai/api/v1/videos \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"alibaba/wan2.7-t2v","prompt":"a bird flying over mountains","duration":3}'
# → 202 { "id": "vjob_xxx", "status": "pending" }PDF 입력
PDF를 네이티브로 지원하는 모델(Claude, Gemini 등)에 메시지로 PDF 문서를 직접 전송할 수 있습니다. BazaarLink는 파일을 그대로 모델에 전달합니다 — 일반 input tokens로 과금, 추가 비용이나 추가 처리 없음.
지원 형식
- PDF 문서 (텍스트, 이미지, 테이블, 스캔)
- Base64 인코딩 데이터 URL (`data:application/pdf;base64,...`)
- 다중 페이지 문서
- 비밀번호 없는 PDF만
비디오 입력
동영상 입력을 지원하는 모델에 동영상 파일을 전송하여 분석, 캡션 생성, 장면 및 이벤트에 대한 질문에 답하게 합니다. 직접 URL 또는 base64 데이터 URI를 사용할 수 있습니다 — URL은 공개적으로 접근 가능한 동영상에 효율적이며, base64는 로컬 파일이나 비공개 동영상에 사용합니다.
지원 형식
MP4(H.264)MPEGMOVWebM관리 API 키
관리 키는 프로그래밍 방식의 키 관리를 위해 설계되었습니다. 표준 API 키를 생성, 나열, 업데이트, 비활성화, 삭제할 수 있지만 — AI 모델 호출은 불가합니다.
관리 키 생성
Management API Keys 페이지로 이동하여 "Create"를 클릭하세요 — 일반 API Keys 페이지의 유형 선택이 아니라 별도의 페이지입니다.
키 목록
하위 키 생성
키 업데이트
키 해지
DELETE https://bazaarlink.ai/api/v1/keys/:id
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# Returns 204 No Content on success잔액 조회
사용량 조회
GET https://bazaarlink.ai/api/v1/usage?period=month
Authorization: Bearer sk-bl-YOUR_MGMT_KEY
# period: day | week | month | year앱 어트리뷰션
요청 헤더에서 애플리케이션을 식별하여 사용량 추적, 대시보드 가시성, 세분화된 분석을 활성화합니다.
사용 가능한 헤더
| Header | Description |
|---|---|
| HTTP-Referer | 사이트 URL, 사용량 추적 및 분석용 (선택사항) |
| X-Title | 앱 이름, 대시보드에 표시 (선택사항) |
오류 코드
오류 응답 형식
모델 추론 엔드포인트는 OpenAI 호환 오류 응답을 반환합니다. type 필드는 달라지거나 생략될 수 있으므로 메시지를 파싱하지 말고 HTTP 상태와 error.code를 프로그램 로직에 사용하세요.
{
"error": {
"message": "Insufficient credits. Please top up to continue.",
"type": "invalid_request_error",
"code": "insufficient_credits"
}
}HTTP 상태 및 오류.코드
Before streaming, the HTTP status identifies the broad failure class. error.code is either that number or a stable string for a specific remedy. Prefer the string code when present, otherwise use the HTTP status.
기계 판독 가능한 청구 코드
A 402 can represent different controls. Use these stable codes to choose the correct action.
Stable error.code catalog
These string codes are emitted by public inference and media paths. Branch on the string code when present; the HTTP status remains the broad failure class.
속도 제한, 예산 및 비상 브레이크
These controls can reject an otherwise valid request and require different recovery actions.
Compatibility note: rate-limit and emergency-brake paths currently emit numeric error.code values. Use HTTP status, Retry-After, and the documented response message.
비디오 및 미디어 리소스 상태
Video validation commonly returns numeric code 400. Missing jobs return 404, retired models 410, unfinished video content 409, and invalid video byte ranges 416.
재시도 정책
Retry only failures that may recover without changing the request. Honor Retry-After or use exponential backoff with jitter. Do not stack SDK and manual retries.
오류 처리
스트리밍 오류 형식
토큰 스트리밍 전에 발생한 오류는 JSON 바디와 함께 표준 HTTP 오류 응답을 반환합니다.
After a stream starts, the HTTP response is already 200. Parse each SSE data frame and treat a top-level error or choices[0].finish_reason === "error" as a failed, incomplete response.
스트림이 중간에 실패하면 BazaarLink는 최상위 error 객체를 담은 마지막 SSE 이벤트를 보내고 이어서 data: [DONE]을 보냅니다. 일부 업스트림에서 그대로 전달되는 청크는 대신 choice에 오류를 담을 수 있습니다(choices[0].finish_reason === "error") — 두 경우 모두 처리하세요.
도구 호출
도구 호출(함수 호출이라고도 함)은 모델이 정의한 외부 함수를 호출할 수 있게 합니다. 모델이 도구 호출 시점을 결정하고 구조화된 인수를 생성합니다 — 코드에서 함수를 실행하고 결과를 반환하여 대화를 계속합니다.
지원 모델
대부분의 프론티어 모델이 도구 호출을 지원합니다. 인기 있는 선택지:
도구 정의
각 도구는 모델이 호출할 수 있는 함수를 설명하는 JSON 객체입니다. parameters 필드는 JSON Schema를 사용합니다.
tool_choice 옵션
전체 흐름
도구 호출은 멀티턴 프로세스입니다: (1) 도구와 함께 요청 전송 → (2) 모델이 tool_calls 반환 → (3) 함수 실행 → (4) 결과 다시 전송 → (5) 모델이 최종 응답 생성.
병렬 도구 호출
일부 모델은 단일 응답에서 여러 도구를 호출할 수 있습니다. 각 도구 호출을 처리하고 모든 결과를 반환하세요:
스트리밍 중 도구 호출
스트리밍 시 도구 호출은 위치별로 인덱싱된 부분 델타로 도착합니다——각 델타의 인자 문자열을 인덱스별로 누적하다가 finish_reason이 "tool_calls"가 되면 호출이 완료된 것입니다.
간단한 에이전트 루프
모델이 도구를 계속 요청하는 동안 계속 호출하고, 최종 답변을 반환하면 멈추는 범용 패턴——무한 루프를 막기 위해 max_iterations를 사용하세요.
함수 정의 모범 사례
- 구체적이고 명확한 이름 사용——단순히 weather가 아니라 get_weather_forecast처럼.
- 함수의 목적과 사용 시점을 명확히 설명——모델은 이 텍스트만으로 호출 여부를 판단합니다.
- 가능하면 enum으로 값을 제한하고 description에 예시를 포함해 잘못된 인자 생성을 줄이세요.
- 정말 필요한 필드만 required로 표시하고, 선택적 필드는 실제로 생략 가능해야 합니다.
구조화된 출력
모델이 스키마에 맞는 유효한 JSON을 반환하도록 강제합니다. 모델 출력을 프로그래밍 방식으로 파싱하는 신뢰할 수 있는 애플리케이션 구축에 필수적입니다.
방법 1: response_format (JSON Schema)
를 사용하여 엄격한 JSON Schema 준수를 강제합니다:
팁
- 명확하고 설명적인 속성 이름을 사용하세요 — 모델이 컨텍스트로 사용합니다.
- 모델을 안내하기 위해 스키마 속성에 설명을 추가하세요.
- 보장된 스키마 준수를 위해 strict: true를 설정하세요 (지연 시간이 약간 증가할 수 있음).
- 스키마를 단순하게 유지하세요 — 깊게 중첩된 스키마는 출력 품질을 저하시킬 수 있습니다.
- 다른 모델로 테스트하세요 — 일부 모델이 복잡한 스키마를 더 잘 처리합니다.
어시스턴트 프리필
메시지 배열의 마지막에 미완성 assistant 메시지를 추가하여 호환되는 모델 경로에 이어서 생성하도록 요청합니다.
메시지 변환
모델 컨텍스트 제한에 맞게 메시지를 자동으로 변환합니다. 메시지가 모델의 컨텍스트 윈도우를 초과하면, 변환이 중간에서 메시지를 제거하여 대화를 지능적으로 압축합니다.
사용법
변환 유형
기본 동작
≤8k 컨텍스트 모델은 middle-out이 자동 활성화됩니다. 더 큰 컨텍스트 모델의 경우 명시적으로 옵트인하세요. Anthropic Claude 모델은 변환 설정에 관계없이 1,000개 메시지 제한도 자동으로 적용합니다.
제로 데이터 보존
BazaarLink은 기본적으로 메시지 내용을 저장하지 않습니다. 이 페이지는 데이터 처리 방법을 설명합니다. 민감한 데이터를 처리하는 애플리케이션에 적합합니다.
현재 데이터 처리
- 메시지 내용: 기본적으로 저장하지 않으며, 처리 후 메모리에서 삭제
- 과금 메타데이터: 토큰 수, 타임스탬프, 모델 ID
- 사용 로그: 요청 통계만, 메시지 내용 없음
- 업스트림 전달: 메시지가 업스트림 공급자에 전달됨 — 해당 개인정보 정책 적용
프롬프트 캐싱
프롬프트 캐싱은 이전에 계산된 프롬프트 토큰을 재사용하여 비용과 지연 시간을 크게 줄입니다 — 특히 반복되는 대규모 시스템 프롬프트가 있는 애플리케이션에 효과적입니다.
작동 방식
설정이 필요한지 여부는 공급자에 따라 다릅니다. OpenAI 계열 모델은 길고 반복되는 프롬프트 접두사를 자동으로 캐싱합니다 — 요청을 변경할 필요가 없습니다. Claude(Anthropic) 모델은 요청에 명시적인 cache_control 브레이크포인트가 있을 때만 캐싱되며, BazaarLink는 이를 대신 추가하지 않으므로 마커가 없는 Claude 요청은 절대 캐싱되지 않습니다. BazaarLink는 보낸 캐시 마커를 그대로 전달하고 실제 캐시 읽기/쓰기 토큰 수를 사용량 응답에 보고합니다.
추론 토큰
추론 모델(예: DeepSeek R1, o1 시리즈)은 최종 답변을 생성하기 전에 내부적으로 사고합니다. 이러한 내부 토큰을 추론 토큰이라 하며 별도로 과금됩니다.
응답에서 추론 토큰 읽기
사고 모드 제어
일부 모델은 "사고" 모드를 토글할 수 있습니다. 사고 모드는 최종 답변을 생성하기 전에 내부 추론 토큰을 생성하여 더 많은 토큰 비용으로 품질을 향상시킵니다.
| 모델 패밀리 | 파라미터 | 기본값 |
|---|---|---|
| qwen3-* | enable_thinking: boolean | false (플랫폼 기본값) |
| openai/o1, o3, o4-mini | reasoning_effort: "low" | "medium" | "high" | medium |
| deepseek/deepseek-r1 | — | 항상 활성화 (비활성화 불가) |
통합 reasoning 객체 (새 형식)
BazaarLink은 모든 모델 패밀리에서 단일 일관된 API로 작동하는 통합 reasoning 객체도 지원합니다:
| 필드 | 값 | 적용 대상 |
|---|---|---|
| reasoning.effort | "xhigh" | "high" | "medium" | "low" | "none" | OpenAI o-series, Grok |
| reasoning.max_tokens | integer | Anthropic Claude, Gemini |
| reasoning.exclude | boolean | 응답에서 사고 숨기기 (모델은 여전히 추론) |
지연 시간 & 성능
AI API 응답 지연 시간 최적화는 사용자 경험에 중요합니다. BazaarLink 아키텍처에서 지연 시간에 영향을 미치는 핵심 요소와 최적화 모범 사례를 아래에서 확인하세요.
지연 시간에 영향을 미치는 요소
- 모델 크기: 대형 모델(70B+)은 일반적으로 생성이 느림
- 공급자 부하: 공급자와 시간대에 따라 다름
- 토큰 수: max_tokens가 높을수록 완성 시간이 길어짐
- 스트리밍 vs. 비스트리밍: stream: true가 첫 토큰을 더 빨리 전달
- 컨텍스트 길이: 매우 긴 컨텍스트는 전처리 시간 증가
최적화 팁
- 체감 지연 시간을 개선하기 위해 스트리밍(stream: true) 선호
- 고처리량 공급자를 선택하려면 :nitro 변형 사용
- 지연 시간에 민감한 시나리오에서는 소형 모델(flash/mini/haiku) 선택
- 최저 지연 시간 공급자를 자동 선택하려면 provider.sort: "latency" 사용
- 반복 요청의 지연 시간을 줄이기 위해 프롬프트 캐싱 활성화
가동 시간 최적화
BazaarLink은 여러 계층을 통해 API 가용성을 극대화합니다: 자동 장애 복구, 서킷 브레이커, 공급자 상태 모니터링.
가용성 메커니즘
- 서킷 브레이커: 실패하는 공급자를 자동 감지하고 격리
- 자동 장애 복구: 백업 공급자로 원활하게 전환 — 코드 변경 불필요
- 공급자 상태 모니터링: 공급자별 오류율과 지연 시간을 지속적으로 추적
- 재시도 로직: 일시적 오류(5xx)는 자동으로 재시도
서킷 브레이커
가드레일
유해 콘텐츠를 필터링하고 규정 준수 정책을 시행하기 위해 API 요청에 콘텐츠 안전 메커니즘을 추가합니다. BazaarLink는 현재 조직(Organization) 수준에서만 사용자 정의 가능한 콘텐츠 필터 가드레일을 제공합니다. 개인(비조직) API 키에는 해당 설정이 없으며, 콘텐츠 안전은 전적으로 각 업스트림 모델 공급자 자체의 내장 안전 시스템에 의존합니다.
계획된 기능 (개인·조직 키 모두 아직 제공되지 않음)
현재 동작
개인 API 키: 모든 업스트림 공급자는 자체 콘텐츠 안전 시스템을 갖추고 있으며, 콘텐츠 필터를 트리거하는 모델 응답은 finish_reason: "content_filter"로 반환되고 BazaarLink는 추가 필터링을 하지 않습니다. 조직 API 키: org_admin이 "콘텐츠 필터 가드레일"에서 사용자 정의 규칙(차단/편집/기록)을 설정할 수 있으며, 텍스트가 모델에 전달되기 전에 적용됩니다.
커서 IDE 통합
BazaarLink을 Cursor의 OpenAI Override URL로 설정하여 모든 모델을 Cursor 내에서 즉시 호출하세요. Responses API 자동 변환, 도구 형식 정규화, Claude 모델용 bz- 접두사 규약을 지원합니다.
빠른 설정
Cursor에서 설정 → 모델을 열고 다음을 수행합니다:
- Override OpenAI Base URL을 https://bazaarlink.ai/v1로 설정
- Override OpenAI API Key를 sk-bl-... BazaarLink 키로 설정
- 원하는 모델 이름을 추가 — Claude 모델은 아래의 bz- 접두사를 참고하세요.
bz- 접두사(Claude 모델용)
Cursor의 클라이언트 측 검증은 claude-로 시작하는 모델 이름을 Cursor 자체 Anthropic 통합으로 라우팅하여 Override URL을 우회합니다. Cursor가 BazaarLink로 요청을 보내도록 하려면 모델 이름 앞에 bz-를 붙이세요. 서버가 접두사를 제거하고 alias map으로 나머지를 해석합니다.
점과 하이픈 변형은 정규화됩니다: bz-claude-sonnet-4.6과 bz-claude-sonnet-4-6은 모두 같은 모델로 해석됩니다.
CURSOR_MODEL_MAP 환경 변수(운영자 재정의)
BazaarLink을 자체 호스팅하는 경우 이 환경 변수를 설정하면 Cursor 측의 임의 모델 이름을 카탈로그의 canonical id로 재매핑할 수 있습니다:
CURSOR_MODEL_MAP=gpt-claude-sonnet:anthropic/claude-sonnet-4.6,gpt-opus:anthropic/claude-opus-4.7이제 Cursor에 gpt-claude-sonnet을 입력하면 서버 측에서 anthropic/claude-sonnet-4.6으로 매핑됩니다. Cursor가 모델을 GPT 계열로 인식하여 Override URL을 통해 라우팅하도록 하면서 실제로는 Claude를 제공하고 싶을 때 유용합니다.
자동으로 처리되는 작업
요청이 /api/v1/chat/completions에 도달하면 BazaarLink는 다음 호환성 변환을 투명하게 적용합니다 — 클라이언트 측에서 할 일이 없습니다:
- Responses API 본문 자동 감지 — 본문에 messages 대신 input이 있으면 Chat Completions 형식으로 변환됩니다(Cursor는 GPT 계열 모델에 Responses API 형식을 보냅니다).
- 평면적인 도구 정의 래핑 — Cursor Agent는 function 래퍼 없이 { name, description, parameters }를 보냅니다. Anthropic이 Tool '' not found in provided tools로 거부하지 않도록 래핑합니다.
- 잘못된 tool_choice 강제 변환 — Cursor는 { type: "auto" }(객체 형식, function 없음)를 보냅니다. OpenAI 사양은 auto/none/required에 문자열 형식을 요구하므로 강제 변환합니다.
- 비 OpenAI 공급자로 라우팅할 때 OpenAI 전용 필드 제거 — parallel_tool_calls, logprobs, top_logprobs, logit_bias, service_tier, user는 전달 전에 제거됩니다(그렇지 않으면 Anthropic이 400을 반환).
- max_output_tokens → max_tokens로 매핑하고 Responses-API 전용 필드(previous_response_id, truncation, background, store)를 제거합니다. reasoning 필드는 Chat-Completions 네이티브 본문에서 보존됩니다.
Cursor Agent 모드
도구 호출은 표준 Chat Completions 도구 호출 흐름으로 작동합니다. Cursor는 tools(Shell, Read, Write, Grep 등)와 tool_choice: "auto"를 보냅니다; BazaarLink가 선택한 공급자로 전달하면 공급자가 도구를 호출할지 결정합니다. 도구 호출은 표준 OpenAI tool_calls 델타로 반환되고 Cursor가 로컬에서 실행하고 대화를 계속합니다. gpt-4o(네이티브 OpenAI)를 선택하든 bz-claude-sonnet-4.6을 선택하든 동일하게 작동합니다.
모델 라우팅
BazaarLink은 provider/model-name 형식을 사용하여 요청을 올바른 업스트림 공급자로 라우팅합니다. 이를 통해 단일 API 엔드포인트로 주요 모델에 접근할 수 있습니다.
모델 ID 형식
{provider}/{model-name}
# Examples
openai/gpt-5.4-mini
anthropic/claude-sonnet-4.6
google/gemini-3-flash-preview
deepseek/deepseek-v3.2라우팅 우선순위
요청을 보내면 BazaarLink은 다음 순서로 업스트림 공급자를 결정합니다:
- 정확한 일치 — 전체 모델 ID에 일치하는 모델 라우트 검색
- 공급자 와일드카드 — provider/* 라우트로 폴백 (예: openai/*)
- 전역 와일드카드 — * 와일드카드 라우트로 폴백
- 기본 공급자 키 — 카탈로그에 등록된 모델에 한해 활성화되고 기본으로 표시된 키 사용
다음에서 사용 가능한 모든 모델을 탐색하세요 모델 페이지.
자동 라우터
Auto Router v3는 요청을 14개 작업 tier 중 하나로 평가한 뒤 해당 tier에 현재 설정된 primary와 fallback 체인을 사용합니다. 유료 및 무료 표는 관리자 화면에서 별도로 관리됩니다.
- auto — 유료 라우팅 표를 사용하며 성공한 실제 모델의 공개 가격으로 청구됩니다.
- auto:free — 무료 라우팅 표를 사용하며 무료 한도 내 비용은 0달러입니다. 한도 소진 후 잔액이 있으면 유료 fallback을 끄지 않은 경우 유료 auto로 전환될 수 있습니다.
사용 방법
자동 라우팅을 활성화하려면 모델을 "auto" (유료) 또는 "auto:free" (무료)로 설정하세요:
curl https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer $BAZAARLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"auto","messages":[{"role":"user","content":"Review this TypeScript function"}]}'v3 tier 선택 방식
일반 tier는 simple, standard, complex, reasoning이며 전문 tier는 coding, vision, image, video, data, search, social, email, calendar, trading입니다. 경계 신뢰도가 낮으면 난이도를 한 단계 올립니다.
- tier 평가: messages, tools, 길이, 키워드 및 구조 신호로 14개 tier 중 하나를 선택
- 강제 규칙: 이미지, 형식 추론 및 전문 작업은 tier를 직접 선택할 수 있음
- 라우트 조회: 현재 primary와 최대 5개 fallback을 읽고 비활성 tier는 503 반환
- 실행: primary 다음에 설정된 순서대로 fallback 시도
- 응답 추적: 결정된 모델이 응답 바디와 X-Auto-Resolved-Model 헤더에 반환
현재 모델 표
아래 표는 추론과 관리자 화면이 함께 사용하는 실시간 설정입니다. 각 tier의 primary, fallback 순서 및 활성 상태를 재배포 없이 변경할 수 있습니다.
auto
auto:free
일부 모델은 속도 제한이 있는 무료 티어를 제공합니다. 무료 자격은 플랫폼이 모델 단위로 부여합니다 — 일반 모델 ID로 호출하면 됩니다. :free 접미사는 선택적 별칭입니다(유료 모델에 붙여도 무료가 되지 않습니다).
모델 변형
모델 ID에 접미사를 추가하여 라우팅 동작을 변경합니다. BazaarLink은 7가지 변형 유형을 지원합니다.
독립 모델 ID
이 변형은 자체 가격과 기능을 가진 별도의 모델로 존재합니다. BazaarLink은 전체 모델 ID(접미사 포함)를 먼저 시도한 다음 기본 모델로 폴백합니다.
:free
:extended
:thinking
:exacto라우팅 단축키
이 접미사는 모델 아이덴티티를 변경하지 않고 공급자 선택을 수정합니다. 라우트 매칭 전에 접미사가 제거됩니다.
:floor # lowest listed input price first
:nitro # throughput-oriented shortcut
:online # enable web-search routing멀티 공급자 동작
변형을 지원하는 업스트림의 경우 접미사가 있는 그대로 전달됩니다. 직접 공급자(예: 직접 OpenAI, Fireworks)의 경우 접미사가 제거되고 BazaarLink이 로컬에서 라우팅을 처리합니다.
무료 모델
일부 모델은 속도 제한이 있는 무료 티어를 제공합니다. 무료 자격은 플랫폼이 모델 단위로 부여합니다 — 일반 모델 ID로 호출하면 됩니다. :free 접미사는 선택적 별칭입니다(유료 모델에 붙여도 무료가 되지 않습니다).
- 일반 모델 ID(예: deepseek/deepseek-v4-flash)로 호출하세요. 무료 한도 내 요청은 자동으로 무료 처리됩니다.
- 무료 사용량은 사용자별 분당 요청 수(RPM)와 일일 한도로 제한됩니다. 한도는 계정 등급(무충전 / 충전)에 따라 조정됩니다.
- 무료 한도를 초과해도 크레딧이 있으면 요청이 표시된 가격의 유료 티어로 자동 계속됩니다. X-Free-Fallback: false를 보내면 자동 전환을 끄고 대신 429를 받습니다. 크레딧이 없으면 초과 요청은 429를 반환합니다.
- GET /api/v1/models는 무료 티어가 있는 모델마다 :free 항목을 나열합니다. auto:free는 항상 무료 모델로 라우팅됩니다.
현재 무료 할당량이 있는 모델
이 모델 ID로 바로 호출하면 무료 할당량이 적용됩니다. 목록은 수시로 바뀌므로 최신 정보는 API로 조회하세요.
deepseek/deepseek-v4-flash무료 할당량 상한
일일 할당량 = 위 표의 일일 요청 할당량 × 계정 등급 배율이며, 무료 모델별로 따로 계산됩니다. auto:free에는 IP 단위 병렬 상한이 추가로 적용됩니다. 개별 모델은 플랫폼이 더 엄격하거나 느슨한 한도를 지정할 수 있으며, 실제 값은 모델 페이지의 "무료 할당량" 블록에 표시됩니다.
무료 할당량 소진 이후
할당량을 다 쓰더라도 잔액이 있으면 요청은 해당 모델의 유료 가격으로 자동 계속되며(서비스 중단 없음) 일반 유료 호출과 동일하게 과금됩니다. 과금보다 실패를 원하면 X-Free-Fallback: false 헤더를 보내거나 키 설정에서 자동 전환을 끄세요. 이 경우 429가 반환됩니다. 잔액이 없으면 초과 요청은 항상 429를 반환합니다.
# Return 429 instead of switching to paid routing
-H "X-Free-Fallback: false"조직 관리
BazaarLink 조직은 3단계 아키텍처를 사용합니다: 조직 → 팀 → 구성원. 크레딧은 조직 수준에 저장되며; 각 팀과 구성원에게 월간 지출 상한을 설정할 수 있습니다. API 요청은 구성원 → 팀 → 조직 크레딧을 순서대로 확인합니다.
3단계 예산 시스템
모든 API 요청에서 세 가지 예산 계층이 순서대로 확인됩니다. 어떤 계층이든 초과하면 HTTP 429를 반환합니다:
- 구성원 월간 예산 (OrgMember.monthlyBudget)
- 팀 월간 예산 (Team.monthlyBudget)
- 조직 크레딧 잔액 (Organization.credits)
사용량 보고서
조직 포털의 보고서 페이지는 네 가지 차원에서 월간 지출 분석을 제공합니다:
- 개요: 총 지출, 마진율, 일일 추세 차트
- 팀별: 팀별 지출, 점유율 %, 모델 세분화, 예산 활용률
- 모델별: 모델별 지출, 평균 가격 ($/1M 토큰)
- 구성원별: 구성원별 지출 — org_admin만
모든 뷰는 Excel과의 직접 호환성을 위해 BOM 접두사가 포함된 CSV 내보내기를 지원합니다.
조직 생성 & 관리
- 설정 → 조직 → 새 조직 만들기로 이동
- 조직 포털에서 팀 생성 (선택사항: 비용 센터 코드 및 월간 예산)
- 이메일로 구성원 초대, 역할과 팀 배정
- 구성원에게 API 키 발급 — 사용량이 올바른 팀/구성원에 자동 태깅
- 월간 지출을 팀, 모델, 구성원별로 세분화하여 보고서 페이지에서 확인
- 팀, 모델 또는 멤버별로 분류된 월별 지출에 대한 보고서 페이지 보기
구성원 역할
조직이 관리할 수 있는 다른 항목은 무엇입니까?
구성원과 팀을 넘어서 조직 관리 영역은 다음을 제공합니다.
- API keys and model restrictions
- Content filtering before text reaches a model
- Allowed Models by organization, team, member, or key
- Monthly budgets and spend emergency brakes
- Reports, billing, change logs, and security logs
- Education sessions and quotas for eligible organizations
- 기관 계획: 교육 기관은 학생 세션 및 할당량을 추가로 관리할 수 있습니다.
콘텐츠 필터링
Organization-owned rules inspect text before it reaches a model. An org_admin can enable, edit, and test them in Settings.
- block: reject with HTTP 403
- redact: replace matches with [REDACTED]
- flag: send unchanged and record an audit event
- Built-in sensitive-data and prompt-injection templates plus custom keyword or regex rules
- Up to 100 safety-checked rules with a test preview
관리 API (v1)
/api/v1/orgs/ 엔드포인트는 Bearer 관리 키(sk-bl-...)와 세션 쿠키를 모두 지원하여, 브라우저 세션 없이 서버 간 조직 관리를 가능하게 합니다.
조직
/api/v1/orgs호출자가 속한 모든 organization을 role 및 joinedAt과 함께 나열합니다.
/api/v1/orgs/:orgIdteam 및 member 수를 포함한 org 상세 정보를 가져옵니다.
curl https://bazaarlink.ai/api/v1/orgs \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY"팀
/api/v1/orgs/:orgId/teams이름순으로 정렬된, member 수가 포함된 team 목록을 가져옵니다.
/api/v1/orgs/:orgId/teams/api/v1/orgs/:orgId/teams/:teamId부분 업데이트 — 변경할 필드만 포함하세요.
/api/v1/orgs/:orgId/teams/:teamId# Create a team
curl https://bazaarlink.ai/api/v1/orgs/{orgId}/teams \
-X POST \
-H "Authorization: Bearer sk-bl-YOUR_MANAGEMENT_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Engineering", "costCenterCode": "ENG-001", "monthlyBudget": 500}'구성원
/api/v1/orgs/:orgId/members중첩된 user (id/name/email) 및 team 정보를 포함하여 모든 member를 나열합니다.
/api/v1/orgs/:orgId/members이메일 주소에 BazaarLink 계정이 없으면 404. 이미 구성원이면 409. 기본 역할: member.
/api/v1/orgs/:orgId/members/:memberIdrole, teamId 또는 monthlyBudget의 부분 업데이트.
/api/v1/orgs/:orgId/members/:memberId대상이 마지막 org_admin이면 400을 반환합니다.
보고서 API
월간 지출 데이터를 프로그래밍 방식으로 조회합니다. org_admin과 billing_viewer에게 접근 가능. 웹 세션과 Bearer 관리 키 모두 지원.
쿼리 파라미터: year (기본값 현재), month (기본값 현재, 1–12).
오류 응답 대조표
허용 모델 (화이트리스트)
조직, 팀 또는 개별 멤버가 호출할 수 있는 모델을 제한합니다. 비싸거나 검증되지 않은 모델 차단, 모델 표준 강제, 특정 팀을 단일 provider로 한정하는 데 유용합니다.
동작 방식
- 세 개의 독립된 계층 — 조직, 팀, 멤버 — 각각 자체 목록을 보유합니다 (DB 상 String[]).
- 세 계층이 모두 비어 있으면 모든 모델이 허용됩니다 (기본 동작).
- 하나 이상의 계층이 비어 있지 않으면 effective list는 비어 있지 않은 계층들의 교집합입니다 — 모델은 제한된 모든 계층에서 허용되어야 통과합니다.
- 변경 사항은 몇 초 이내에 반영됩니다 (60초 in-memory + 5분 Redis 캐시; 업데이트 시 둘 다 비워집니다).
패턴 형식
- 정확 일치 — 예: openai/gpt-4o (이 모델만 허용).
- Provider 와일드카드 — 예: openai/* (openai/ prefix 하위의 모든 모델).
- 소문자만 허용. 목록당 최대 200개 항목, 항목당 100자.
관리 위치
Org Portal → Allowed Models. org_admin은 조직 / 팀 / 멤버 목록을 편집할 수 있고, team_admin은 자신의 팀과 그 팀 내 멤버를 편집할 수 있습니다.
차단 시 오류 응답
허용되지 않은 모델 호출은 다음 body와 함께 HTTP 403을 반환합니다:
관리 API
모든 endpoint는 Web Session 또는 Bearer Management Key (sk-bl-...)를 받습니다. PATCH는 전체 목록을 교체합니다; 비우려면 []를 전달하세요.
지출 차단기 (Spend Kill Switch)
upstream 비용이 급증할 때 추가 요청을 차단하는 dual-window 지출 한도입니다. 폭주하는 스크립트, 무한 루프, 도난 키 남용이 실제 비용을 발생시키기 전에 봉쇄하도록 설계되었습니다.
동작 방식
- scope별로 두 개의 고정된 window가 Redis에 추적됩니다: 1분 및 1시간 upstream 비용 (USD).
- 어느 한 window의 지출이 임계값에 도달하면 해당 scope의 모든 후속 요청은 window가 리셋될 때까지 거부됩니다.
- 기본값: $5 / 분, $20 / 시간, 기본적으로 활성화됨.
- 카운터는 TTL과 함께 Redis에 저장됩니다 — 복구는 자동이며, org / team / member trip에는 수동 reset이 필요 없습니다.
Scope (member가 team을 override, team이 org를 override)
각 계층은 자체 임계값을 설정할 수 있습니다. 해석 순서는 member → team → org → platform 기본값 — 필드별로 첫 번째 non-null 값이 적용됩니다 (cbEnabled, cbMinuteUsd, cbHourlyUsd).
- Org 레벨 — 조직 산하 모든 키에 적용됩니다. Org Portal → Circuit Breaker에서 설정.
- Team 레벨 — 해당 팀에 태그된 모든 키에 적용됩니다. 해당 키에 대해 org를 override합니다.
- Member 레벨 — 해당 멤버에 태그된 키에만 적용됩니다. team과 org를 override합니다.
Trip 동작
트립되면 요청은 빠르게 실패합니다 (upstream 호출은 발생하지 않음). 응답은 다음 body와 함께 HTTP 429입니다:
감사 로그
모든 trip 이벤트와 모든 설정 변경이 기록됩니다:
- Trip 이벤트 — action org.cb.tripped / team.cb.tripped / org_member.cb.tripped. 시간당 scope+window별 한 항목으로 중복 제거되어 지속적인 trip이 로그를 범람시키지 않습니다.
- 설정 변경 — action org.cb.update / team.cb.update / org_member.cb.update. before / after 값과 actor를 기록합니다.
관리 API
Org admin은 API를 통해 설정을 읽고 업데이트할 수 있습니다. 모든 endpoint는 Web Session 또는 Bearer Management Key (sk-bl-...)를 받습니다. PATCH body에 필드의 어떤 부분집합이든 보내세요; null은 필드를 비우고 부모 계층으로 fallback합니다.
API 키 순환
API 키를 정기적으로 순환하는 것은 보안 모범 사례입니다. BazaarLink은 다운타임 없는 키 순환을 지원합니다 — 먼저 새 키를 만들고, 마이그레이션한 다음, 이전 키를 해지합니다.
순환 단계
- 새 API 키 생성
- 새 키를 사용하도록 애플리케이션 또는 환경 변수 업데이트
- 새 키가 올바르게 작동하는지 확인
- 이전 키 비활성화 또는 삭제
활동 내보내기
재무 감사, 비용 분석, 규정 준수 보고를 위해 전체 API 사용 기록을 CSV로 다운로드합니다.
CSV 내보내기
로그인 후 로그 페이지로 이동하세요. 오른쪽 상단의 CSV 내보내기 버튼을 클릭하여 전체 기록을 CSV 파일로 다운로드합니다. API 호출이 필요 없습니다.
CSV 열
JSON 사용량 API
프로그래밍 방식 접근을 위해, 기간, 모델, 키별로 그룹화된 집계 통계를 조회하세요:
사용량 회계
토큰 소비, 비용 분석, 요청 기록을 포함한 상세 사용량 통계를 API를 통해 조회합니다.
응답 필드 레퍼런스
| Field | Type | Description |
|---|---|---|
| model | string | Model ID used (e.g., openai/gpt-4o) |
| provider | string | Upstream provider name |
| prompt_tokens | number | Input tokens consumed |
| completion_tokens | number | Output tokens generated |
| total_tokens | number | Total tokens (prompt + completion) |
| reasoning_tokens | number | Reasoning tokens (for thinking models) |
| cached_tokens | number | Prompt tokens served from cache |
| cost | number | Total cost in USD credits |
| duration_ms | number | End-to-end latency in milliseconds |
| throughput | number | Generation speed in tokens/sec |
| finish_reason | string | stop | length | content_filter | error |
| status | number | HTTP status code from upstream |
| app_name | string | null | Application name (X-Title header) |
| key_name | string | API key name used for the request |
기관 계획
Institution Plan은 어떤 기관(학교, 기업, 컨퍼런스, 정부 기관 등)이든 단일 조직 수준 키로부터 구성원에게 단기 세션 토큰을 발급할 수 있도록 합니다. 구성원은 플랫폼 계정을 만들 필요가 없습니다. 조직은 이메일 도메인(예: nthu.edu.tw)을 통해 어떤 구성원이 토큰을 요청할 수 있는지 제어하며, 모든 사용량은 조직 계정으로 청구됩니다. 이 페이지는 교육 시나리오를 예시로 설명하지만, 동일한 메커니즘이 단기간 다중 사용자 임시 접근이 필요한 모든 기관에 적용됩니다.
아키텍처 개요
- 기관 Key — sk-edu-로 시작합니다. org_admin이 조직 키 페이지에서 생성합니다. Bearer 토큰으로 직접 API를 호출하는 데 사용할 수 없습니다 — 직접 호출 시 403을 반환합니다.
- 멤버 세션 토큰 — edu-sess-로 시작합니다. 학생이 이메일 인증 후 발급받습니다. 기본 유효 기간은 24시간이며, 조직 관리자가 해지할 수 있습니다.
- 허용된 도메인 — 조직이 어떤 이메일 도메인(정확히 일치, 접미사 우회 없음)이 세션을 요청할 수 있는지 설정합니다.
- 사용 속성 — 모든 학생 요청은 조직 계정으로 청구됩니다. 사용량은 세션별 및 이메일별로 조직 대시보드에서 확인할 수 있습니다.
Step 1 — 플랫폼 관리자가 조직 유형을 Education으로 설정합니다
sales@bazaarlink.ai / support@bazaarlink.ai에서 대상 조직을 찾고, "Org Type" 탭으로 전환한 뒤 Education을 선택하고 허용 이메일 도메인을 설정합니다:
Step 2 — 조직 관리자가 기관 Key를 생성합니다
조직의 API Keys 페이지에서 새 키를 생성할 때 키 유형으로 "Education"을 선택합니다. 시스템이 sk-edu-... 키를 생성하고 한 번만 표시합니다 — 저장한 뒤 공식 채널을 통해 해당 조직의 학생들에게 배포합니다.
Step 3 — 학생이 인증 코드를 요청합니다
학생은 /access에 접속하여 edu 키와 학교 이메일을 입력하거나, API를 직접 호출합니다:
/api/edu/request-codeStep 4 — 학생이 코드를 제출하여 세션 토큰으로 교환합니다
/api/edu/verifyStep 5 — 세션 토큰을 사용하여 API를 호출합니다
edu-sess-... 토큰을 Bearer 토큰으로 사용하여 chat / completions / embeddings 엔드포인트를 호출합니다:
curl -X POST https://bazaarlink.ai/api/v1/chat/completions \
-H "Authorization: Bearer edu-sess-827d11a1ec67d175cfd4f67f929261f4" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-haiku-4.5",
"messages": [{"role": "user", "content": "Hello"}]
}'403 — Education keys cannot be used directly. Visit /access to exchange for a session.이는 의도적인 역방향 게이트입니다 — 학교가 개별 학생에게 장기 키를 유출하는 것을 막아줍니다.
조직 대시보드 — 모니터링 및 해지
Education 유형 조직은 사이드 nav에 Education 탭을 받으며, 다음 기능을 제공합니다:
- 설정 — 허용 도메인, TTL, 키별 이메일당 최대 세션 수, 세션별 요청 / 토큰 / USD 할당량을 조정합니다.
- 세션 — 활성 / 만료 / 해지된 모든 세션을 나열하고, 이메일로 필터링하며, 개별 세션을 해지합니다.
- 사용 통계 — 세션별 호출 수, 토큰 소비량 및 누적 비용을 확인합니다.
보안 및 제한
| 항목 | 기본값 | 설명 |
|---|---|---|
| 세션 TTL | 24시간 | 세션 토큰의 유효 기간이며, 만료된 세션은 재인증이 필요합니다. |
| 인증코드 TTL | 15분 | 이메일 인증 코드의 유효 기간입니다. |
| 인증 코드 길이 | 6자리 | Redis에 HMAC-SHA256 해시로 저장되며, 평문으로 저장되지 않습니다. |
| 추정 한계 | 5회 시도 | 이를 초과하면 코드가 즉시 무효화됩니다. |
| 요청 코드 쿨다운 | 60초 | 동일한 (key, email)에 대한 반복 요청 사이의 최소 간격입니다. |
| Per-IP 속도 제한 | 10 / 15분 | 스팸 방지용입니다. |
| 키별 비율 제한 | 100 / 시간 | 대량 이메일 발송을 방지합니다. |
| 이메일당 최대 세션수 | 5 | eduConfig에서 설정할 수 있으며, 한 이메일이 토큰을 독점하는 것을 방지합니다. |
| 해지 전파 | ≤ 60초 | L1/L2 캐시 TTL이며, DB 해지 후 모든 노드에 전파되는 데 최대 60초가 걸립니다. |
청구 및 사용량 귀속
세션 토큰을 통한 모든 요청은 edu 키를 소유한 조직에 100% 청구되며, 이는 업스트림 공급자(OpenAI / Anthropic / 등)가 토큰 단위로 청구하는 방식과 일치합니다. 조직 대시보드는 세션별, 이메일별, 키별 드릴다운을 지원합니다.
피드백 보고
문제, 버그, 제안을 보고하여 BazaarLink 개선에 도움을 주세요. 모든 피드백 채널을 적극적으로 모니터링합니다.
보고 방법
포함할 내용
- 요청 ID (응답 id 필드에서)
- 사용한 모델과 전송한 파라미터
- 예상 동작 vs 실제 동작
- 타임스탬프 및 문제 빈도
- 오류 메시지 또는 HTTP 상태 코드