{"openapi":"3.1.0","info":{"title":"KURE API","version":"0.1.0"},"paths":{"/api/v1/embeddings":{"post":{"tags":["API"],"summary":"Create Embeddings","operationId":"create_embeddings_api_v1_embeddings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"Model retired (`model_retired`). Use its replacement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/rerank":{"post":{"tags":["API"],"summary":"Rerank","description":"질문과 문서 목록 → 관련도 순 정렬 (#19). 점수는 모델 logit의 sigmoid (0~1).","operationId":"rerank_api_v1_rerank_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerankRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RerankResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"Model retired (`model_retired`). Use its replacement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/sparse-embeddings":{"post":{"tags":["API"],"summary":"Create Sparse Embeddings","description":"텍스트 → 희소 벡터 (#19). indices는 모델 어휘 번호(모델마다 다름), 오름차순.","operationId":"create_sparse_embeddings_api_v1_sparse_embeddings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparseEmbeddingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SparseEmbeddingResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"Model retired (`model_retired`). Use its replacement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/models":{"get":{"tags":["API"],"summary":"List Models","description":"스냅샷 다음에 별칭 (`alias_for`가 가리키는 스냅샷).","operationId":"list_models_api_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelList"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/auth/providers":{"get":{"tags":["Web"],"summary":"Auth Providers","description":"로그인 화면에 보일 버튼. 설정이 비어 있는 제공자는 끈다.","operationId":"auth_providers_api_auth_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthProviders"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/auth/logout":{"post":{"tags":["Web"],"summary":"Logout","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/me":{"get":{"tags":["Web"],"summary":"Me","operationId":"me_api_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Web"],"summary":"Delete Account","description":"탈퇴: 저장 원문·사용량 삭제, 회원 삭제(키·세션 연쇄 삭제 → NOTIFY로 즉시 무효). consent_log는 증빙용으로 남김.","operationId":"delete_account_api_me_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/me/signup":{"post":{"tags":["Web"],"summary":"Signup","operationId":"signup_api_me_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/me/consent":{"post":{"tags":["Web"],"summary":"Change Consent","description":"동의 변경 → 트리거가 NOTIFY → 모든 gateway가 키 캐시를 비워 다음 요청부터 한도·저장 여부 반영.","operationId":"change_consent_api_me_consent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/me/inputs/delete":{"post":{"tags":["Web"],"summary":"Delete Inputs","description":"저장된 원문 삭제 요청 (동의 상태는 그대로).","operationId":"delete_inputs_api_me_inputs_delete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/keys":{"get":{"tags":["Web"],"summary":"List Keys","operationId":"list_keys_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyList"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"tags":["Web"],"summary":"Create Key","operationId":"create_key_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewApiKey"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/keys/{key_id}":{"delete":{"tags":["Web"],"summary":"Revoke Key","operationId":"revoke_key_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/usage":{"get":{"tags":["Web"],"summary":"Usage","description":"최근 N일(KST) 일별 사용량. 키별 세부와 일별 합계.","operationId":"usage_api_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/playground/similarity":{"post":{"tags":["Playground"],"summary":"Similarity","description":"질의 1개 + 문서 최대 5개 → 차원별 cosine 점수 (비로그인 가능).","operationId":"similarity_api_playground_similarity_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilarityBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Similarity"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/playground/embed":{"post":{"tags":["Playground"],"summary":"Embed","description":"벡터 보기·다운로드, 미니 검색용 (로그인). 응답은 OpenAI 임베딩 형식.","operationId":"embed_api_playground_embed_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/playground/rerank":{"post":{"tags":["Playground"],"summary":"Rerank","description":"KURE-Reranker-nano: 질의 1개 + 문서 최대 5개 → 문서 순서대로 관련 확률 (비로그인 가능).","operationId":"rerank_api_playground_rerank_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaygroundRerank"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/playground/sparse":{"post":{"tags":["Playground"],"summary":"Sparse","description":"KURE-Sparse-nano: 질의 벡터의 상위 단어(질의에 없던 확장 단어 표시)와 문서별 내적·기여 단어 (비로그인 가능).","operationId":"sparse_api_playground_sparse_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaygroundSparse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/contact":{"post":{"tags":["Web"],"summary":"Submit","operationId":"submit_api_contact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key / not logged in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded or server busy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"No inference worker available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"ApiKey":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"}},"type":"object","required":["id","name","prefix","created_at","last_used_at","revoked_at"],"title":"ApiKey"},"ApiKeyList":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ApiKey"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ApiKeyList"},"AuthProviders":{"properties":{"github":{"type":"boolean","title":"Github"},"google":{"type":"boolean","title":"Google"}},"type":"object","required":["github","google"],"title":"AuthProviders","description":"켜져 있는 로그인 제공자."},"ConsentBody":{"properties":{"store_inputs":{"type":"boolean","title":"Store Inputs"}},"type":"object","required":["store_inputs"],"title":"ConsentBody"},"ContactBody":{"properties":{"topic":{"type":"string","enum":["limit","enterprise","bug","privacy","other"],"title":"Topic"},"email":{"type":"string","maxLength":254,"pattern":"^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$","title":"Email"},"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"organization":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Organization"},"expected_usage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Expected Usage","description":"한도·엔터프라이즈 문의: 예상 사용량"},"message":{"type":"string","maxLength":5000,"minLength":10,"title":"Message"},"agree_collection":{"type":"boolean","title":"Agree Collection","description":"개인정보 수집·이용 동의 (필수)","default":false},"agree_transfer":{"type":"boolean","title":"Agree Transfer","description":"개인정보 국외 이전 동의 (필수, Gmail)","default":false},"website":{"type":"string","title":"Website","default":""}},"type":"object","required":["topic","email","message"],"title":"ContactBody"},"EmbedBody":{"properties":{"input":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Input"},"input_type":{"type":"string","pattern":"^(query|document)$","title":"Input Type"},"dimensions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dimensions"}},"type":"object","required":["input","input_type"],"title":"EmbedBody"},"Embedding":{"properties":{"object":{"type":"string","const":"embedding","title":"Object","default":"embedding"},"index":{"type":"integer","title":"Index"},"embedding":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"string"}],"title":"Embedding"}},"type":"object","required":["index","embedding"],"title":"Embedding"},"EmbeddingRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Model ID: a snapshot such as `kure-v3-20261016`, or an alias (`kure-v3`, `kure-v3-latest`)."},"input":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"title":"Input","description":"Text or list of texts (at most 8). Empty strings are not allowed."},"input_type":{"anyOf":[{"type":"string","enum":["query","document"]},{"type":"null"}],"title":"Input Type","description":"KURE extension. Prepends the model's query/document prompt. Omit to embed text as-is."},"dimensions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dimensions","description":"MRL output dimensions. Defaults to the model's full size."},"encoding_format":{"type":"string","enum":["float","base64"],"title":"Encoding Format","default":"float"}},"type":"object","required":["model","input"],"title":"EmbeddingRequest"},"EmbeddingResponse":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"model":{"type":"string","title":"Model"},"data":{"items":{"$ref":"#/components/schemas/Embedding"},"type":"array","title":"Data"},"usage":{"$ref":"#/components/schemas/EmbeddingUsage"}},"type":"object","required":["model","data","usage"],"title":"EmbeddingResponse"},"EmbeddingUsage":{"properties":{"prompt_tokens":{"type":"integer","title":"Prompt Tokens"},"total_tokens":{"type":"integer","title":"Total Tokens"}},"type":"object","required":["prompt_tokens","total_tokens"],"title":"EmbeddingUsage"},"ErrorBody":{"properties":{"message":{"type":"string","title":"Message"},"type":{"type":"string","title":"Type"},"param":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Param"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},"type":"object","required":["message","type"],"title":"ErrorBody"},"ErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/ErrorBody"}},"type":"object","required":["error"],"title":"ErrorResponse"},"KeyBody":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"KeyBody"},"Me":{"properties":{"user":{"$ref":"#/components/schemas/MeUser"},"limits":{"$ref":"#/components/schemas/MeLimits"},"versions":{"$ref":"#/components/schemas/MeVersions"},"notices":{"items":{"$ref":"#/components/schemas/ModelNotice"},"type":"array","title":"Notices","default":[]}},"type":"object","required":["user","limits","versions"],"title":"Me"},"MeLimits":{"properties":{"rpm":{"type":"integer","title":"Rpm"},"tpm":{"type":"integer","title":"Tpm"},"daily_tokens":{"type":"integer","title":"Daily Tokens"}},"type":"object","required":["rpm","tpm","daily_tokens"],"title":"MeLimits"},"MeUser":{"properties":{"id":{"type":"integer","title":"Id"},"login":{"type":"string","title":"Login"},"provider":{"type":"string","enum":["github","google","internal"],"title":"Provider"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"tier":{"type":"string","title":"Tier"},"signed_up":{"type":"boolean","title":"Signed Up"},"store_inputs":{"type":"boolean","title":"Store Inputs"},"consent_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consent Version"},"created_at":{"type":"string","title":"Created At"},"is_admin":{"type":"boolean","title":"Is Admin","default":false}},"type":"object","required":["id","login","provider","name","avatar_url","tier","signed_up","store_inputs","consent_version","created_at"],"title":"MeUser"},"MeVersions":{"properties":{"tos":{"type":"string","title":"Tos"},"consent":{"type":"string","title":"Consent"}},"type":"object","required":["tos","consent"],"title":"MeVersions"},"Model":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"model","title":"Object","default":"model"},"created":{"type":"integer","title":"Created"},"owned_by":{"type":"string","title":"Owned By"},"task":{"type":"string","enum":["embedding","sparse-embedding","rerank"],"title":"Task","description":"KURE extension. Endpoint: `/embeddings`, `/sparse-embeddings` or `/rerank`."},"alias_for":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias For","description":"KURE extension. For an alias (`kure-v3`, `kure-v3-latest`), the snapshot it currently points to. Snapshots (`kure-v3-20261016`) never change; aliases move to newer snapshots."},"status":{"type":"string","enum":["active","deprecated"],"title":"Status","description":"KURE extension. `deprecated` models stop being served after `sunset`."},"sunset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sunset","description":"KURE extension. Earliest retirement date (KST)."},"replacement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replacement","description":"KURE extension. Model to migrate to."}},"type":"object","required":["id","created","owned_by","task","status"],"title":"Model"},"ModelList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/Model"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ModelList"},"ModelNotice":{"properties":{"model":{"type":"string","title":"Model"},"sunset":{"type":"string","title":"Sunset"},"replacement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replacement"},"last_used":{"type":"string","title":"Last Used"}},"type":"object","required":["model","sunset","replacement","last_used"],"title":"ModelNotice","description":"최근 30일 내 쓴 모델 중 deprecated인 것 (대시보드 배너)."},"NewApiKey":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","name","prefix","created_at","last_used_at","revoked_at","key"],"title":"NewApiKey"},"Ok":{"properties":{"ok":{"type":"boolean","title":"Ok"}},"type":"object","required":["ok"],"title":"Ok"},"PairBody":{"properties":{"query":{"type":"string","minLength":1,"title":"Query"},"documents":{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":1,"title":"Documents"}},"type":"object","required":["query","documents"],"title":"PairBody"},"PlaygroundRerank":{"properties":{"model":{"type":"string","title":"Model"},"scores":{"items":{"type":"number"},"type":"array","title":"Scores","description":"Relevance probability per document, in input order."},"usage":{"$ref":"#/components/schemas/PlaygroundUsage"}},"type":"object","required":["model","scores","usage"],"title":"PlaygroundRerank"},"PlaygroundSparse":{"properties":{"model":{"type":"string","title":"Model"},"query_terms":{"items":{"$ref":"#/components/schemas/QueryTerm"},"type":"array","title":"Query Terms","description":"Largest query weights."},"scores":{"items":{"type":"number"},"type":"array","title":"Scores","description":"Dot product with the query, per document in input order."},"matched":{"items":{"items":{"type":"string"},"type":"array"},"type":"array","title":"Matched","description":"Terms that contributed most to each document's score."},"usage":{"$ref":"#/components/schemas/PlaygroundUsage"}},"type":"object","required":["model","query_terms","scores","matched","usage"],"title":"PlaygroundSparse"},"PlaygroundUsage":{"properties":{"total_tokens":{"type":"integer","title":"Total Tokens"}},"type":"object","required":["total_tokens"],"title":"PlaygroundUsage"},"QueryTerm":{"properties":{"term":{"type":"string","title":"Term"},"weight":{"type":"number","title":"Weight"},"in_query":{"type":"boolean","title":"In Query","description":"False for expansion terms the model added."}},"type":"object","required":["term","weight","in_query"],"title":"QueryTerm"},"RerankDocument":{"properties":{"text":{"type":"string","title":"Text"}},"type":"object","required":["text"],"title":"RerankDocument"},"RerankRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Model ID: a snapshot such as `kure-reranker-nano-20261016`, or an alias (`kure-reranker-nano`)."},"query":{"type":"string","title":"Query","description":"Search query."},"documents":{"items":{"type":"string"},"type":"array","title":"Documents","description":"Documents to rank (at most 100). Empty strings are not allowed."},"top_n":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Top N","description":"Return only the top N results. Defaults to all documents."},"return_documents":{"type":"boolean","title":"Return Documents","description":"Include each document's text in the results.","default":false}},"type":"object","required":["model","query","documents"],"title":"RerankRequest"},"RerankResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"model":{"type":"string","title":"Model"},"results":{"items":{"$ref":"#/components/schemas/RerankResult"},"type":"array","title":"Results","description":"Sorted by `relevance_score`, highest first."},"usage":{"$ref":"#/components/schemas/RerankUsage"}},"type":"object","required":["model","results","usage"],"title":"RerankResponse"},"RerankResult":{"properties":{"index":{"type":"integer","title":"Index","description":"Position of the document in the request."},"relevance_score":{"type":"number","title":"Relevance Score","description":"Sigmoid of the model's logit, 0 to 1. Higher is more relevant."},"document":{"anyOf":[{"$ref":"#/components/schemas/RerankDocument"},{"type":"null"}],"description":"Present when `return_documents` is true."}},"type":"object","required":["index","relevance_score"],"title":"RerankResult"},"RerankUsage":{"properties":{"total_tokens":{"type":"integer","title":"Total Tokens","description":"Tokens of every (query, document) pair."}},"type":"object","required":["total_tokens"],"title":"RerankUsage"},"SignupBody":{"properties":{"accept_tos":{"type":"boolean","title":"Accept Tos"},"store_inputs":{"type":"boolean","title":"Store Inputs","default":false}},"type":"object","required":["accept_tos"],"title":"SignupBody"},"Similarity":{"properties":{"model":{"type":"string","title":"Model"},"dims":{"items":{"type":"integer"},"type":"array","title":"Dims"},"scores":{"additionalProperties":{"items":{"type":"number"},"type":"array"},"type":"object","title":"Scores"},"usage":{"$ref":"#/components/schemas/SimilarityUsage"}},"type":"object","required":["model","dims","scores","usage"],"title":"Similarity"},"SimilarityBody":{"properties":{"query":{"type":"string","minLength":1,"title":"Query"},"documents":{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":1,"title":"Documents"}},"type":"object","required":["query","documents"],"title":"SimilarityBody"},"SimilarityUsage":{"properties":{"prompt_tokens":{"type":"integer","title":"Prompt Tokens"}},"type":"object","required":["prompt_tokens"],"title":"SimilarityUsage"},"SparseEmbedding":{"properties":{"object":{"type":"string","const":"sparse_embedding","title":"Object","default":"sparse_embedding"},"index":{"type":"integer","title":"Index"},"indices":{"items":{"type":"integer"},"type":"array","title":"Indices","description":"Vocabulary term IDs (ascending). Specific to each model."},"values":{"items":{"type":"number"},"type":"array","title":"Values","description":"Positive weights, one per index."},"tokens":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tokens","description":"Vocabulary term per index, when `return_tokens` is true."}},"type":"object","required":["index","indices","values"],"title":"SparseEmbedding"},"SparseEmbeddingRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Model ID: a snapshot such as `kure-sparse-nano-20261016`, or an alias (`kure-sparse-nano`)."},"input":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"title":"Input","description":"Text or list of texts (at most 8). Empty strings are not allowed."},"input_type":{"type":"string","enum":["query","document"],"title":"Input Type","description":"`query` for search queries, `document` for texts to index. The model encodes them differently."},"max_nnz":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Nnz","description":"Keep only the N largest weights (e.g. 1,000 for pgvector `sparsevec` HNSW)."},"return_tokens":{"type":"boolean","title":"Return Tokens","description":"Include the vocabulary term for each index.","default":false}},"type":"object","required":["model","input","input_type"],"title":"SparseEmbeddingRequest"},"SparseEmbeddingResponse":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"model":{"type":"string","title":"Model"},"dimension":{"type":"integer","title":"Dimension","description":"Vocabulary size: every index is below this."},"data":{"items":{"$ref":"#/components/schemas/SparseEmbedding"},"type":"array","title":"Data"},"usage":{"$ref":"#/components/schemas/EmbeddingUsage"}},"type":"object","required":["model","dimension","data","usage"],"title":"SparseEmbeddingResponse"},"Usage":{"properties":{"since":{"type":"string","title":"Since"},"daily":{"items":{"$ref":"#/components/schemas/UsageDay"},"type":"array","title":"Daily"},"by_key":{"items":{"$ref":"#/components/schemas/UsageByKey"},"type":"array","title":"By Key"}},"type":"object","required":["since","daily","by_key"],"title":"Usage"},"UsageByKey":{"properties":{"date":{"type":"string","title":"Date"},"requests":{"type":"integer","title":"Requests"},"input_tokens":{"type":"integer","title":"Input Tokens"},"errors":{"type":"integer","title":"Errors"},"api_key_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Api Key Id"},"model":{"type":"string","title":"Model"}},"type":"object","required":["date","requests","input_tokens","errors","api_key_id","model"],"title":"UsageByKey"},"UsageDay":{"properties":{"date":{"type":"string","title":"Date"},"requests":{"type":"integer","title":"Requests"},"input_tokens":{"type":"integer","title":"Input Tokens"},"errors":{"type":"integer","title":"Errors"}},"type":"object","required":["date","requests","input_tokens","errors"],"title":"UsageDay"}}}}